rasn 0.28.13

A safe no_std ASN.1 codec framework.
Documentation
use rasn::prelude::*;

#[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq)]
#[rasn(automatic_tags)]
struct Seq64 {
    pub root: Integer,
    #[rasn(extension_addition)]
    pub e00: Option<Integer>,
    #[rasn(extension_addition)]
    pub e01: Option<Integer>,
    #[rasn(extension_addition)]
    pub e02: Option<Integer>,
    #[rasn(extension_addition)]
    pub e03: Option<Integer>,
    #[rasn(extension_addition)]
    pub e04: Option<Integer>,
    #[rasn(extension_addition)]
    pub e05: Option<Integer>,
    #[rasn(extension_addition)]
    pub e06: Option<Integer>,
    #[rasn(extension_addition)]
    pub e07: Option<Integer>,
    #[rasn(extension_addition)]
    pub e08: Option<Integer>,
    #[rasn(extension_addition)]
    pub e09: Option<Integer>,
    #[rasn(extension_addition)]
    pub e10: Option<Integer>,
    #[rasn(extension_addition)]
    pub e11: Option<Integer>,
    #[rasn(extension_addition)]
    pub e12: Option<Integer>,
    #[rasn(extension_addition)]
    pub e13: Option<Integer>,
    #[rasn(extension_addition)]
    pub e14: Option<Integer>,
    #[rasn(extension_addition)]
    pub e15: Option<Integer>,
    #[rasn(extension_addition)]
    pub e16: Option<Integer>,
    #[rasn(extension_addition)]
    pub e17: Option<Integer>,
    #[rasn(extension_addition)]
    pub e18: Option<Integer>,
    #[rasn(extension_addition)]
    pub e19: Option<Integer>,
    #[rasn(extension_addition)]
    pub e20: Option<Integer>,
    #[rasn(extension_addition)]
    pub e21: Option<Integer>,
    #[rasn(extension_addition)]
    pub e22: Option<Integer>,
    #[rasn(extension_addition)]
    pub e23: Option<Integer>,
    #[rasn(extension_addition)]
    pub e24: Option<Integer>,
    #[rasn(extension_addition)]
    pub e25: Option<Integer>,
    #[rasn(extension_addition)]
    pub e26: Option<Integer>,
    #[rasn(extension_addition)]
    pub e27: Option<Integer>,
    #[rasn(extension_addition)]
    pub e28: Option<Integer>,
    #[rasn(extension_addition)]
    pub e29: Option<Integer>,
    #[rasn(extension_addition)]
    pub e30: Option<Integer>,
    #[rasn(extension_addition)]
    pub e31: Option<Integer>,
    #[rasn(extension_addition)]
    pub e32: Option<Integer>,
    #[rasn(extension_addition)]
    pub e33: Option<Integer>,
    #[rasn(extension_addition)]
    pub e34: Option<Integer>,
    #[rasn(extension_addition)]
    pub e35: Option<Integer>,
    #[rasn(extension_addition)]
    pub e36: Option<Integer>,
    #[rasn(extension_addition)]
    pub e37: Option<Integer>,
    #[rasn(extension_addition)]
    pub e38: Option<Integer>,
    #[rasn(extension_addition)]
    pub e39: Option<Integer>,
    #[rasn(extension_addition)]
    pub e40: Option<Integer>,
    #[rasn(extension_addition)]
    pub e41: Option<Integer>,
    #[rasn(extension_addition)]
    pub e42: Option<Integer>,
    #[rasn(extension_addition)]
    pub e43: Option<Integer>,
    #[rasn(extension_addition)]
    pub e44: Option<Integer>,
    #[rasn(extension_addition)]
    pub e45: Option<Integer>,
    #[rasn(extension_addition)]
    pub e46: Option<Integer>,
    #[rasn(extension_addition)]
    pub e47: Option<Integer>,
    #[rasn(extension_addition)]
    pub e48: Option<Integer>,
    #[rasn(extension_addition)]
    pub e49: Option<Integer>,
    #[rasn(extension_addition)]
    pub e50: Option<Integer>,
    #[rasn(extension_addition)]
    pub e51: Option<Integer>,
    #[rasn(extension_addition)]
    pub e52: Option<Integer>,
    #[rasn(extension_addition)]
    pub e53: Option<Integer>,
    #[rasn(extension_addition)]
    pub e54: Option<Integer>,
    #[rasn(extension_addition)]
    pub e55: Option<Integer>,
    #[rasn(extension_addition)]
    pub e56: Option<Integer>,
    #[rasn(extension_addition)]
    pub e57: Option<Integer>,
    #[rasn(extension_addition)]
    pub e58: Option<Integer>,
    #[rasn(extension_addition)]
    pub e59: Option<Integer>,
    #[rasn(extension_addition)]
    pub e60: Option<Integer>,
    #[rasn(extension_addition)]
    pub e61: Option<Integer>,
    #[rasn(extension_addition)]
    pub e62: Option<Integer>,
    #[rasn(extension_addition)]
    pub e63: Option<Integer>,
}

#[test]
fn uper_issue523_normally_small_length_64_extensions() {
    let original = Seq64 {
        root: Integer::from(42),
        e00: None,
        e01: None,
        e02: None,
        e03: None,
        e04: None,
        e05: None,
        e06: None,
        e07: None,
        e08: None,
        e09: None,
        e10: None,
        e11: None,
        e12: None,
        e13: None,
        e14: None,
        e15: None,
        e16: None,
        e17: None,
        e18: None,
        e19: None,
        e20: None,
        e21: None,
        e22: None,
        e23: None,
        e24: None,
        e25: None,
        e26: None,
        e27: None,
        e28: None,
        e29: None,
        e30: None,
        e31: None,
        e32: None,
        e33: None,
        e34: None,
        e35: None,
        e36: None,
        e37: None,
        e38: None,
        e39: None,
        e40: None,
        e41: None,
        e42: None,
        e43: None,
        e44: None,
        e45: None,
        e46: None,
        e47: None,
        e48: None,
        e49: None,
        e50: None,
        e51: None,
        e52: None,
        e53: None,
        e54: None,
        e55: None,
        e56: None,
        e57: None,
        e58: None,
        e59: None,
        e60: None,
        e61: None,
        e62: None,
        e63: None,
    };
    let encoded = rasn::uper::encode(&original).expect("encode failed");
    let decoded: Seq64 = rasn::uper::decode(&encoded).expect("decode failed");
    assert_eq!(decoded, original);
}