core: fix unit binary vs decimal wonkiness
This commit is contained in:
parent
ec1faac74c
commit
027cde096a
|
@ -16,61 +16,57 @@ pub type SharedString = Cow<'static, str>;
|
||||||
/// downstream systems natively support defining units and so they can be specified during registration.
|
/// downstream systems natively support defining units and so they can be specified during registration.
|
||||||
#[derive(Clone, Debug, PartialEq)]
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
pub enum Unit {
|
pub enum Unit {
|
||||||
// Dimensionless measurements.
|
|
||||||
/// Count.
|
/// Count.
|
||||||
Count,
|
Count,
|
||||||
/// Percentage.
|
/// Percentage.
|
||||||
Percent,
|
Percent,
|
||||||
// Time measurements.
|
|
||||||
/// Seconds.
|
/// Seconds.
|
||||||
|
///
|
||||||
|
/// One second is equal to 1000 milliseconds.
|
||||||
Seconds,
|
Seconds,
|
||||||
/// Milliseconds.
|
/// Milliseconds.
|
||||||
|
///
|
||||||
|
/// One millisecond is equal to 1000 microseconds.
|
||||||
Milliseconds,
|
Milliseconds,
|
||||||
/// Microseconds.
|
/// Microseconds.
|
||||||
|
///
|
||||||
|
/// One microsecond is equal to 1000 nanoseconds.
|
||||||
Microseconds,
|
Microseconds,
|
||||||
/// Nanoseconds.
|
/// Nanoseconds.
|
||||||
Nanoseconds,
|
Nanoseconds,
|
||||||
|
/// Tebibytes.
|
||||||
// Data measurement.
|
///
|
||||||
/// Terabytes.
|
/// One tebibyte is equal to 1024 gigibytes.
|
||||||
Terabytes,
|
Tebibytes,
|
||||||
/// Gigabytes.
|
/// Gigibytes.
|
||||||
Gigabytes,
|
///
|
||||||
/// Megabytes.
|
/// One gigibyte is equal to 1024 mebibytes.
|
||||||
Megabytes,
|
Gigibytes,
|
||||||
/// Kilobytes.
|
/// Mebibytes.
|
||||||
Kilobytes,
|
///
|
||||||
|
/// One mebibyte is equal to 1024 kibibytes.
|
||||||
|
Mebibytes,
|
||||||
|
/// Kibibytes.
|
||||||
|
///
|
||||||
|
/// One kibibyte is equal to 1024 bytes.
|
||||||
|
Kibibytes,
|
||||||
/// Bytes.
|
/// Bytes.
|
||||||
Bytes,
|
Bytes,
|
||||||
/// Terabits.
|
|
||||||
Terabits,
|
|
||||||
/// Gigabits.
|
|
||||||
Gigabits,
|
|
||||||
/// Megabits.
|
|
||||||
Megabits,
|
|
||||||
/// Kilobits.
|
|
||||||
Kilobits,
|
|
||||||
/// Bits.
|
|
||||||
Bits,
|
|
||||||
|
|
||||||
// Rate measurements.
|
|
||||||
/// Terabytes per second.
|
|
||||||
TerabytesPerSecond,
|
|
||||||
/// Gigabytes per second.
|
|
||||||
GigabytesPerSecond,
|
|
||||||
/// Megabytes per second.
|
|
||||||
MegabytesPerSecond,
|
|
||||||
/// Kilobytes per second.
|
|
||||||
KilobytesPerSecond,
|
|
||||||
/// Bytes per second.
|
|
||||||
BytesPerSecond,
|
|
||||||
/// Terabits per second.
|
/// Terabits per second.
|
||||||
|
///
|
||||||
|
/// One terabit is equal to 1000 gigabits.
|
||||||
TerabitsPerSecond,
|
TerabitsPerSecond,
|
||||||
/// Gigabits per second.
|
/// Gigabits per second.
|
||||||
|
///
|
||||||
|
/// One gigabit is equal to 1000 megabits.
|
||||||
GigabitsPerSecond,
|
GigabitsPerSecond,
|
||||||
/// Megabits per second.
|
/// Megabits per second.
|
||||||
|
///
|
||||||
|
/// One megabit is equal to 1000 kilobits.
|
||||||
MegabitsPerSecond,
|
MegabitsPerSecond,
|
||||||
/// Kilobits per second.
|
/// Kilobits per second.
|
||||||
|
///
|
||||||
|
/// One kilobit is equal to 1000 bits.
|
||||||
KilobitsPerSecond,
|
KilobitsPerSecond,
|
||||||
/// Bits per second.
|
/// Bits per second.
|
||||||
BitsPerSecond,
|
BitsPerSecond,
|
||||||
|
@ -88,21 +84,11 @@ impl Unit {
|
||||||
Unit::Milliseconds => "milliseconds",
|
Unit::Milliseconds => "milliseconds",
|
||||||
Unit::Microseconds => "microseconds",
|
Unit::Microseconds => "microseconds",
|
||||||
Unit::Nanoseconds => "nanoseconds",
|
Unit::Nanoseconds => "nanoseconds",
|
||||||
Unit::Terabytes => "terabytes",
|
Unit::Tebibytes => "tebibytes",
|
||||||
Unit::Gigabytes => "gigabytes",
|
Unit::Gigibytes => "gigibytes",
|
||||||
Unit::Megabytes => "megabytes",
|
Unit::Mebibytes => "mebibytes",
|
||||||
Unit::Kilobytes => "kilobytes",
|
Unit::Kibibytes => "kibibytes",
|
||||||
Unit::Bytes => "bytes",
|
Unit::Bytes => "bytes",
|
||||||
Unit::Terabits => "terabits",
|
|
||||||
Unit::Gigabits => "gigabits",
|
|
||||||
Unit::Megabits => "megabits",
|
|
||||||
Unit::Kilobits => "kilobits",
|
|
||||||
Unit::Bits => "bits",
|
|
||||||
Unit::TerabytesPerSecond => "terabytes_per_second",
|
|
||||||
Unit::GigabytesPerSecond => "gigabytes_per_second",
|
|
||||||
Unit::MegabytesPerSecond => "megabytes_per_second",
|
|
||||||
Unit::KilobytesPerSecond => "kilobytes_per_second",
|
|
||||||
Unit::BytesPerSecond => "bytes_per_second",
|
|
||||||
Unit::TerabitsPerSecond => "terabits_per_second",
|
Unit::TerabitsPerSecond => "terabits_per_second",
|
||||||
Unit::GigabitsPerSecond => "gigabits_per_second",
|
Unit::GigabitsPerSecond => "gigabits_per_second",
|
||||||
Unit::MegabitsPerSecond => "megabits_per_second",
|
Unit::MegabitsPerSecond => "megabits_per_second",
|
||||||
|
@ -126,25 +112,15 @@ impl Unit {
|
||||||
Unit::Milliseconds => "ms",
|
Unit::Milliseconds => "ms",
|
||||||
Unit::Microseconds => "us",
|
Unit::Microseconds => "us",
|
||||||
Unit::Nanoseconds => "ns",
|
Unit::Nanoseconds => "ns",
|
||||||
Unit::Terabytes => "TB",
|
Unit::Tebibytes => "TiB",
|
||||||
Unit::Gigabytes => "Gb",
|
Unit::Gigibytes => "GiB",
|
||||||
Unit::Megabytes => "MB",
|
Unit::Mebibytes => "MiB",
|
||||||
Unit::Kilobytes => "KB",
|
Unit::Kibibytes => "KiB",
|
||||||
Unit::Bytes => "B",
|
Unit::Bytes => "B",
|
||||||
Unit::Terabits => "Tb",
|
|
||||||
Unit::Gigabits => "Gb",
|
|
||||||
Unit::Megabits => "Mb",
|
|
||||||
Unit::Kilobits => "Kb",
|
|
||||||
Unit::Bits => "b",
|
|
||||||
Unit::TerabytesPerSecond => "TBps",
|
|
||||||
Unit::GigabytesPerSecond => "GBps",
|
|
||||||
Unit::MegabytesPerSecond => "MBps",
|
|
||||||
Unit::KilobytesPerSecond => "KBps",
|
|
||||||
Unit::BytesPerSecond => "Bps",
|
|
||||||
Unit::TerabitsPerSecond => "Tbps",
|
Unit::TerabitsPerSecond => "Tbps",
|
||||||
Unit::GigabitsPerSecond => "Gbps",
|
Unit::GigabitsPerSecond => "Gbps",
|
||||||
Unit::MegabitsPerSecond => "Mbps",
|
Unit::MegabitsPerSecond => "Mbps",
|
||||||
Unit::KilobitsPerSecond => "Kbps",
|
Unit::KilobitsPerSecond => "kbps",
|
||||||
Unit::BitsPerSecond => "bps",
|
Unit::BitsPerSecond => "bps",
|
||||||
Unit::CountPerSecond => "/s",
|
Unit::CountPerSecond => "/s",
|
||||||
}
|
}
|
||||||
|
@ -161,21 +137,11 @@ impl Unit {
|
||||||
"milliseconds" => Some(Unit::Milliseconds),
|
"milliseconds" => Some(Unit::Milliseconds),
|
||||||
"microseconds" => Some(Unit::Microseconds),
|
"microseconds" => Some(Unit::Microseconds),
|
||||||
"nanoseconds" => Some(Unit::Nanoseconds),
|
"nanoseconds" => Some(Unit::Nanoseconds),
|
||||||
"terabytes" => Some(Unit::Terabytes),
|
"tebibytes" => Some(Unit::Tebibytes),
|
||||||
"gigabytes" => Some(Unit::Gigabytes),
|
"gigibytes" => Some(Unit::Gigibytes),
|
||||||
"megabytes" => Some(Unit::Megabytes),
|
"mebibytes" => Some(Unit::Mebibytes),
|
||||||
"kilobytes" => Some(Unit::Kilobytes),
|
"kibibytes" => Some(Unit::Kibibytes),
|
||||||
"bytes" => Some(Unit::Bytes),
|
"bytes" => Some(Unit::Bytes),
|
||||||
"terabits" => Some(Unit::Terabits),
|
|
||||||
"gigabits" => Some(Unit::Gigabits),
|
|
||||||
"megabits" => Some(Unit::Megabits),
|
|
||||||
"kilobits" => Some(Unit::Kilobits),
|
|
||||||
"bits" => Some(Unit::Bits),
|
|
||||||
"terabytes_per_second" => Some(Unit::TerabytesPerSecond),
|
|
||||||
"gigabytes_per_second" => Some(Unit::GigabytesPerSecond),
|
|
||||||
"megabytes_per_second" => Some(Unit::MegabytesPerSecond),
|
|
||||||
"kilobytes_per_second" => Some(Unit::KilobytesPerSecond),
|
|
||||||
"bytes_per_second" => Some(Unit::BytesPerSecond),
|
|
||||||
"terabits_per_second" => Some(Unit::TerabitsPerSecond),
|
"terabits_per_second" => Some(Unit::TerabitsPerSecond),
|
||||||
"gigabits_per_second" => Some(Unit::GigabitsPerSecond),
|
"gigabits_per_second" => Some(Unit::GigabitsPerSecond),
|
||||||
"megabits_per_second" => Some(Unit::MegabitsPerSecond),
|
"megabits_per_second" => Some(Unit::MegabitsPerSecond),
|
||||||
|
@ -197,21 +163,11 @@ impl Unit {
|
||||||
/// Whether or not this unit relates to the measurement of data.
|
/// Whether or not this unit relates to the measurement of data.
|
||||||
pub fn is_data_based(&self) -> bool {
|
pub fn is_data_based(&self) -> bool {
|
||||||
match self {
|
match self {
|
||||||
Unit::Terabytes
|
Unit::Tebibytes
|
||||||
| Unit::Gigabytes
|
| Unit::Gigibytes
|
||||||
| Unit::Megabytes
|
| Unit::Mebibytes
|
||||||
| Unit::Kilobytes
|
| Unit::Kibibytes
|
||||||
| Unit::Bytes
|
| Unit::Bytes
|
||||||
| Unit::Terabits
|
|
||||||
| Unit::Gigabits
|
|
||||||
| Unit::Megabits
|
|
||||||
| Unit::Kilobits
|
|
||||||
| Unit::Bits
|
|
||||||
| Unit::TerabytesPerSecond
|
|
||||||
| Unit::GigabytesPerSecond
|
|
||||||
| Unit::MegabytesPerSecond
|
|
||||||
| Unit::KilobytesPerSecond
|
|
||||||
| Unit::BytesPerSecond
|
|
||||||
| Unit::TerabitsPerSecond
|
| Unit::TerabitsPerSecond
|
||||||
| Unit::GigabitsPerSecond
|
| Unit::GigabitsPerSecond
|
||||||
| Unit::MegabitsPerSecond
|
| Unit::MegabitsPerSecond
|
||||||
|
@ -224,13 +180,8 @@ impl Unit {
|
||||||
/// Whether or not this unit relates to the measurement of data rates.
|
/// Whether or not this unit relates to the measurement of data rates.
|
||||||
pub fn is_data_rate_based(&self) -> bool {
|
pub fn is_data_rate_based(&self) -> bool {
|
||||||
match self {
|
match self {
|
||||||
Unit::TerabytesPerSecond
|
Unit::TerabitsPerSecond
|
||||||
| Unit::GigabytesPerSecond
|
| Unit::GigabitsPerSecond
|
||||||
| Unit::MegabytesPerSecond
|
|
||||||
| Unit::KilobytesPerSecond
|
|
||||||
| Unit::BytesPerSecond
|
|
||||||
| Unit::TerabitsPerSecond
|
|
||||||
| Unit::Gigabits
|
|
||||||
| Unit::MegabitsPerSecond
|
| Unit::MegabitsPerSecond
|
||||||
| Unit::KilobitsPerSecond
|
| Unit::KilobitsPerSecond
|
||||||
| Unit::BitsPerSecond => true,
|
| Unit::BitsPerSecond => true,
|
||||||
|
@ -265,3 +216,37 @@ impl IntoU64 for core::time::Duration {
|
||||||
pub fn __into_u64<V: IntoU64>(value: V) -> u64 {
|
pub fn __into_u64<V: IntoU64>(value: V) -> u64 {
|
||||||
value.into_u64()
|
value.into_u64()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::Unit;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_unit_conversions() {
|
||||||
|
let all_variants = vec![
|
||||||
|
Unit::Count,
|
||||||
|
Unit::Percent,
|
||||||
|
Unit::Seconds,
|
||||||
|
Unit::Milliseconds,
|
||||||
|
Unit::Microseconds,
|
||||||
|
Unit::Nanoseconds,
|
||||||
|
Unit::Tebibytes,
|
||||||
|
Unit::Gigibytes,
|
||||||
|
Unit::Mebibytes,
|
||||||
|
Unit::Kibibytes,
|
||||||
|
Unit::Bytes,
|
||||||
|
Unit::TerabitsPerSecond,
|
||||||
|
Unit::GigabitsPerSecond,
|
||||||
|
Unit::MegabitsPerSecond,
|
||||||
|
Unit::KilobitsPerSecond,
|
||||||
|
Unit::BitsPerSecond,
|
||||||
|
Unit::CountPerSecond,
|
||||||
|
];
|
||||||
|
|
||||||
|
for variant in all_variants {
|
||||||
|
let s = variant.as_str();
|
||||||
|
let parsed = Unit::from_str(s);
|
||||||
|
assert_eq!(Some(variant), parsed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue