yali 0.1.1

Yet Another LargeInt Library
Documentation
use std::{num::ParseIntError, str::FromStr};

use crate::Number;

impl<const N: usize> FromStr for Number<N> {
    fn from_str(s: &str) -> Result<Self, ParseIntError> {
        let mut s = s.replace(|a| !"0123456789abcdef".contains(a), "");

        while s.len() % 16 != 0 {
            s = s.chars().rev().collect();
            s.push('0');
            s = s.chars().rev().collect();
        }

        let mut body = [0; N];
        let mut current_pair = Vec::new();
        let mut index = N - s.len() / 16;

        for i in s.chars() {
            current_pair.push(i);
            if current_pair.len() == 16 {
                let string: String = current_pair.iter().collect();
                let byte = u64::from_str_radix(&string, 16)?;
                body[index] = byte;
                current_pair = Vec::new();
                index += 1;
            }
        }

        Ok(Self { body })
    }

    type Err = ParseIntError;
}