asn1rs 0.2.2

ASN.1 to Rust, Protobuf and SQL compiler/code generator. Supports ASN.1 UPER
Documentation
use asn1rs::model::Model;
use asn1rs::parser::Tokenizer;
use std::time::{Duration, Instant};

#[test]
pub fn tokenizer_should_not_regress_noticeably_in_performance() {
    let before = Instant::now();
    let tokens = Tokenizer::default().parse(TEXT);
    let tokenizer_parse_took = before.elapsed();
    println!(
        "Tokenizer::default().parse(..) took {:?}",
        tokenizer_parse_took
    );
    assert!(tokenizer_parse_took < Duration::from_secs(1));

    let before = Instant::now();
    let _ = Model::try_from(tokens).unwrap();
    let model_try_from_took = before.elapsed();
    println!("Model::try_from(..) took {:?}", model_try_from_took);
    assert!(model_try_from_took < Duration::from_secs(1));
}

const TEXT: &str = r"BasicChoice DEFINITIONS AUTOMATIC TAGS ::=
    BEGIN
    
    Basic ::= CHOICE {
        abc UTF8String,
        def UTF8String,
        ghi INTEGER
    }
    
    Extensible ::= CHOICE {
        abc UTF8String,
        def INTEGER,
        ..., -- whatever reserved blubber comment
        ghi INTEGER,
        jkl Basic,
        mno UTF8String
    }
    
    MoreThan63Extensions ::= CHOICE {
        abc UTF8String,
        ..., -- whatever reserved blubber comment
        e00 INTEGER,
        e01 INTEGER,
        e02 INTEGER,
        e03 INTEGER,
        e04 INTEGER,
        e05 INTEGER,
        e06 INTEGER,
        e07 INTEGER,
        e08 INTEGER,
        e09 INTEGER,
        
        e10 INTEGER,
        e11 INTEGER,
        e12 INTEGER,
        e13 INTEGER,
        e14 INTEGER,
        e15 INTEGER,
        e16 INTEGER,
        e17 INTEGER,
        e18 INTEGER,
        e19 INTEGER,
        
        e20 INTEGER,
        e21 INTEGER,
        e22 INTEGER,
        e23 INTEGER,
        e24 INTEGER,
        e25 INTEGER,
        e26 INTEGER,
        e27 INTEGER,
        e28 INTEGER,
        e29 INTEGER,
        
        e30 INTEGER,
        e31 INTEGER,
        e32 INTEGER,
        e33 INTEGER,
        e34 INTEGER,
        e35 INTEGER,
        e36 INTEGER,
        e37 INTEGER,
        e38 INTEGER,
        e39 INTEGER,
        
        e40 INTEGER,
        e41 INTEGER,
        e42 INTEGER,
        e43 INTEGER,
        e44 INTEGER,
        e45 INTEGER,
        e46 INTEGER,
        e47 INTEGER,
        e48 INTEGER,
        e49 INTEGER,
        
        e50 INTEGER,
        e51 INTEGER,
        e52 INTEGER,
        e53 INTEGER,
        e54 INTEGER,
        e55 INTEGER,
        e56 INTEGER,
        e57 INTEGER,
        e58 INTEGER,
        e59 INTEGER,
        
        e60 INTEGER,
        e61 INTEGER,
        e62 INTEGER,
        e63 INTEGER,
        e64 INTEGER,
        e65 INTEGER,
        e66 INTEGER,
        e67 INTEGER,
        e68 INTEGER,
        e69 INTEGER,
        
        e70 INTEGER,
        e71 INTEGER,
        e72 INTEGER,
        e73 INTEGER,
        e74 INTEGER,
        e75 INTEGER,
        e76 INTEGER,
        e77 INTEGER,
        e78 INTEGER,
        e79 INTEGER,
        
        e80 INTEGER,
        e81 INTEGER,
        e82 INTEGER,
        e83 INTEGER,
        e84 INTEGER,
        e85 INTEGER,
        e86 INTEGER,
        e87 INTEGER,
        e88 INTEGER,
        e89 INTEGER,
        
        e90 INTEGER,
        e91 INTEGER,
        e92 INTEGER,
        e93 INTEGER,
        e94 INTEGER,
        e95 INTEGER,
        e96 INTEGER,
        e97 INTEGER,
        e98 INTEGER,
        e99 INTEGER,
        
        e100 INTEGER,
        e101 INTEGER,
        e102 INTEGER,
        e103 INTEGER,
        e104 INTEGER,
        e105 INTEGER,
        e106 INTEGER,
        e107 INTEGER,
        e108 INTEGER,
        e109 INTEGER,
        
        e110 INTEGER,
        e111 INTEGER,
        e112 INTEGER,
        e113 INTEGER,
        e114 INTEGER,
        e115 INTEGER,
        e116 INTEGER,
        e117 INTEGER,
        e118 INTEGER,
        e119 INTEGER,
        
        e120 INTEGER,
        e121 INTEGER,
        e122 INTEGER,
        e123 INTEGER,
        e124 INTEGER,
        e125 INTEGER,
        e126 INTEGER,
        e127 INTEGER,
        e128 INTEGER,
        e129 INTEGER,
        
        e130 INTEGER,
        e131 INTEGER,
        e132 INTEGER,
        e133 INTEGER,
        e134 INTEGER,
        e135 INTEGER,
        e136 INTEGER,
        e137 INTEGER,
        e138 INTEGER,
        e139 INTEGER,
        
        e140 INTEGER,
        e141 INTEGER,
        e142 INTEGER,
        e143 INTEGER,
        e144 INTEGER,
        e145 INTEGER,
        e146 INTEGER,
        e147 INTEGER,
        e148 INTEGER,
        e149 INTEGER,
        
        e150 INTEGER,
        e151 INTEGER,
        e152 INTEGER,
        e153 INTEGER,
        e154 INTEGER,
        e155 INTEGER,
        e156 INTEGER,
        e157 INTEGER,
        e158 INTEGER,
        e159 INTEGER,
        
        e160 INTEGER,
        e161 INTEGER,
        e162 INTEGER,
        e163 INTEGER,
        e164 INTEGER,
        e165 INTEGER,
        e166 INTEGER,
        e167 INTEGER,
        e168 INTEGER,
        e169 INTEGER,
        
        e170 INTEGER,
        e171 INTEGER,
        e172 INTEGER,
        e173 INTEGER,
        e174 INTEGER,
        e175 INTEGER,
        e176 INTEGER,
        e177 INTEGER,
        e178 INTEGER,
        e179 INTEGER,
        
        e180 INTEGER,
        e181 INTEGER,
        e182 INTEGER,
        e183 INTEGER,
        e184 INTEGER,
        e185 INTEGER,
        e186 INTEGER,
        e187 INTEGER,
        e188 INTEGER,
        e189 INTEGER,
        
        e190 INTEGER,
        e191 INTEGER,
        e192 INTEGER,
        e193 INTEGER,
        e194 INTEGER,
        e195 INTEGER,
        e196 INTEGER,
        e197 INTEGER,
        e198 INTEGER,
        e199 INTEGER,
        
        e200 INTEGER,
        e201 INTEGER,
        e202 INTEGER,
        e203 INTEGER,
        e204 INTEGER,
        e205 INTEGER,
        e206 INTEGER,
        e207 INTEGER,
        e208 INTEGER,
        e209 INTEGER,
        
        e210 INTEGER,
        e211 INTEGER,
        e212 INTEGER,
        e213 INTEGER,
        e214 INTEGER,
        e215 INTEGER,
        e216 INTEGER,
        e217 INTEGER,
        e218 INTEGER,
        e219 INTEGER,
        
        e220 INTEGER,
        e221 INTEGER,
        e222 INTEGER,
        e223 INTEGER,
        e224 INTEGER,
        e225 INTEGER,
        e226 INTEGER,
        e227 INTEGER,
        e228 INTEGER,
        e229 INTEGER,
        
        e230 INTEGER,
        e231 INTEGER,
        e232 INTEGER,
        e233 INTEGER,
        e234 INTEGER,
        e235 INTEGER,
        e236 INTEGER,
        e237 INTEGER,
        e238 INTEGER,
        e239 INTEGER,
        
        e240 INTEGER,
        e241 INTEGER,
        e242 INTEGER,
        e243 INTEGER,
        e244 INTEGER,
        e245 INTEGER,
        e246 INTEGER,
        e247 INTEGER,
        e248 INTEGER,
        e249 INTEGER,
        
        e250 INTEGER,
        e251 INTEGER,
        e252 INTEGER,
        e253 INTEGER,
        e254 INTEGER,
        e255 INTEGER,
        e256 INTEGER,
        e257 INTEGER,
        e258 INTEGER,
        e259 INTEGER,
        
        e260 INTEGER,
        e261 INTEGER,
        e262 INTEGER,
        e263 INTEGER,
        e264 INTEGER,
        e265 INTEGER,
        e266 INTEGER,
        e267 INTEGER,
        e268 INTEGER,
        e269 INTEGER,
        
        e270 INTEGER,
        e271 INTEGER,
        e272 INTEGER,
        e273 INTEGER,
        e274 INTEGER,
        e275 INTEGER,
        e276 INTEGER,
        e277 INTEGER,
        e278 INTEGER,
        e279 INTEGER
    }
    
    END";