1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use serde::de::DeserializeOwned;
use traffloat_types::{time, units};
use xylem::{DefaultContext, NoArgs, Xylem};

use crate::Schema;

impl<T: DeserializeOwned + Xylem<Schema>> Xylem<Schema> for time::Rate<T> {
    type From = Self;
    type Args = NoArgs;

    fn convert_impl(
        from: Self::From,
        _: &mut DefaultContext,
        _: &Self::Args,
    ) -> anyhow::Result<Self> {
        Ok(from)
    }
}

impl<T: units::Unit + Xylem<Schema>> Xylem<Schema> for units::Portion<T> {
    type From = Self;
    type Args = NoArgs;

    fn convert_impl(
        from: Self::From,
        _: &mut DefaultContext,
        _: &Self::Args,
    ) -> anyhow::Result<Self> {
        Ok(from)
    }
}

impl_xylem_for_self! {
    units::LiquidVolume,
    units::LiquidViscosity,
    units::GasVolume,
    units::CargoSize,
    units::ElectricPower,
    units::ElectricEnergy,
    units::Brightness,
    units::Skill,
    units::RailForce,
    units::PipeForce,
    units::FanForce,
    units::VehicleSpeed,
    units::Hitpoint,
}