@@ -44,45 +44,7 @@ impl Rasn {
4444 tld : ToplevelDefinition ,
4545 ) -> Result < TokenStream , GeneratorError > {
4646 match tld {
47- ToplevelDefinition :: Type ( t) => {
48- if t. parameterization . is_some ( ) {
49- return Ok ( TokenStream :: new ( ) ) ;
50- }
51- match t. ty {
52- ASN1Type :: Null => self . generate_null ( t) ,
53- ASN1Type :: Boolean ( _) => self . generate_boolean ( t) ,
54- ASN1Type :: Integer ( _) => self . generate_integer ( t) ,
55- ASN1Type :: Enumerated ( _) => self . generate_enumerated ( t) ,
56- ASN1Type :: BitString ( _) => self . generate_bit_string ( t) ,
57- ASN1Type :: CharacterString ( _) => self . generate_character_string ( t) ,
58- ASN1Type :: Sequence ( _) | ASN1Type :: Set ( _) => self . generate_sequence_or_set ( t) ,
59- ASN1Type :: SequenceOf ( _) | ASN1Type :: SetOf ( _) => {
60- self . generate_sequence_or_set_of ( t)
61- }
62- ASN1Type :: ElsewhereDeclaredType ( _) => self . generate_typealias ( t) ,
63- ASN1Type :: Choice ( _) => self . generate_choice ( t) ,
64- ASN1Type :: OctetString ( _) => self . generate_octet_string ( t) ,
65- ASN1Type :: Time ( _) => unimplemented ! ( "rasn does not support TIME types yet!" ) ,
66- ASN1Type :: Real ( _) => Err ( GeneratorError {
67- kind : GeneratorErrorType :: NotYetInplemented ,
68- details : "Real types are currently unsupported!" . into ( ) ,
69- top_level_declaration : None ,
70- } ) ,
71- ASN1Type :: ObjectIdentifier ( _) => self . generate_oid ( t) ,
72- ASN1Type :: ObjectClassField ( _) | ASN1Type :: EmbeddedPdv | ASN1Type :: External => {
73- self . generate_any ( t)
74- }
75- ASN1Type :: GeneralizedTime ( _) => self . generate_generalized_time ( t) ,
76- ASN1Type :: UTCTime ( _) => self . generate_utc_time ( t) ,
77- ASN1Type :: Any => self . generate_any ( t) ,
78- ASN1Type :: ChoiceSelectionType ( _) => Err ( GeneratorError {
79- kind : GeneratorErrorType :: Asn1TypeMismatch ,
80- details : "Choice selection type should have been resolved at this point!"
81- . into ( ) ,
82- top_level_declaration : None ,
83- } ) ,
84- }
85- }
47+ ToplevelDefinition :: Type ( t) => self . generate_type ( t) ,
8648 ToplevelDefinition :: Value ( v) => self . generate_value ( v) ,
8749 ToplevelDefinition :: Class ( _) => Ok ( TokenStream :: new ( ) ) ,
8850 ToplevelDefinition :: Object ( o) => match o. value {
@@ -97,6 +59,46 @@ impl Rasn {
9759 }
9860 }
9961
62+ pub ( crate ) fn generate_type (
63+ & self ,
64+ tld : ToplevelTypeDefinition ,
65+ ) -> Result < TokenStream , GeneratorError > {
66+ if tld. parameterization . is_some ( ) {
67+ return Ok ( TokenStream :: new ( ) ) ;
68+ }
69+ match tld. ty {
70+ ASN1Type :: Null => self . generate_null ( tld) ,
71+ ASN1Type :: Boolean ( _) => self . generate_boolean ( tld) ,
72+ ASN1Type :: Integer ( _) => self . generate_integer ( tld) ,
73+ ASN1Type :: Enumerated ( _) => self . generate_enumerated ( tld) ,
74+ ASN1Type :: BitString ( _) => self . generate_bit_string ( tld) ,
75+ ASN1Type :: CharacterString ( _) => self . generate_character_string ( tld) ,
76+ ASN1Type :: Sequence ( _) | ASN1Type :: Set ( _) => self . generate_sequence_or_set ( tld) ,
77+ ASN1Type :: SequenceOf ( _) | ASN1Type :: SetOf ( _) => self . generate_sequence_or_set_of ( tld) ,
78+ ASN1Type :: ElsewhereDeclaredType ( _) => self . generate_typealias ( tld) ,
79+ ASN1Type :: Choice ( _) => self . generate_choice ( tld) ,
80+ ASN1Type :: OctetString ( _) => self . generate_octet_string ( tld) ,
81+ ASN1Type :: Time ( _) => unimplemented ! ( "rasn does not support TIME types yet!" ) ,
82+ ASN1Type :: Real ( _) => Err ( GeneratorError {
83+ kind : GeneratorErrorType :: NotYetInplemented ,
84+ details : "Real types are currently unsupported!" . into ( ) ,
85+ top_level_declaration : None ,
86+ } ) ,
87+ ASN1Type :: ObjectIdentifier ( _) => self . generate_oid ( tld) ,
88+ ASN1Type :: ObjectClassField ( _) | ASN1Type :: EmbeddedPdv | ASN1Type :: External => {
89+ self . generate_any ( tld)
90+ }
91+ ASN1Type :: GeneralizedTime ( _) => self . generate_generalized_time ( tld) ,
92+ ASN1Type :: UTCTime ( _) => self . generate_utc_time ( tld) ,
93+ ASN1Type :: Any => self . generate_any ( tld) ,
94+ ASN1Type :: ChoiceSelectionType ( _) => Err ( GeneratorError {
95+ kind : GeneratorErrorType :: Asn1TypeMismatch ,
96+ details : "Choice selection type should have been resolved at this point!" . into ( ) ,
97+ top_level_declaration : None ,
98+ } ) ,
99+ }
100+ }
101+
100102 pub ( crate ) fn generate_typealias (
101103 & self ,
102104 tld : ToplevelTypeDefinition ,
@@ -807,19 +809,17 @@ impl Rasn {
807809 let name = self . to_rust_title_case ( & tld. name ) ;
808810 let anonymous_item = match seq_or_set_of. element_type . as_ref ( ) {
809811 ASN1Type :: ElsewhereDeclaredType ( _) => None ,
810- n => Some (
811- self . generate_tld ( ToplevelDefinition :: Type ( ToplevelTypeDefinition {
812- parameterization : None ,
813- comments : format ! (
814- " Anonymous {} OF member " ,
815- if is_set_of { "SET" } else { "SEQUENCE" }
816- ) ,
817- name : String :: from ( INNER_ARRAY_LIKE_PREFIX ) + & name. to_string ( ) ,
818- ty : n. clone ( ) ,
819- tag : None ,
820- module_header : None ,
821- } ) ) ?,
822- ) ,
812+ n => Some ( self . generate_type ( ToplevelTypeDefinition {
813+ parameterization : None ,
814+ comments : format ! (
815+ " Anonymous {} OF member " ,
816+ if is_set_of { "SET" } else { "SEQUENCE" }
817+ ) ,
818+ name : String :: from ( INNER_ARRAY_LIKE_PREFIX ) + & name. to_string ( ) ,
819+ ty : n. clone ( ) ,
820+ tag : None ,
821+ module_header : None ,
822+ } ) ?) ,
823823 }
824824 . unwrap_or_default ( ) ;
825825 let member_type = match seq_or_set_of. element_type . as_ref ( ) {
0 commit comments