Struct digit_sequence::DigitSequence
source · pub struct DigitSequence(/* private fields */);
Expand description
Immutable sequence of u8 digits.
§Creation
A digit sequence is usually created via conversions - which are not always infallible; a constructor is also provided to instantiate an empty sequence.
§Infallible conversions
-
from any unsigned number:
use digit_sequence::{CrateResult, DigitSequence}; let sequence: DigitSequence = 985u32.into(); assert_eq!(sequence, [9, 8, 5]);
§Fallible conversions
-
from any signed number - which fails if the number is negative:
use digit_sequence::{CrateResult, DigitSequence}; let sequence: DigitSequence = 3791i32.try_into()?; assert_eq!(sequence, [3, 7, 9, 1]);
-
from &str - which fails in case of non-digit (radix 10) characters:
use digit_sequence::{CrateResult, DigitSequence}; let sequence: DigitSequence = "09240".parse()?; assert_eq!(sequence, [0, 9, 2, 4, 0]);
-
from a &[u8] - which fails if the numbers are not 0-9 digits:
use digit_sequence::{CrateResult, DigitSequence}; let source = [0, 9, 2, 4, 0]; let sequence: DigitSequence = (&source).try_into()?; assert_eq!(sequence, source);
-
to any unsigned number - which can fail with CrateError::Overflow:
use digit_sequence::{CrateResult, CrateError, DigitSequence}; let in_range_sequence: DigitSequence = "90".parse()?; let number: u128 = in_range_sequence.try_into()?; assert_eq!(number, 90); let overflowing_sequence: DigitSequence = "1".repeat(100).parse()?; let result: CrateResult<u128> = overflowing_sequence.try_into(); assert_eq!(result, Err(CrateError::Overflow));
Conversion from &DigitSequence is also supported:
use digit_sequence::{CrateResult, CrateError, DigitSequence}; let sequence: DigitSequence = "90".parse()?; let reference = &sequence; let number: u128 = reference.try_into()?; assert_eq!(number, 90);
§Usage
This data structure implements IntoIterator and also provides the iter method - thus enabling standard iterations as well as the Iterator methods.
§for
-iterations
§read-only
use digit_sequence::DigitSequence;
let sequence: DigitSequence = 1234567890u128.into();
let mut even_vec = vec![];
for &digit in &sequence {
if digit % 2 == 0 {
even_vec.push(digit);
}
}
assert_eq!(even_vec, vec![2, 4, 6, 8, 0]);
§consuming
use digit_sequence::DigitSequence;
let sequence: DigitSequence = 1234567890u128.into();
let mut even_vec = vec![];
for digit in sequence {
if digit % 2 == 0 {
even_vec.push(digit);
}
}
assert_eq!(even_vec, vec![2, 4, 6, 8, 0]);
§Iterator methods
§read-only
use digit_sequence::DigitSequence;
let sequence: DigitSequence = 1234567890u128.into();
let even_vec: Vec<u8> = sequence.iter()
.filter(|&digit| digit % 2 == 0)
.map(|&digit|digit)
.collect();
assert_eq!(even_vec, vec![2, 4, 6, 8, 0]);
§consuming
use digit_sequence::DigitSequence;
let sequence: DigitSequence = 1234567890u128.into();
let even_vec: Vec<u8> = sequence.into_iter()
.filter(|digit| digit % 2 == 0)
.collect();
assert_eq!(even_vec, vec![2, 4, 6, 8, 0]);
§Conversion to String
-
the Debug trait is derived
-
for the Display trait, the sequence is formatted just by joining its digits
§Serialization
When the serde
feature is enabled for this crate, Self implements the serde::Serialize
and serde::Deserialize
traits.
Implementations§
source§impl DigitSequence
impl DigitSequence
Trait Implementations§
source§impl Clone for DigitSequence
impl Clone for DigitSequence
source§fn clone(&self) -> DigitSequence
fn clone(&self) -> DigitSequence
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for DigitSequence
impl Debug for DigitSequence
source§impl Default for DigitSequence
impl Default for DigitSequence
source§fn default() -> DigitSequence
fn default() -> DigitSequence
source§impl Display for DigitSequence
impl Display for DigitSequence
source§impl From<u128> for DigitSequence
impl From<u128> for DigitSequence
source§fn from(value: u128) -> DigitSequence
fn from(value: u128) -> DigitSequence
source§impl From<u16> for DigitSequence
impl From<u16> for DigitSequence
source§fn from(value: u16) -> DigitSequence
fn from(value: u16) -> DigitSequence
source§impl From<u32> for DigitSequence
impl From<u32> for DigitSequence
source§fn from(value: u32) -> DigitSequence
fn from(value: u32) -> DigitSequence
source§impl From<u64> for DigitSequence
impl From<u64> for DigitSequence
source§fn from(value: u64) -> DigitSequence
fn from(value: u64) -> DigitSequence
source§impl From<u8> for DigitSequence
impl From<u8> for DigitSequence
source§fn from(value: u8) -> DigitSequence
fn from(value: u8) -> DigitSequence
source§impl From<usize> for DigitSequence
impl From<usize> for DigitSequence
source§fn from(value: usize) -> DigitSequence
fn from(value: usize) -> DigitSequence
source§impl FromStr for DigitSequence
impl FromStr for DigitSequence
§type Err = CrateError
type Err = CrateError
source§impl Hash for DigitSequence
impl Hash for DigitSequence
source§impl<'a> IntoIterator for &'a DigitSequence
impl<'a> IntoIterator for &'a DigitSequence
source§impl IntoIterator for DigitSequence
impl IntoIterator for DigitSequence
source§impl Ord for DigitSequence
impl Ord for DigitSequence
source§fn cmp(&self, other: &DigitSequence) -> Ordering
fn cmp(&self, other: &DigitSequence) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
source§impl PartialEq<&[u8]> for DigitSequence
impl PartialEq<&[u8]> for DigitSequence
source§impl<const N: usize> PartialEq<&[u8; N]> for DigitSequence
impl<const N: usize> PartialEq<&[u8; N]> for DigitSequence
source§impl<const N: usize> PartialEq<[u8; N]> for DigitSequence
impl<const N: usize> PartialEq<[u8; N]> for DigitSequence
source§impl PartialEq<Vec<u8>> for DigitSequence
impl PartialEq<Vec<u8>> for DigitSequence
source§impl PartialEq for DigitSequence
impl PartialEq for DigitSequence
source§fn eq(&self, other: &DigitSequence) -> bool
fn eq(&self, other: &DigitSequence) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl PartialOrd for DigitSequence
impl PartialOrd for DigitSequence
source§fn partial_cmp(&self, other: &DigitSequence) -> Option<Ordering>
fn partial_cmp(&self, other: &DigitSequence) -> Option<Ordering>
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