rasn 0.28.13

A safe no_std ASN.1 codec framework.
Documentation
use rasn_pkix::Certificate;

fn main() {
    const DER_BYTES: &[u8] = include_bytes!("../standards/pkix/tests/data/letsencrypt-x3.crt");
    let original = rasn::der::decode::<Certificate>(DER_BYTES).unwrap();
    let ber = rasn::ber::encode(&original).unwrap();
    let cer = rasn::cer::encode(&original).unwrap();
    let uper = rasn::uper::encode(&original).unwrap();
    let aper = rasn::aper::encode(&original).unwrap();

    let der_len = DER_BYTES.len();
    println!("Original DER size: {der_len:.2}");
    println!(
        "BER size: {} ({:.2}%)",
        ber.len(),
        percentage_difference(der_len, ber.len())
    );
    println!(
        "CER size: {} ({:.2}%)",
        cer.len(),
        percentage_difference(der_len, cer.len())
    );
    println!(
        "UPER size: {} ({:.2}%)",
        uper.len(),
        percentage_difference(der_len, uper.len())
    );
    println!(
        "APER size: {} ({:.2}%)",
        aper.len(),
        percentage_difference(der_len, aper.len())
    );
}

pub fn percentage_difference(num1: usize, num2: usize) -> f64 {
    let difference = num1 as f64 - num2 as f64;
    (difference / num1 as f64) * 100.0
}