yotta 0.2.0

A no_std arbitrary-precision arithmetic library
Documentation
use crate::Yotta;
use alloc::{string::String, vec};
use core::fmt::{Debug, Display, Formatter, Result};
use core::str::FromStr;

impl Display for Yotta {
    fn fmt(&self, f: &mut Formatter) -> Result {
        let mut mantissa = String::new();
        for &digit in &self.mantissa {
            mantissa.push((digit + b'0') as char);
        }
        let s = mantissa.trim_end_matches('\0');
        if self.negative && s != "0" {
            write!(f, "-{}", s)
        } else {
            write!(f, "{}", s)
        }
    }
}

impl Debug for Yotta {
    fn fmt(&self, f: &mut Formatter) -> Result {
        let s: String = self.mantissa.iter().map(|&d| (d + b'0') as char).collect();
        write!(
            f,
            "Yotta {{ mantissa: {}, exponent: {}, bit_width: {}, negative: {} }}",
            s, self.exponent, self.bit_width, self.negative
        )
    }
}

impl FromStr for Yotta {
    type Err = core::fmt::Error;
    fn from_str(s: &str) -> core::result::Result<Yotta, Self::Err> {
        let negative = s.starts_with('-');
        let s = if negative { &s[1..] } else { s };
        let mut res = Yotta {
            mantissa: vec![0; s.len()],
            exponent: 0,
            bit_width: (s.len() as u32) * 8,
            negative,
        };
        res.mantissa[..s.len()].copy_from_slice(s.as_bytes());
        core::result::Result::Ok(res)
    }
}