11use std:: fmt;
22
3- use clap:: ValueEnum ;
4- use strum:: EnumIter ;
3+ use derivative:: Derivative ;
4+
5+ use crate :: cli:: UnitFamily ;
56
67#[ derive( Copy , Clone , Debug ) ]
78pub struct DisplayBandwidth {
@@ -16,17 +17,14 @@ impl fmt::Display for DisplayBandwidth {
1617 }
1718}
1819
19- #[ derive( Copy , Clone , Debug , Default , Eq , PartialEq , ValueEnum , EnumIter ) ]
20- pub enum BandwidthUnitFamily {
21- #[ default]
22- /// bytes, in powers of 2^10
23- BinBytes ,
24- /// bits, in powers of 2^10
25- BinBits ,
26- /// bytes, in powers of 10^3
27- SiBytes ,
28- /// bits, in powers of 10^3
29- SiBits ,
20+ /// Type wrapper around [`UnitFamily`] to provide extra functionality.
21+ #[ derive( Copy , Clone , Derivative , Default , Eq , PartialEq ) ]
22+ #[ derivative( Debug = "transparent" ) ]
23+ pub struct BandwidthUnitFamily ( UnitFamily ) ;
24+ impl From < UnitFamily > for BandwidthUnitFamily {
25+ fn from ( value : UnitFamily ) -> Self {
26+ Self ( value)
27+ }
3028}
3129impl BandwidthUnitFamily {
3230 #[ inline]
@@ -39,9 +37,9 @@ impl BandwidthUnitFamily {
3937 /// Binary base: 2^10.
4038 const BB : f64 = 1024.0 ;
4139
42- use BandwidthUnitFamily as F ;
40+ use UnitFamily as F ;
4341 // probably could macro this stuff, but I'm too lazy
44- match self {
42+ match self . 0 {
4543 F :: BinBytes => [
4644 ( 1.0 , BB * STEP_UP_FRAC , "B" ) ,
4745 ( BB , BB . powi ( 2 ) * STEP_UP_FRAC , "KiB" ) ,
@@ -99,11 +97,12 @@ mod tests {
9997 use itertools:: Itertools ;
10098 use strum:: IntoEnumIterator ;
10199
102- use crate :: display :: { BandwidthUnitFamily , DisplayBandwidth } ;
100+ use crate :: { cli :: UnitFamily , display :: DisplayBandwidth } ;
103101
104102 #[ test]
105103 fn bandwidth_formatting ( ) {
106- let test_bandwidths_formatted = BandwidthUnitFamily :: iter ( )
104+ let test_bandwidths_formatted = UnitFamily :: iter ( )
105+ . map_into ( )
107106 . cartesian_product (
108107 // I feel like this is a decent selection of values
109108 ( -6 ..60 )
0 commit comments