mirror of
https://github.com/sharkdp/hyperfine.git
synced 2026-10-28 08:08:58 +00:00
Add unit information
This commit is contained in:
1 parent
d813652178
commit
a119cbaf2d
1 file changed
+42
-2
@@ -3,7 +3,7 @@ use std::{
|
||||
ops::{Add, Div, Sub},
|
||||
};
|
||||
|
||||
use serde::Serialize;
|
||||
use serde::{ser::SerializeStruct, Serialize, Serializer};
|
||||
|
||||
pub trait IsQuantity {
|
||||
type Value;
|
||||
@@ -16,7 +16,7 @@ pub trait IsQuantity {
|
||||
fn unsafe_from(value: Self::Value) -> Self;
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, Default, Serialize, PartialEq, Eq, PartialOrd)] // TODO: check partialord
|
||||
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, PartialOrd)] // TODO: check partialord
|
||||
pub struct Quantity<
|
||||
Value,
|
||||
const IS_TIME: bool,
|
||||
@@ -84,6 +84,26 @@ impl<
|
||||
|
||||
self.0
|
||||
}
|
||||
|
||||
const fn unit_name_long(&self) -> &'static str {
|
||||
match (IS_TIME, IS_INFORMATION) {
|
||||
(true, false) => match METRIC_PREFIX_TIME {
|
||||
-6 => "microsecond",
|
||||
-3 => "millisecond",
|
||||
0 => "second",
|
||||
_ => unreachable!(),
|
||||
},
|
||||
(false, true) => match BINARY_PREFIX_INFORMATION {
|
||||
0 => "byte",
|
||||
10 => "kibibyte",
|
||||
20 => "mebibyte",
|
||||
30 => "gibibyte",
|
||||
40 => "tebibyte",
|
||||
_ => unreachable!(),
|
||||
},
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<const METRIC_PREFIX_TIME: i32> Time<METRIC_PREFIX_TIME> {
|
||||
@@ -144,6 +164,26 @@ impl<const BINARY_PREFIX_INFORMATION: i32> Display for Information<BINARY_PREFIX
|
||||
}
|
||||
}
|
||||
|
||||
impl<
|
||||
Value: Copy + Default + Serialize,
|
||||
const IS_TIME: bool,
|
||||
const METRIC_PREFIX_TIME: i32,
|
||||
const IS_INFORMATION: bool,
|
||||
const BINARY_PREFIX_INFORMATION: i32,
|
||||
> Serialize
|
||||
for Quantity<Value, IS_TIME, METRIC_PREFIX_TIME, IS_INFORMATION, BINARY_PREFIX_INFORMATION>
|
||||
{
|
||||
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
let mut state = serializer.serialize_struct("Quantity", 2)?;
|
||||
state.serialize_field("value", &self.0)?;
|
||||
state.serialize_field("unit", self.unit_name_long())?;
|
||||
state.end()
|
||||
}
|
||||
}
|
||||
|
||||
macro_rules! quantity_fn {
|
||||
($name:ident, $unwrapped_values:ident, $body:expr) => {
|
||||
pub fn $name<
|
||||
|
||||
Reference in new issue
Block a user