uuinfo 0.6.5

A tool to debug unique identifiers (UUID, ULID, Snowflake, etc).
use basen::Base;
use std::fmt::Write;

use crate::schema::{Args, IDInfo};

pub const UPPER_BASE36: Base<36> = Base::new(b"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ").unwrap();

pub fn parse_asin(args: &Args) -> Option<IDInfo> {
    if args.id.chars().count() != 10 {
        return None;
    }
    let id_int: u64 = UPPER_BASE36.decode_var_len(&args.id)?;

    Some(IDInfo {
        id_type: "ASIN (Amazon)".to_string(),
        standard: args.id.to_string(),
        integer: Some(id_int as u128),
        parsed: Some("as integer, from base36".to_string()),
        size: 64,
        entropy: 0,
        sequence: Some(id_int as u128),
        hex: Some(hex::encode(id_int.to_be_bytes())),
        bits: Some(id_int.to_be_bytes().iter().fold(String::new(), |mut output, c| {
            let _ = write!(output, "{c:08b}");
            output
        })),
        color_map: Some("6666666666666666666666666666666666666666666666666666666666666666".to_string()),
        high_confidence: id_int >= 1117159523352576,
        ..Default::default()
    })
}