Skip to main content

frclib_core/units/
data.rs

1use crate::units::data_rate::{
2    BytesPerSecond, GigabytesPerHour, KilobytesPerSecond, MegabytesPerSecond,
3};
4use crate::units::time::Second;
5use crate::{unit, unit_conversion, unit_dim_analysis, unit_family};
6
7use super::time::Hour;
8
9unit!(Byte: float);
10unit!(Kilobyte: float);
11unit!(Megabyte: float);
12unit!(Gigabyte: float);
13
14unit_conversion!(Byte(float) <-> Kilobyte(float) ~ byte_to_kilobyte);
15unit_conversion!(Byte(float) <-> Megabyte(float) ~ byte_to_megabyte);
16unit_conversion!(Byte(float) <-> Gigabyte(float) ~ byte_to_gigabyte);
17unit_conversion!(Kilobyte(float) <-> Megabyte(float) ~ kilobyte_to_megabyte);
18unit_conversion!(Kilobyte(float) <-> Gigabyte(float) ~ kilobyte_to_gigabyte);
19unit_conversion!(Megabyte(float) <-> Gigabyte(float) ~ megabyte_to_gigabyte);
20
21unit_family!(Data(Byte): Kilobyte, Megabyte, Gigabyte);
22
23unit_dim_analysis!(BytesPerSecond * Second = Byte);
24unit_dim_analysis!(KilobytesPerSecond * Second = Kilobyte);
25unit_dim_analysis!(MegabytesPerSecond * Second = Megabyte);
26unit_dim_analysis!(GigabytesPerHour * Hour = Gigabyte);
27
28fn byte_to_kilobyte(byte: f64) -> f64 {
29    byte / 1000.0
30}
31
32fn byte_to_megabyte(byte: f64) -> f64 {
33    byte / 1_000_000.0
34}
35
36fn byte_to_gigabyte(byte: f64) -> f64 {
37    byte / 1_000_000_000.0
38}
39
40fn kilobyte_to_megabyte(kilobyte: f64) -> f64 {
41    kilobyte / 1000.0
42}
43
44fn kilobyte_to_gigabyte(kilobyte: f64) -> f64 {
45    kilobyte / 1_000_000.0
46}
47
48fn megabyte_to_gigabyte(megabyte: f64) -> f64 {
49    megabyte / 1000.0
50}