digit-sequence 0.3.8

Sequence of u8 digits
Documentation
use crate::DigitSequence;
use core::fmt::Debug;
use pretty_assertions::assert_eq;
use std::error::Error;

pub fn expect_digits_from<T: Into<DigitSequence>>(source: T, expected_digits: &[u8]) {
    let sequence: DigitSequence = source.into();

    assert_eq!(sequence, expected_digits);
}

pub fn expect_try_digits_from<T: TryInto<DigitSequence>>(source: T, expected_digits: &[u8])
where
    <T as TryInto<DigitSequence>>::Error: Debug,
{
    let actual_sequence: DigitSequence = source.try_into().unwrap();

    assert_eq!(actual_sequence, expected_digits);
}

pub fn expect_try_roundtrip_conversion<E, T>(source: T)
where
    E: Error,
    T: Into<DigitSequence> + TryFrom<DigitSequence, Error = E> + PartialEq<T> + Debug + Copy,
{
    let sequence: DigitSequence = source.into();
    let roundtrip: T = sequence.try_into().unwrap();

    assert_eq!(roundtrip, source);
}

pub fn expect_try_roundtrip_conversion_via_ref<E, T>(source: T)
where
    E: Error,
    T: Into<DigitSequence>
        + for<'a> TryFrom<&'a DigitSequence, Error = E>
        + PartialEq<T>
        + Debug
        + Copy,
{
    let sequence: DigitSequence = source.into();
    let reference = &sequence;
    let roundtrip: T = reference.try_into().unwrap();

    assert_eq!(roundtrip, source);
}