pub struct Bit(/* private fields */);
bit
and u128
only.Expand description
Representing the size in bits.
Implementations§
source§impl Bit
impl Bit
Associated functions for generating AdjustedBit
.
sourcepub fn get_adjusted_unit(self, unit: Unit) -> AdjustedBit
pub fn get_adjusted_unit(self, unit: Unit) -> AdjustedBit
Adjust the unit and value for this Bit
instance.
Examples
use byte_unit::{AdjustedBit, Bit, Unit};
let bit = Bit::parse_str("123Kib").unwrap();
let adjusted_bit = bit.get_adjusted_unit(Unit::Kbit);
assert_eq!("125.952 Kb", adjusted_bit.to_string());
use byte_unit::{AdjustedBit, Bit, Unit};
let bit = Bit::parse_str("50.84 Mb").unwrap();
let adjusted_bit = bit.get_adjusted_unit(Unit::Mibit);
assert_eq!("48.48480224609375 Mib", adjusted_bit.to_string());
sourcepub fn get_appropriate_unit(&self, unit_type: UnitType) -> AdjustedBit
pub fn get_appropriate_unit(&self, unit_type: UnitType) -> AdjustedBit
Find the appropriate unit and value for this Bit
instance.
Examples
use byte_unit::{Bit, UnitType};
let bit = Bit::parse_str("123Kib").unwrap();
let adjusted_bit = bit.get_appropriate_unit(UnitType::Decimal);
assert_eq!("125.952 Kb", adjusted_bit.to_string());
use byte_unit::{Bit, UnitType};
let bit = Bit::parse_str("50.84 Mb").unwrap();
let adjusted_bit = bit.get_appropriate_unit(UnitType::Binary);
assert_eq!("48.48480224609375 Mib", adjusted_bit.to_string());
source§impl Bit
impl Bit
Associated functions for building Bit
instances using Decimal
.
sourcepub fn from_decimal(size: Decimal) -> Option<Self>
pub fn from_decimal(size: Decimal) -> Option<Self>
Create a new Bit
instance from a size in bits.
Examples
use byte_unit::Bit;
use rust_decimal::Decimal;
let bit = Bit::from_decimal(Decimal::from(15000000u64)).unwrap(); // 15 Mb
Points to Note
- If the input size is too large (the maximum is 1027 - 1 if the
u128
feature is enabled, or 264 - 1 otherwise) or not greater than or equal to 0, this function will returnNone
. - The fractional part will be rounded up.
source§impl Bit
impl Bit
Associated functions for building Bit
instances using Decimal
(with Unit
).
sourcepub fn from_decimal_with_unit(size: Decimal, unit: Unit) -> Option<Self>
pub fn from_decimal_with_unit(size: Decimal, unit: Unit) -> Option<Self>
Create a new Bit
instance from a size of bits with a unit.
Examples
use byte_unit::{Bit, Unit};
use rust_decimal::Decimal;
let bit = Bit::from_decimal_with_unit(Decimal::from(15u64), Unit::Mbit).unwrap(); // 15 Mb
Points to Note
- If the calculated bit is too large or not greater than or equal to 0, this function will return
None
. - The calculated bit will be rounded up.
source§impl Bit
impl Bit
Methods for finding an unit using Decimal
.
sourcepub fn get_recoverable_unit(
self,
allow_in_bits: bool,
precision: usize
) -> (Decimal, Unit)
pub fn get_recoverable_unit( self, allow_in_bits: bool, precision: usize ) -> (Decimal, Unit)
Find the appropriate unit and value that can be used to recover back to this Bit
precisely.
Examples
use byte_unit::{Bit, Unit};
let bit = Bit::from_u64(3670016);
assert_eq!(
(3.5f64.try_into().unwrap(), Unit::Mibit),
bit.get_recoverable_unit(false, 3)
);
use byte_unit::{Bit, Unit};
let bit = Bit::from_u64(28000000);
assert_eq!(
(3.5f64.try_into().unwrap(), Unit::MB),
bit.get_recoverable_unit(true, 3)
);
use byte_unit::{Bit, Unit};
let bit = Bit::from_u64(437500);
assert_eq!(
(437.5f64.try_into().unwrap(), Unit::Kbit),
bit.get_recoverable_unit(false, 3)
);
Points to Note
precision
should be smaller or equal to26
if theu128
feature is enabled, otherwise19
. The typicalprecision
is3
.
source§impl Bit
impl Bit
Associated functions for parsing strings.
sourcepub fn parse_str<S: AsRef<str>>(s: S) -> Result<Self, ParseError>
pub fn parse_str<S: AsRef<str>>(s: S) -> Result<Self, ParseError>
Create a new Bit
instance from a string.
The string may be "10"
, "10B"
, "10M"
, "10MB"
, "10MiB"
, "80b"
, "80Mb"
, "80Mbit"
.
You can ignore the case of “B” (bit), which means b will still be treated as bits instead of bits.
Examples
let bit = Bit::parse_str("123Kib").unwrap(); // 123 * 1024 bits
source§impl Bit
impl Bit
Associated functions for building Bit
instances.
sourcepub const fn from_u128(size: u128) -> Option<Self>
pub const fn from_u128(size: u128) -> Option<Self>
Create a new Bit
instance from a size in bits.
Examples
let bit = Bit::from_u128(15000000).unwrap(); // 15 Mb
Points to Note
- If the input size is too large (the maximum is 1027 - 1 if the
u128
feature is enabled, or 264 - 1 otherwise), this function will returnNone
.
sourcepub const unsafe fn from_u128_unsafe(size: u128) -> Self
pub const unsafe fn from_u128_unsafe(size: u128) -> Self
sourcepub fn from_f64(size: f64) -> Option<Self>
pub fn from_f64(size: f64) -> Option<Self>
Create a new Bit
instance from a size im bits.
Examples
let bit = Bit::from_f64(15000000.0).unwrap(); // 15 Mb
Points to Note
- If the input size is too large (the maximum is 1027 - 1 if the
u128
feature is enabled, or 264 - 1 otherwise) or not greater than or equal to 0, this function will returnNone
. - The fractional part will be rounded up.
sourcepub fn from_f32(size: f32) -> Option<Self>
pub fn from_f32(size: f32) -> Option<Self>
Create a new Bit
instance from a size in bits.
Examples
let bit = Bit::from_f32(15000000.0).unwrap(); // 15 Mb
Points to Note
- If the input size is too large (the maximum is 1027 - 1 if the
u128
feature is enabled, or 264 - 1 otherwise) or not greater than or equal to 0, this function will returnNone
. - The fractional part will be rounded up.
sourcepub const fn from_i128(size: i128) -> Option<Self>
pub const fn from_i128(size: i128) -> Option<Self>
Create a new Bit
instance from a size in bits.
Examples
let bit = Bit::from_i128(15000000).unwrap(); // 15 Mb
Points to Note
- If the input size is too large (the maximum is 1027 - 1 if the
u128
feature is enabled, or 264 - 1 otherwise) or negative, this function will returnNone
.
source§impl Bit
impl Bit
Associated functions for building Bit
instances (with Unit
).
sourcepub const fn from_u128_with_unit(size: u128, unit: Unit) -> Option<Self>
pub const fn from_u128_with_unit(size: u128, unit: Unit) -> Option<Self>
Create a new Bit
instance from a size of bits with a unit.
Examples
use byte_unit::{Bit, Unit};
let bit = Bit::from_u128_with_unit(15, Unit::Mbit).unwrap(); // 15 Mb
Points to Note
- If the calculated bit is too large, this function will return
None
.
sourcepub const fn from_u64_with_unit(size: u64, unit: Unit) -> Option<Self>
pub const fn from_u64_with_unit(size: u64, unit: Unit) -> Option<Self>
Create a new Bit
instance from a size of bits with a unit.
Examples
use byte_unit::{Bit, Unit};
let bit = Bit::from_u64_with_unit(15, Unit::Mbit).unwrap(); // 15 Mb
Points to Note
- If the calculated bit is too large, this function will return
None
. - If the input unit is
Bit
, the calculated bit will be rounded up.
sourcepub fn from_f64_with_unit(size: f64, unit: Unit) -> Option<Self>
pub fn from_f64_with_unit(size: f64, unit: Unit) -> Option<Self>
Create a new Bit
instance from a size of bits with a unit.
Examples
use byte_unit::{Bit, Unit};
let bit = Bit::from_f64_with_unit(15.0, Unit::Mbit).unwrap(); // 15 Mb
Points to Note
- If the calculated bit is too large or not greater than or equal to 0, this function will return
None
. - The calculated bit will be rounded up.
sourcepub fn from_f32_with_unit(size: f32, unit: Unit) -> Option<Self>
pub fn from_f32_with_unit(size: f32, unit: Unit) -> Option<Self>
Create a new Bit
instance from a size of bits with a unit.
Examples
use byte_unit::{Bit, Unit};
let bit = Bit::from_f32_with_unit(15.0, Unit::Mbit).unwrap(); // 15 Mb
Points to Note
- If the calculated bit is too large or not greater than or equal to 0, this function will return
None
. - The calculated bit will be rounded up.
sourcepub const fn from_i128_with_unit(size: i128, unit: Unit) -> Option<Self>
pub const fn from_i128_with_unit(size: i128, unit: Unit) -> Option<Self>
Create a new Bit
instance from a size of bits with a unit.
Examples
use byte_unit::{Bit, Unit};
let bit = Bit::from_i128_with_unit(15, Unit::Mibit).unwrap(); // 15 Mb
Points to Note
- If the calculated bit is too large or negative, this function will return
None
.
sourcepub const fn from_i64_with_unit(size: i64, unit: Unit) -> Option<Self>
pub const fn from_i64_with_unit(size: i64, unit: Unit) -> Option<Self>
Create a new Bit
instance from a size of bits with a unit.
Examples
use byte_unit::{Bit, Unit};
let bit = Bit::from_i64_with_unit(15, Unit::Mbit).unwrap(); // 15 Mb
Points to Note
- If the calculated bit is too large or negative, this function will return
None
.
source§impl Bit
impl Bit
Methods for converting a Bit
instance into a primitive integer.
sourcepub const fn as_u128(self) -> u128
pub const fn as_u128(self) -> u128
Retrieve the bit represented by this Bit
instance.
Examples
use byte_unit::Bit;
let bit = Bit::parse_str("123KiB").unwrap();
let result = bit.as_u128();
assert_eq!(1007616, result);
use byte_unit::Bit;
let bit = Bit::parse_str("123Kib").unwrap();
let result = bit.as_u128();
assert_eq!(125952, result);
sourcepub const fn as_u64(self) -> u64
pub const fn as_u64(self) -> u64
Retrieve the bit represented by this Bit
instance. When the u128
feature is enabled, if the bit is actually greater than 264 - 1, it will return 264 - 1.
Examples
use byte_unit::Bit;
let bit = Bit::parse_str("1kb").unwrap();
let result = bit.as_u64();
assert_eq!(1000, result);
use byte_unit::Bit;
let bit = Bit::parse_str("1zb").unwrap();
let result = bit.as_u64();
assert_eq!(u64::MAX, result);
sourcepub const fn as_u64_checked(self) -> Option<u64>
pub const fn as_u64_checked(self) -> Option<u64>
Retrieve the bit represented by this Bit
instance.
Examples
use byte_unit::Bit;
let bit = Bit::parse_str("1k").unwrap();
let result = bit.as_u64_checked();
assert_eq!(Some(1000), result);
use byte_unit::Bit;
let bit = Bit::parse_str("1zb").unwrap();
let result = bit.as_u64_checked();
assert_eq!(None, result);
source§impl Bit
impl Bit
Methods for calculation.
sourcepub const fn add(self, rhs: Bit) -> Option<Bit>
pub const fn add(self, rhs: Bit) -> Option<Bit>
Add another Bit
instance.
Examples
use byte_unit::Bit;
let bit_1 = Bit::from_u64(1024);
let bit_2 = Bit::from_u64(512);
let bit = bit_1.add(bit_2).unwrap();
assert_eq!(1536, bit.as_u64());
Points to Note
- If the calculated bit is too large, this function will return
None
.
sourcepub const fn subtract(self, rhs: Bit) -> Option<Bit>
pub const fn subtract(self, rhs: Bit) -> Option<Bit>
Subtract another Bit
instance.
Examples
use byte_unit::Bit;
let bit_1 = Bit::from_u64(1024);
let bit_2 = Bit::from_u64(512);
let bit = bit_1.subtract(bit_2).unwrap();
assert_eq!(512, bit.as_u64());
Points to Note
- If the right-hand side is bigger then this
Bit
instance, this function will returnNone
.
sourcepub const fn multiply(self, rhs: usize) -> Option<Bit>
pub const fn multiply(self, rhs: usize) -> Option<Bit>
Multiplied by an unsigned integer.
Examples
use byte_unit::Bit;
let count = 100;
let bit = Bit::from_u64(1024);
let total_bit = bit.multiply(100).unwrap();
assert_eq!(102400, total_bit.as_u64());
Points to Note
- If the calculated bit is too large, this function will return
None
.
sourcepub const fn divide(self, rhs: usize) -> Option<Bit>
pub const fn divide(self, rhs: usize) -> Option<Bit>
Divided by an unsigned integer.
Examples
use byte_unit::Bit;
let count = 100;
let bit = Bit::from_u64(1024);
let total_bit = bit.divide(100).unwrap();
assert_eq!(10, total_bit.as_u64());
Points to Note
- If the input right-hand side is zero, this function will return
None
. - The result will be rounded down.
source§impl Bit
impl Bit
Methods for finding an unit.
sourcepub const fn get_exact_unit(self, allow_in_bytes: bool) -> (u128, Unit)
pub const fn get_exact_unit(self, allow_in_bytes: bool) -> (u128, Unit)
Obtain the largest unit which is the greatest factor of this Bit
instance.
Examples
use byte_unit::{Bit, Unit};
let bit = Bit::from_u64(3145728);
let (n, unit) = bit.get_exact_unit(true);
assert_eq!(3, n);
assert_eq!(Unit::Mibit, unit);
use byte_unit::{Bit, Unit};
let bit = Bit::from_u64(24000000);
let (n, unit) = bit.get_exact_unit(true);
assert_eq!(3, n);
assert_eq!(Unit::MB, unit);
use byte_unit::{Bit, Unit};
let bit = Bit::from_u64(24000000);
let (n, unit) = bit.get_exact_unit(false);
assert_eq!(24, n);
assert_eq!(Unit::Mbit, unit);
Trait Implementations§
source§impl<'de> Deserialize<'de> for Bit
Available on crate feature serde
only.
impl<'de> Deserialize<'de> for Bit
serde
only.source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
source§impl Display for Bit
impl Display for Bit
source§fn fmt(&self, f: &mut Formatter<'_>) -> Result
fn fmt(&self, f: &mut Formatter<'_>) -> Result
Formats the value using the given formatter.
Examples
use byte_unit::{Bit, Unit};
let bit = Bit::from_u64_with_unit(1555, Unit::Kbit).unwrap();
assert_eq!("1555000", bit.to_string());
use byte_unit::{Bit, UnitType};
let bit_based_2 = Bit::from_u64(10240);
let bit_based_10 = Bit::from_u64(10000);
assert_eq!("10240", format!("{bit_based_2}"));
assert_eq!("10000", format!("{bit_based_10}"));
// with an exact unit
assert_eq!("10 Kib", format!("{bit_based_2:#}"));
assert_eq!("10 Kb", format!("{bit_based_10:#}"));
// with an exact unit, no spaces between the value and the unit
assert_eq!("10Kib", format!("{bit_based_2:-#}"));
assert_eq!("10Kb", format!("{bit_based_10:-#}"));
// with a width, left alignment
assert_eq!("10 Kib", format!("{bit_based_2:#10}"));
assert_eq!("10 Kb", format!("{bit_based_10:#10}"));
// with a width, right alignment
assert_eq!(" 10 Kib", format!("{bit_based_2:>#10}"));
assert_eq!(" 10 Kb", format!("{bit_based_10:>#10}"));
// with a width, right alignment, more spaces between the value and the unit
assert_eq!(" 10 Kib", format!("{bit_based_2:>+#10}"));
assert_eq!(" 10 Kb", format!("{bit_based_10:>+#10}"));
use byte_unit::{Bit, UnitType};
let bit = Bit::from_u64(3211776);
assert_eq!("3211776", format!("{bit}"));
// with a unit, still precisely
assert_eq!("3136.5 Kib", format!("{bit:#}"));
// with a unit and a larger precision (default is 3), still precisely
assert_eq!("3.211776 Mb", format!("{bit:#.6}"));
// with a unit and a smaller precision (default is 3), still precisely
assert_eq!("3211776 b", format!("{bit:#.0}"));
source§impl From<AdjustedBit> for Bit
impl From<AdjustedBit> for Bit
source§fn from(value: AdjustedBit) -> Self
fn from(value: AdjustedBit) -> Self
source§impl From<Bit> for AdjustedBit
impl From<Bit> for AdjustedBit
source§fn from(value: Bit) -> Self
fn from(value: Bit) -> Self
unit_type
is set to UnitType::Both
. See Bit::get_appropriate_unit
.
source§impl Ord for Bit
impl Ord for Bit
source§impl PartialOrd for Bit
impl PartialOrd for Bit
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more