pub struct Byte(/* private fields */);
byte
and u128
only.Expand description
Representing the size in bytes.
Implementations§
source§impl Byte
impl Byte
Associated functions for generating AdjustedByte
.
sourcepub fn get_adjusted_unit(self, unit: Unit) -> AdjustedByte
pub fn get_adjusted_unit(self, unit: Unit) -> AdjustedByte
Adjust the unit and value for this Byte
instance.
Examples
use byte_unit::{AdjustedByte, Byte, Unit};
let byte = Byte::parse_str("123KiB", true).unwrap();
let adjusted_byte = byte.get_adjusted_unit(Unit::KB);
assert_eq!("125.952 KB", adjusted_byte.to_string());
use byte_unit::{AdjustedByte, Byte, Unit};
let byte = Byte::parse_str("50.84 MB", true).unwrap();
let adjusted_byte = byte.get_adjusted_unit(Unit::MiB);
assert_eq!("48.48480224609375 MiB", adjusted_byte.to_string());
sourcepub fn get_appropriate_unit(&self, unit_type: UnitType) -> AdjustedByte
pub fn get_appropriate_unit(&self, unit_type: UnitType) -> AdjustedByte
Find the appropriate unit and value for this Byte
instance.
Examples
use byte_unit::{Byte, UnitType};
let byte = Byte::parse_str("123KiB", true).unwrap();
let adjusted_byte = byte.get_appropriate_unit(UnitType::Decimal);
assert_eq!("125.952 KB", adjusted_byte.to_string());
use byte_unit::{Byte, UnitType};
let byte = Byte::parse_str("50.84 MB", true).unwrap();
let adjusted_byte = byte.get_appropriate_unit(UnitType::Binary);
assert_eq!("48.48480224609375 MiB", adjusted_byte.to_string());
source§impl Byte
impl Byte
Associated functions for building Byte
instances using Decimal
.
sourcepub fn from_decimal(size: Decimal) -> Option<Self>
pub fn from_decimal(size: Decimal) -> Option<Self>
Create a new Byte
instance from a size in bytes.
Examples
use byte_unit::Byte;
use rust_decimal::Decimal;
let byte = Byte::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 Byte
impl Byte
Associated functions for building Byte
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 Byte
instance from a size of bytes with a unit.
Examples
use byte_unit::{Byte, Unit};
use rust_decimal::Decimal;
let byte = Byte::from_decimal_with_unit(Decimal::from(15u64), Unit::MB).unwrap(); // 15 MB
Points to Note
- If the calculated byte is too large or not greater than or equal to 0, this function will return
None
. - The calculated byte will be rounded up.
source§impl Byte
impl Byte
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 Byte
precisely.
Examples
use byte_unit::{Byte, Unit};
let byte = Byte::from_u64(3670016);
assert_eq!(
(3.5f64.try_into().unwrap(), Unit::MiB),
byte.get_recoverable_unit(false, 3)
);
use byte_unit::{Byte, Unit};
let byte = Byte::from_u64(437500);
assert_eq!(
(3.5f64.try_into().unwrap(), Unit::Mbit),
byte.get_recoverable_unit(true, 3)
);
use byte_unit::{Byte, Unit};
let byte = Byte::from_u64(437500);
assert_eq!(
(437.5f64.try_into().unwrap(), Unit::KB),
byte.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 Byte
impl Byte
Associated functions for parsing strings.
sourcepub fn parse_str<S: AsRef<str>>(
s: S,
ignore_case: bool
) -> Result<Self, ParseError>
pub fn parse_str<S: AsRef<str>>( s: S, ignore_case: bool ) -> Result<Self, ParseError>
Create a new Byte
instance from a string.
The string may be "10"
, "10B"
, "10M"
, "10MB"
, "10MiB"
, "80b"
, "80Mb"
, "80Mbit"
.
You can ignore the case of “B” (byte), which means b will still be treated as bytes instead of bits.
Examples
let byte = Byte::parse_str("123Kib", true).unwrap(); // 123 * 1024 bytes
let byte = Byte::parse_str("123Kib", false).unwrap(); // 123 * 1024 bits = 123 * 1024 / 8 bytes
source§impl Byte
impl Byte
Associated functions for building Byte
instances.
sourcepub const fn from_u128(size: u128) -> Option<Self>
pub const fn from_u128(size: u128) -> Option<Self>
Create a new Byte
instance from a size in bytes.
Examples
let byte = Byte::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 const fn from_u64(size: u64) -> Self
pub const fn from_u64(size: u64) -> Self
Create a new Byte
instance from a size in bytes.
Examples
let byte = Byte::from_u64(15000000); // 15 MB
sourcepub fn from_f64(size: f64) -> Option<Self>
pub fn from_f64(size: f64) -> Option<Self>
Create a new Byte
instance from a size im bytes.
Examples
let byte = Byte::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 Byte
instance from a size in bytes.
Examples
let byte = Byte::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 Byte
instance from a size in bytes.
Examples
let byte = Byte::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 Byte
impl Byte
Associated functions for building Byte
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 Byte
instance from a size of bytes with a unit.
Examples
use byte_unit::{Byte, Unit};
let byte = Byte::from_u128_with_unit(15, Unit::MB).unwrap(); // 15 MB
Points to Note
- If the calculated byte is too large, this function will return
None
. - If the input unit is
Bit
, the calculated byte will be rounded up.
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 Byte
instance from a size of bytes with a unit.
Examples
use byte_unit::{Byte, Unit};
let byte = Byte::from_u64_with_unit(15, Unit::MB).unwrap(); // 15 MB
Points to Note
- If the calculated byte is too large, this function will return
None
. - If the input unit is
Bit
, the calculated byte 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 Byte
instance from a size of bytes with a unit.
Examples
use byte_unit::{Byte, Unit};
let byte = Byte::from_f64_with_unit(15.0, Unit::MB).unwrap(); // 15 MB
Points to Note
- If the calculated byte is too large or not greater than or equal to 0, this function will return
None
. - The calculated byte 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 Byte
instance from a size of bytes with a unit.
Examples
use byte_unit::{Byte, Unit};
let byte = Byte::from_f32_with_unit(15.0, Unit::MB).unwrap(); // 15 MB
Points to Note
- If the calculated byte is too large or not greater than or equal to 0, this function will return
None
. - The calculated byte 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 Byte
instance from a size of bytes with a unit.
Examples
use byte_unit::{Byte, Unit};
let byte = Byte::from_i128_with_unit(15, Unit::MB).unwrap(); // 15 MB
Points to Note
- If the calculated byte is too large or negative, this function will return
None
. - The calculated byte will be rounded up.
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 Byte
instance from a size of bytes with a unit.
Examples
use byte_unit::{Byte, Unit};
let byte = Byte::from_i64_with_unit(15, Unit::MB).unwrap(); // 15 MB
Points to Note
- If the calculated byte is too large or negative, this function will return
None
. - The calculated byte will be rounded up.
source§impl Byte
impl Byte
Methods for converting a Byte
instance into a primitive integer.
sourcepub const fn as_u128(self) -> u128
pub const fn as_u128(self) -> u128
Retrieve the byte represented by this Byte
instance.
Examples
use byte_unit::Byte;
let byte = Byte::parse_str("123Kib", true).unwrap();
let result = byte.as_u128();
assert_eq!(125952, result);
use byte_unit::Byte;
let byte = Byte::parse_str("123Kib", false).unwrap();
let result = byte.as_u128();
assert_eq!(15744, result);
sourcepub const fn as_u64(self) -> u64
pub const fn as_u64(self) -> u64
Retrieve the byte represented by this Byte
instance. When the u128
feature is enabled, if the byte is actually greater than 264 - 1, it will return 264 - 1.
Examples
use byte_unit::Byte;
let byte = Byte::parse_str("1kb", true).unwrap();
let result = byte.as_u64();
assert_eq!(1000, result);
use byte_unit::Byte;
let byte = Byte::parse_str("1zb", true).unwrap();
let result = byte.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 byte represented by this Byte
instance.
Examples
use byte_unit::Byte;
let byte = Byte::parse_str("1kb", true).unwrap();
let result = byte.as_u64_checked();
assert_eq!(Some(1000), result);
use byte_unit::Byte;
let byte = Byte::parse_str("1zb", true).unwrap();
let result = byte.as_u64_checked();
assert_eq!(None, result);
source§impl Byte
impl Byte
Methods for calculation.
sourcepub const fn add(self, rhs: Byte) -> Option<Byte>
pub const fn add(self, rhs: Byte) -> Option<Byte>
Add another Byte
instance.
Examples
use byte_unit::Byte;
let byte_1 = Byte::from_u64(1024);
let byte_2 = Byte::from_u64(512);
let byte = byte_1.add(byte_2).unwrap();
assert_eq!(1536, byte.as_u64());
Points to Note
- If the calculated byte is too large, this function will return
None
.
sourcepub const fn subtract(self, rhs: Byte) -> Option<Byte>
pub const fn subtract(self, rhs: Byte) -> Option<Byte>
Subtract another Byte
instance.
Examples
use byte_unit::Byte;
let byte_1 = Byte::from_u64(1024);
let byte_2 = Byte::from_u64(512);
let byte = byte_1.subtract(byte_2).unwrap();
assert_eq!(512, byte.as_u64());
Points to Note
- If the right-hand side is bigger then this
Byte
instance, this function will returnNone
.
sourcepub const fn multiply(self, rhs: usize) -> Option<Byte>
pub const fn multiply(self, rhs: usize) -> Option<Byte>
Multiplied by an unsigned integer.
Examples
use byte_unit::Byte;
let count = 100;
let byte = Byte::from_u64(1024);
let total_byte = byte.multiply(100).unwrap();
assert_eq!(102400, total_byte.as_u64());
Points to Note
- If the calculated byte is too large, this function will return
None
.
sourcepub const fn divide(self, rhs: usize) -> Option<Byte>
pub const fn divide(self, rhs: usize) -> Option<Byte>
Divided by an unsigned integer.
Examples
use byte_unit::Byte;
let count = 100;
let byte = Byte::from_u64(1024);
let total_byte = byte.divide(100).unwrap();
assert_eq!(10, total_byte.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 Byte
impl Byte
Methods for finding an unit.
sourcepub const fn get_exact_unit(self, allow_in_bits: bool) -> (u128, Unit)
pub const fn get_exact_unit(self, allow_in_bits: bool) -> (u128, Unit)
Obtain the largest unit which is the greatest factor of this Byte
instance.
Examples
use byte_unit::{Byte, Unit};
let byte = Byte::from_u64(3145728);
let (n, unit) = byte.get_exact_unit(true);
assert_eq!(3, n);
assert_eq!(Unit::MiB, unit);
use byte_unit::{Byte, Unit};
let byte = Byte::from_u64(375000);
let (n, unit) = byte.get_exact_unit(true);
assert_eq!(3, n);
assert_eq!(Unit::Mbit, unit);
use byte_unit::{Byte, Unit};
let byte = Byte::from_u64(375000);
let (n, unit) = byte.get_exact_unit(false);
assert_eq!(375, n);
assert_eq!(Unit::KB, unit);
Trait Implementations§
source§impl<'de> Deserialize<'de> for Byte
Available on crate feature serde
only.
impl<'de> Deserialize<'de> for Byte
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 Byte
impl Display for Byte
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::{Byte, Unit};
let byte = Byte::from_u64_with_unit(1555, Unit::KB).unwrap();
assert_eq!("1555000", byte.to_string());
use byte_unit::{Byte, UnitType};
let byte_based_2 = Byte::from_u64(10240);
let byte_based_10 = Byte::from_u64(10000);
assert_eq!("10240", format!("{byte_based_2}"));
assert_eq!("10000", format!("{byte_based_10}"));
// with an exact unit
assert_eq!("10 KiB", format!("{byte_based_2:#}"));
assert_eq!("10 KB", format!("{byte_based_10:#}"));
// with an exact unit, no spaces between the value and the unit
assert_eq!("10KiB", format!("{byte_based_2:-#}"));
assert_eq!("10KB", format!("{byte_based_10:-#}"));
// with a width, left alignment
assert_eq!("10 KiB", format!("{byte_based_2:#10}"));
assert_eq!("10 KB", format!("{byte_based_10:#10}"));
// with a width, right alignment
assert_eq!(" 10 KiB", format!("{byte_based_2:>#10}"));
assert_eq!(" 10 KB", format!("{byte_based_10:>#10}"));
// with a width, right alignment, more spaces between the value and the unit
assert_eq!(" 10 KiB", format!("{byte_based_2:>+#10}"));
assert_eq!(" 10 KB", format!("{byte_based_10:>+#10}"));
use byte_unit::{Byte, UnitType};
let byte = Byte::from_u64(3211776);
assert_eq!("3211776", format!("{byte}"));
// with a unit, still precisely
assert_eq!("3136.5 KiB", format!("{byte:#}"));
// with a unit and a larger precision (default is 3), still precisely
assert_eq!("3.211776 MB", format!("{byte:#.6}"));
// with a unit and a smaller precision (default is 3), still precisely
assert_eq!("3211776 B", format!("{byte:#.0}"));
source§impl From<AdjustedByte> for Byte
impl From<AdjustedByte> for Byte
source§fn from(value: AdjustedByte) -> Self
fn from(value: AdjustedByte) -> Self
source§impl From<Byte> for AdjustedByte
impl From<Byte> for AdjustedByte
source§fn from(value: Byte) -> Self
fn from(value: Byte) -> Self
unit_type
is set to UnitType::Both
. See Byte::get_appropriate_unit
.
source§impl FromStr for Byte
impl FromStr for Byte
source§fn from_str(s: &str) -> Result<Self, Self::Err>
fn from_str(s: &str) -> Result<Self, Self::Err>
ignore_case
is set to false
. See Byte::parse_str
.
§type Err = ParseError
type Err = ParseError
source§impl Ord for Byte
impl Ord for Byte
source§impl PartialEq for Byte
impl PartialEq for Byte
source§impl PartialOrd for Byte
impl PartialOrd for Byte
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