2021-06-28 14:35:45 +00:00
#![ allow(unused_parens) ]
use std ::convert ::TryFrom ;
use preserves ::value ::{ NestedValue , Reader } ;
use lazy_static ::lazy_static ;
lazy_static! {
pub static ref LIT15 : preserves ::value ::IOValue = /* #f */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 128 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT28 : preserves ::value ::IOValue = /* 1 */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 145 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT0 : preserves ::value ::IOValue = /* Boolean */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 7 , 66 , 111 , 111 , 108 , 101 , 97 , 110 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT5 : preserves ::value ::IOValue = /* ByteString */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 10 , 66 , 121 , 116 , 101 , 83 , 116 , 114 , 105 , 110 , 103 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT2 : preserves ::value ::IOValue = /* Double */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 6 , 68 , 111 , 117 , 98 , 108 , 101 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT1 : preserves ::value ::IOValue = /* Float */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 5 , 70 , 108 , 111 , 97 , 116 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT3 : preserves ::value ::IOValue = /* SignedInteger */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 13 , 83 , 105 , 103 , 110 , 101 , 100 , 73 , 110 , 116 , 101 , 103 , 101 , 114 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT4 : preserves ::value ::IOValue = /* String */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 6 , 83 , 116 , 114 , 105 , 110 , 103 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT6 : preserves ::value ::IOValue = /* Symbol */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 6 , 83 , 121 , 109 , 98 , 111 , 108 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT14 : preserves ::value ::IOValue = /* and */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 3 , 97 , 110 , 100 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT21 : preserves ::value ::IOValue = /* any */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 3 , 97 , 110 , 121 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT22 : preserves ::value ::IOValue = /* atom */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 4 , 97 , 116 , 111 , 109 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT8 : preserves ::value ::IOValue = /* bundle */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 6 , 98 , 117 , 110 , 100 , 108 , 101 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT18 : preserves ::value ::IOValue = /* definitions */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 11 , 100 , 101 , 102 , 105 , 110 , 105 , 116 , 105 , 111 , 110 , 115 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT12 : preserves ::value ::IOValue = /* dict */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 4 , 100 , 105 , 99 , 116 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT27 : preserves ::value ::IOValue = /* dictof */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 6 , 100 , 105 , 99 , 116 , 111 , 102 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT23 : preserves ::value ::IOValue = /* embedded */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 8 , 101 , 109 , 98 , 101 , 100 , 100 , 101 , 100 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT19 : preserves ::value ::IOValue = /* embeddedType */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 12 , 101 , 109 , 98 , 101 , 100 , 100 , 101 , 100 , 84 , 121 , 112 , 101 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT24 : preserves ::value ::IOValue = /* lit */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 3 , 108 , 105 , 116 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT7 : preserves ::value ::IOValue = /* named */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 5 , 110 , 97 , 109 , 101 , 100 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT13 : preserves ::value ::IOValue = /* or */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 2 , 111 , 114 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT9 : preserves ::value ::IOValue = /* rec */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 3 , 114 , 101 , 99 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT16 : preserves ::value ::IOValue = /* ref */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 3 , 114 , 101 , 102 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT17 : preserves ::value ::IOValue = /* schema */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 6 , 115 , 99 , 104 , 101 , 109 , 97 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT25 : preserves ::value ::IOValue = /* seqof */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 5 , 115 , 101 , 113 , 111 , 102 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT26 : preserves ::value ::IOValue = /* setof */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 5 , 115 , 101 , 116 , 111 , 102 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT10 : preserves ::value ::IOValue = /* tuple */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 5 , 116 , 117 , 112 , 108 , 101 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT11 : preserves ::value ::IOValue = /* tuplePrefix */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 11 , 116 , 117 , 112 , 108 , 101 , 80 , 114 , 101 , 102 , 105 , 120 ] ) . demand_next ( false ) . unwrap ( ) ;
pub static ref LIT20 : preserves ::value ::IOValue = /* version */ preserves ::value ::PackedReader ::decode_bytes ( & vec! [ 179 , 7 , 118 , 101 , 114 , 115 , 105 , 111 , 110 ] ) . demand_next ( false ) . unwrap ( ) ;
}
2021-06-28 15:26:41 +00:00
#[ derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone) ]
2021-06-28 15:08:44 +00:00
pub enum AtomKind { Boolean , Float , Double , SignedInteger , String , ByteString , Symbol }
2021-06-28 14:35:45 +00:00
2021-06-28 15:26:41 +00:00
#[ derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone) ]
pub struct Binding { pub name : std ::string ::String , pub pattern : SimplePattern }
2021-06-28 14:35:45 +00:00
2021-06-28 15:26:41 +00:00
#[ derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone) ]
pub struct Bundle { pub modules : Modules }
2021-06-28 14:35:45 +00:00
2021-06-28 15:26:41 +00:00
#[ derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone) ]
2021-06-28 15:08:44 +00:00
pub enum CompoundPattern {
2021-06-28 14:35:45 +00:00
Rec { label : std ::boxed ::Box < NamedPattern > , fields : std ::boxed ::Box < NamedPattern > } ,
Tuple { patterns : std ::vec ::Vec < NamedPattern > } ,
TuplePrefix {
fixed : std ::vec ::Vec < NamedPattern > ,
variable : std ::boxed ::Box < NamedSimplePattern >
} ,
Dict { entries : std ::boxed ::Box < DictionaryEntries > }
}
2021-06-28 15:26:41 +00:00
#[ derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone) ]
2021-06-28 15:08:44 +00:00
pub enum Definition {
2021-06-28 14:35:45 +00:00
Or {
pattern_0 : std ::boxed ::Box < NamedAlternative > ,
pattern_1 : std ::boxed ::Box < NamedAlternative > ,
pattern_n : std ::vec ::Vec < NamedAlternative >
} ,
And {
pattern_0 : std ::boxed ::Box < NamedPattern > ,
pattern_1 : std ::boxed ::Box < NamedPattern > ,
pattern_n : std ::vec ::Vec < NamedPattern >
} ,
Pattern ( std ::boxed ::Box < Pattern > )
}
2021-06-28 15:26:41 +00:00
#[ derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone) ]
2021-06-28 15:08:44 +00:00
pub struct Definitions ( pub preserves ::value ::Map < std ::string ::String , Definition > ) ;
2021-06-28 14:35:45 +00:00
2021-06-28 15:26:41 +00:00
#[ derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone) ]
2021-06-28 15:08:44 +00:00
pub struct DictionaryEntries ( pub preserves ::value ::Map < preserves ::value ::IOValue , NamedSimplePattern > ) ;
2021-06-28 14:35:45 +00:00
2021-06-28 15:26:41 +00:00
#[ derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone) ]
2021-06-28 15:08:44 +00:00
pub enum EmbeddedTypeName { Ref ( std ::boxed ::Box < Ref > ) , False }
2021-06-28 14:35:45 +00:00
2021-06-28 15:26:41 +00:00
#[ derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone) ]
2021-06-28 15:08:44 +00:00
pub struct ModulePath ( pub std ::vec ::Vec < std ::string ::String > ) ;
2021-06-28 14:35:45 +00:00
2021-06-28 15:26:41 +00:00
#[ derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone) ]
2021-06-28 15:08:44 +00:00
pub struct Modules ( pub preserves ::value ::Map < ModulePath , Schema > ) ;
2021-06-28 14:35:45 +00:00
2021-06-28 15:26:41 +00:00
#[ derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone) ]
pub struct NamedAlternative { pub variant_label : std ::string ::String , pub pattern : Pattern }
2021-06-28 14:35:45 +00:00
2021-06-28 15:26:41 +00:00
#[ derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone) ]
2021-06-28 15:08:44 +00:00
pub enum NamedPattern { Named ( std ::boxed ::Box < Binding > ) , Anonymous ( std ::boxed ::Box < Pattern > ) }
2021-06-28 14:35:45 +00:00
2021-06-28 15:26:41 +00:00
#[ derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone) ]
2021-06-28 15:08:44 +00:00
pub enum NamedSimplePattern { Named ( std ::boxed ::Box < Binding > ) , Anonymous ( std ::boxed ::Box < SimplePattern > ) }
2021-06-28 14:35:45 +00:00
2021-06-28 15:26:41 +00:00
#[ derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone) ]
2021-06-28 15:08:44 +00:00
pub enum Pattern {
2021-06-28 14:35:45 +00:00
SimplePattern ( std ::boxed ::Box < SimplePattern > ) ,
CompoundPattern ( std ::boxed ::Box < CompoundPattern > )
}
2021-06-28 15:26:41 +00:00
#[ derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone) ]
pub struct Ref { pub module : ModulePath , pub name : std ::string ::String }
2021-06-28 14:35:45 +00:00
2021-06-28 15:26:41 +00:00
#[ derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone) ]
2021-06-28 15:08:44 +00:00
pub struct Schema {
2021-06-28 15:26:41 +00:00
pub definitions : Definitions ,
pub embedded_type : EmbeddedTypeName ,
pub version : Version
2021-06-28 14:35:45 +00:00
}
2021-06-28 15:26:41 +00:00
#[ derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone) ]
2021-06-28 15:08:44 +00:00
pub enum SimplePattern {
2021-06-28 14:35:45 +00:00
Any ,
Atom { atom_kind : std ::boxed ::Box < AtomKind > } ,
Embedded { interface : std ::boxed ::Box < SimplePattern > } ,
Lit { value : preserves ::value ::IOValue } ,
Seqof { pattern : std ::boxed ::Box < SimplePattern > } ,
Setof { pattern : std ::boxed ::Box < SimplePattern > } ,
Dictof { key : std ::boxed ::Box < SimplePattern > , value : std ::boxed ::Box < SimplePattern > } ,
Ref ( std ::boxed ::Box < Ref > )
}
2021-06-28 15:26:41 +00:00
#[ derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone) ]
2021-06-28 15:08:44 +00:00
pub struct Version ;
2021-06-28 14:35:45 +00:00
fn _parse_atom_kind_boolean ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < AtomKind , ( ) > { if value ! = & * LIT0 { return Err ( ( ) ) ; } let _tmp0 = ( ) ; Ok ( AtomKind ::Boolean ) }
fn _parse_atom_kind_float ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < AtomKind , ( ) > { if value ! = & * LIT1 { return Err ( ( ) ) ; } let _tmp0 = ( ) ; Ok ( AtomKind ::Float ) }
fn _parse_atom_kind_double ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < AtomKind , ( ) > { if value ! = & * LIT2 { return Err ( ( ) ) ; } let _tmp0 = ( ) ; Ok ( AtomKind ::Double ) }
fn _parse_atom_kind_signed_integer ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < AtomKind , ( ) > {
if value ! = & * LIT3 { return Err ( ( ) ) ; }
let _tmp0 = ( ) ;
Ok ( AtomKind ::SignedInteger )
}
fn _parse_atom_kind_string ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < AtomKind , ( ) > { if value ! = & * LIT4 { return Err ( ( ) ) ; } let _tmp0 = ( ) ; Ok ( AtomKind ::String ) }
fn _parse_atom_kind_byte_string ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < AtomKind , ( ) > {
if value ! = & * LIT5 { return Err ( ( ) ) ; }
let _tmp0 = ( ) ;
Ok ( AtomKind ::ByteString )
}
fn _parse_atom_kind_symbol ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < AtomKind , ( ) > { if value ! = & * LIT6 { return Err ( ( ) ) ; } let _tmp0 = ( ) ; Ok ( AtomKind ::Symbol ) }
impl std ::convert ::TryFrom < & preserves ::value ::IOValue > for AtomKind {
type Error = ( ) ;
fn try_from ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Self , Self ::Error > {
if let Ok ( r ) = _parse_atom_kind_boolean ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_atom_kind_float ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_atom_kind_double ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_atom_kind_signed_integer ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_atom_kind_string ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_atom_kind_byte_string ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_atom_kind_symbol ( value ) { return Ok ( r ) ; }
Err ( ( ) )
}
}
impl std ::convert ::TryFrom < & preserves ::value ::IOValue > for Binding {
type Error = ( ) ;
fn try_from ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Self , Self ::Error > {
let _tmp1 = value . value ( ) . to_record ( None ) . map_err ( | _ | ( ) ) ? ;
if _tmp1 . label ( ) ! = & * LIT7 { return Err ( ( ) ) ; }
let _tmp2 = ( ) ;
if _tmp1 . fields ( ) . len ( ) - 0 < 2 { return Err ( ( ) ) ; }
let _tmp5 = ( & _tmp1 . fields ( ) [ 0 ] ) . value ( ) . to_symbol ( ) . map_err ( | _ | ( ) ) ? ;
let _tmp7 = SimplePattern ::try_from ( ( & _tmp1 . fields ( ) [ 1 ] ) ) ? ;
2021-06-28 15:26:41 +00:00
Ok ( Binding { name : _tmp5 . clone ( ) , pattern : _tmp7 } )
2021-06-28 14:35:45 +00:00
}
}
impl std ::convert ::TryFrom < & preserves ::value ::IOValue > for Bundle {
type Error = ( ) ;
fn try_from ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Self , Self ::Error > {
let _tmp1 = value . value ( ) . to_record ( None ) . map_err ( | _ | ( ) ) ? ;
if _tmp1 . label ( ) ! = & * LIT8 { return Err ( ( ) ) ; }
let _tmp2 = ( ) ;
if _tmp1 . fields ( ) . len ( ) - 0 < 1 { return Err ( ( ) ) ; }
let _tmp5 = Modules ::try_from ( ( & _tmp1 . fields ( ) [ 0 ] ) ) ? ;
2021-06-28 15:26:41 +00:00
Ok ( Bundle { modules : _tmp5 } )
2021-06-28 14:35:45 +00:00
}
}
fn _parse_compound_pattern_rec ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < CompoundPattern , ( ) > {
let _tmp1 = value . value ( ) . to_record ( None ) . map_err ( | _ | ( ) ) ? ;
if _tmp1 . label ( ) ! = & * LIT9 { return Err ( ( ) ) ; }
let _tmp2 = ( ) ;
if _tmp1 . fields ( ) . len ( ) - 0 < 2 { return Err ( ( ) ) ; }
let _tmp5 = NamedPattern ::try_from ( ( & _tmp1 . fields ( ) [ 0 ] ) ) ? ;
let _tmp7 = NamedPattern ::try_from ( ( & _tmp1 . fields ( ) [ 1 ] ) ) ? ;
Ok ( CompoundPattern ::Rec { label : std ::boxed ::Box ::new ( _tmp5 ) , fields : std ::boxed ::Box ::new ( _tmp7 ) } )
}
fn _parse_compound_pattern_tuple ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < CompoundPattern , ( ) > {
let _tmp1 = value . value ( ) . to_record ( None ) . map_err ( | _ | ( ) ) ? ;
if _tmp1 . label ( ) ! = & * LIT10 { return Err ( ( ) ) ; }
let _tmp2 = ( ) ;
if _tmp1 . fields ( ) . len ( ) - 0 < 1 { return Err ( ( ) ) ; }
let _tmp6 = ( & _tmp1 . fields ( ) [ 0 ] ) . value ( ) . to_sequence ( ) . map_err ( | _ | ( ) ) ? ;
let mut _tmp5 = std ::vec ::Vec ::new ( ) ;
for _tmp7 in & _tmp6 [ 0 .. ] { let _tmp8 = NamedPattern ::try_from ( _tmp7 ) ? ; _tmp5 . push ( _tmp8 ) ; }
Ok ( CompoundPattern ::Tuple { patterns : _tmp5 } )
}
fn _parse_compound_pattern_tuple_prefix ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < CompoundPattern , ( ) > {
let _tmp1 = value . value ( ) . to_record ( None ) . map_err ( | _ | ( ) ) ? ;
if _tmp1 . label ( ) ! = & * LIT11 { return Err ( ( ) ) ; }
let _tmp2 = ( ) ;
if _tmp1 . fields ( ) . len ( ) - 0 < 2 { return Err ( ( ) ) ; }
let _tmp6 = ( & _tmp1 . fields ( ) [ 0 ] ) . value ( ) . to_sequence ( ) . map_err ( | _ | ( ) ) ? ;
let mut _tmp5 = std ::vec ::Vec ::new ( ) ;
for _tmp7 in & _tmp6 [ 0 .. ] { let _tmp8 = NamedPattern ::try_from ( _tmp7 ) ? ; _tmp5 . push ( _tmp8 ) ; }
let _tmp10 = NamedSimplePattern ::try_from ( ( & _tmp1 . fields ( ) [ 1 ] ) ) ? ;
Ok ( CompoundPattern ::TuplePrefix { fixed : _tmp5 , variable : std ::boxed ::Box ::new ( _tmp10 ) } )
}
fn _parse_compound_pattern_dict ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < CompoundPattern , ( ) > {
let _tmp1 = value . value ( ) . to_record ( None ) . map_err ( | _ | ( ) ) ? ;
if _tmp1 . label ( ) ! = & * LIT12 { return Err ( ( ) ) ; }
let _tmp2 = ( ) ;
if _tmp1 . fields ( ) . len ( ) - 0 < 1 { return Err ( ( ) ) ; }
let _tmp5 = DictionaryEntries ::try_from ( ( & _tmp1 . fields ( ) [ 0 ] ) ) ? ;
Ok ( CompoundPattern ::Dict { entries : std ::boxed ::Box ::new ( _tmp5 ) } )
}
impl std ::convert ::TryFrom < & preserves ::value ::IOValue > for CompoundPattern {
type Error = ( ) ;
fn try_from ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Self , Self ::Error > {
if let Ok ( r ) = _parse_compound_pattern_rec ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_compound_pattern_tuple ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_compound_pattern_tuple_prefix ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_compound_pattern_dict ( value ) { return Ok ( r ) ; }
Err ( ( ) )
}
}
fn _parse_definition_or ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Definition , ( ) > {
let _tmp1 = value . value ( ) . to_record ( None ) . map_err ( | _ | ( ) ) ? ;
if _tmp1 . label ( ) ! = & * LIT13 { return Err ( ( ) ) ; }
let _tmp2 = ( ) ;
if _tmp1 . fields ( ) . len ( ) - 0 < 1 { return Err ( ( ) ) ; }
let _tmp5 = ( & _tmp1 . fields ( ) [ 0 ] ) . value ( ) . to_sequence ( ) . map_err ( | _ | ( ) ) ? ;
if _tmp5 . len ( ) - 0 < 2 { return Err ( ( ) ) ; }
let _tmp7 = NamedAlternative ::try_from ( ( & _tmp5 [ 0 ] ) ) ? ;
let _tmp9 = NamedAlternative ::try_from ( ( & _tmp5 [ 1 ] ) ) ? ;
let mut _tmp11 = std ::vec ::Vec ::new ( ) ;
for _tmp12 in & _tmp5 [ 2 .. ] { let _tmp13 = NamedAlternative ::try_from ( _tmp12 ) ? ; _tmp11 . push ( _tmp13 ) ; }
Ok ( Definition ::Or {
pattern_0 : std ::boxed ::Box ::new ( _tmp7 ) ,
pattern_1 : std ::boxed ::Box ::new ( _tmp9 ) ,
pattern_n : _tmp11
} )
}
fn _parse_definition_and ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Definition , ( ) > {
let _tmp1 = value . value ( ) . to_record ( None ) . map_err ( | _ | ( ) ) ? ;
if _tmp1 . label ( ) ! = & * LIT14 { return Err ( ( ) ) ; }
let _tmp2 = ( ) ;
if _tmp1 . fields ( ) . len ( ) - 0 < 1 { return Err ( ( ) ) ; }
let _tmp5 = ( & _tmp1 . fields ( ) [ 0 ] ) . value ( ) . to_sequence ( ) . map_err ( | _ | ( ) ) ? ;
if _tmp5 . len ( ) - 0 < 2 { return Err ( ( ) ) ; }
let _tmp7 = NamedPattern ::try_from ( ( & _tmp5 [ 0 ] ) ) ? ;
let _tmp9 = NamedPattern ::try_from ( ( & _tmp5 [ 1 ] ) ) ? ;
let mut _tmp11 = std ::vec ::Vec ::new ( ) ;
for _tmp12 in & _tmp5 [ 2 .. ] { let _tmp13 = NamedPattern ::try_from ( _tmp12 ) ? ; _tmp11 . push ( _tmp13 ) ; }
Ok ( Definition ::And {
pattern_0 : std ::boxed ::Box ::new ( _tmp7 ) ,
pattern_1 : std ::boxed ::Box ::new ( _tmp9 ) ,
pattern_n : _tmp11
} )
}
fn _parse_definition_pattern ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Definition , ( ) > {
let _tmp0 = Pattern ::try_from ( value ) ? ;
Ok ( Definition ::Pattern ( std ::boxed ::Box ::new ( _tmp0 ) ) )
}
impl std ::convert ::TryFrom < & preserves ::value ::IOValue > for Definition {
type Error = ( ) ;
fn try_from ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Self , Self ::Error > {
if let Ok ( r ) = _parse_definition_or ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_definition_and ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_definition_pattern ( value ) { return Ok ( r ) ; }
Err ( ( ) )
}
}
impl std ::convert ::TryFrom < & preserves ::value ::IOValue > for Definitions {
type Error = ( ) ;
fn try_from ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Self , Self ::Error > {
let mut _tmp0 = preserves ::value ::Map ::new ( ) ;
for ( _tmp1 , _tmp2 ) in value . value ( ) . to_dictionary ( ) . map_err ( | _ | ( ) ) ? {
let _tmp3 = _tmp1 . value ( ) . to_symbol ( ) . map_err ( | _ | ( ) ) ? ;
let _tmp4 = Definition ::try_from ( _tmp2 ) ? ;
_tmp0 . insert ( _tmp3 . clone ( ) , _tmp4 ) ;
}
Ok ( Definitions ( _tmp0 ) )
}
}
impl std ::convert ::TryFrom < & preserves ::value ::IOValue > for DictionaryEntries {
type Error = ( ) ;
fn try_from ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Self , Self ::Error > {
let mut _tmp0 = preserves ::value ::Map ::new ( ) ;
for ( _tmp1 , _tmp2 ) in value . value ( ) . to_dictionary ( ) . map_err ( | _ | ( ) ) ? {
let _tmp3 = _tmp1 ;
let _tmp4 = NamedSimplePattern ::try_from ( _tmp2 ) ? ;
_tmp0 . insert ( _tmp3 . clone ( ) , _tmp4 ) ;
}
Ok ( DictionaryEntries ( _tmp0 ) )
}
}
fn _parse_embedded_type_name_ref ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < EmbeddedTypeName , ( ) > {
let _tmp0 = Ref ::try_from ( value ) ? ;
Ok ( EmbeddedTypeName ::Ref ( std ::boxed ::Box ::new ( _tmp0 ) ) )
}
fn _parse_embedded_type_name_false ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < EmbeddedTypeName , ( ) > {
if value ! = & * LIT15 { return Err ( ( ) ) ; }
let _tmp0 = ( ) ;
Ok ( EmbeddedTypeName ::False )
}
impl std ::convert ::TryFrom < & preserves ::value ::IOValue > for EmbeddedTypeName {
type Error = ( ) ;
fn try_from ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Self , Self ::Error > {
if let Ok ( r ) = _parse_embedded_type_name_ref ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_embedded_type_name_false ( value ) { return Ok ( r ) ; }
Err ( ( ) )
}
}
impl std ::convert ::TryFrom < & preserves ::value ::IOValue > for ModulePath {
type Error = ( ) ;
fn try_from ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Self , Self ::Error > {
let _tmp1 = value . value ( ) . to_sequence ( ) . map_err ( | _ | ( ) ) ? ;
let mut _tmp0 = std ::vec ::Vec ::new ( ) ;
for _tmp2 in & _tmp1 [ 0 .. ] {
let _tmp3 = _tmp2 . value ( ) . to_symbol ( ) . map_err ( | _ | ( ) ) ? ;
_tmp0 . push ( _tmp3 . clone ( ) ) ;
}
Ok ( ModulePath ( _tmp0 ) )
}
}
impl std ::convert ::TryFrom < & preserves ::value ::IOValue > for Modules {
type Error = ( ) ;
fn try_from ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Self , Self ::Error > {
let mut _tmp0 = preserves ::value ::Map ::new ( ) ;
for ( _tmp1 , _tmp2 ) in value . value ( ) . to_dictionary ( ) . map_err ( | _ | ( ) ) ? {
let _tmp3 = ModulePath ::try_from ( _tmp1 ) ? ;
let _tmp4 = Schema ::try_from ( _tmp2 ) ? ;
_tmp0 . insert ( _tmp3 , _tmp4 ) ;
}
Ok ( Modules ( _tmp0 ) )
}
}
impl std ::convert ::TryFrom < & preserves ::value ::IOValue > for NamedAlternative {
type Error = ( ) ;
fn try_from ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Self , Self ::Error > {
let _tmp1 = value . value ( ) . to_sequence ( ) . map_err ( | _ | ( ) ) ? ;
if _tmp1 . len ( ) - 0 < 2 { return Err ( ( ) ) ; }
let _tmp3 = ( & _tmp1 [ 0 ] ) . value ( ) . to_string ( ) . map_err ( | _ | ( ) ) ? ;
let _tmp5 = Pattern ::try_from ( ( & _tmp1 [ 1 ] ) ) ? ;
2021-06-28 15:26:41 +00:00
Ok ( NamedAlternative { variant_label : _tmp3 . clone ( ) , pattern : _tmp5 } )
2021-06-28 14:35:45 +00:00
}
}
fn _parse_named_pattern_named ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < NamedPattern , ( ) > {
let _tmp0 = Binding ::try_from ( value ) ? ;
Ok ( NamedPattern ::Named ( std ::boxed ::Box ::new ( _tmp0 ) ) )
}
fn _parse_named_pattern_anonymous ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < NamedPattern , ( ) > {
let _tmp0 = Pattern ::try_from ( value ) ? ;
Ok ( NamedPattern ::Anonymous ( std ::boxed ::Box ::new ( _tmp0 ) ) )
}
impl std ::convert ::TryFrom < & preserves ::value ::IOValue > for NamedPattern {
type Error = ( ) ;
fn try_from ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Self , Self ::Error > {
if let Ok ( r ) = _parse_named_pattern_named ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_named_pattern_anonymous ( value ) { return Ok ( r ) ; }
Err ( ( ) )
}
}
fn _parse_named_simple_pattern_named ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < NamedSimplePattern , ( ) > {
let _tmp0 = Binding ::try_from ( value ) ? ;
Ok ( NamedSimplePattern ::Named ( std ::boxed ::Box ::new ( _tmp0 ) ) )
}
fn _parse_named_simple_pattern_anonymous ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < NamedSimplePattern , ( ) > {
let _tmp0 = SimplePattern ::try_from ( value ) ? ;
Ok ( NamedSimplePattern ::Anonymous ( std ::boxed ::Box ::new ( _tmp0 ) ) )
}
impl std ::convert ::TryFrom < & preserves ::value ::IOValue > for NamedSimplePattern {
type Error = ( ) ;
fn try_from ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Self , Self ::Error > {
if let Ok ( r ) = _parse_named_simple_pattern_named ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_named_simple_pattern_anonymous ( value ) { return Ok ( r ) ; }
Err ( ( ) )
}
}
fn _parse_pattern_simple_pattern ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Pattern , ( ) > {
let _tmp0 = SimplePattern ::try_from ( value ) ? ;
Ok ( Pattern ::SimplePattern ( std ::boxed ::Box ::new ( _tmp0 ) ) )
}
fn _parse_pattern_compound_pattern ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Pattern , ( ) > {
let _tmp0 = CompoundPattern ::try_from ( value ) ? ;
Ok ( Pattern ::CompoundPattern ( std ::boxed ::Box ::new ( _tmp0 ) ) )
}
impl std ::convert ::TryFrom < & preserves ::value ::IOValue > for Pattern {
type Error = ( ) ;
fn try_from ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Self , Self ::Error > {
if let Ok ( r ) = _parse_pattern_simple_pattern ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_pattern_compound_pattern ( value ) { return Ok ( r ) ; }
Err ( ( ) )
}
}
impl std ::convert ::TryFrom < & preserves ::value ::IOValue > for Ref {
type Error = ( ) ;
fn try_from ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Self , Self ::Error > {
let _tmp1 = value . value ( ) . to_record ( None ) . map_err ( | _ | ( ) ) ? ;
if _tmp1 . label ( ) ! = & * LIT16 { return Err ( ( ) ) ; }
let _tmp2 = ( ) ;
if _tmp1 . fields ( ) . len ( ) - 0 < 2 { return Err ( ( ) ) ; }
let _tmp5 = ModulePath ::try_from ( ( & _tmp1 . fields ( ) [ 0 ] ) ) ? ;
let _tmp7 = ( & _tmp1 . fields ( ) [ 1 ] ) . value ( ) . to_symbol ( ) . map_err ( | _ | ( ) ) ? ;
2021-06-28 15:26:41 +00:00
Ok ( Ref { module : _tmp5 , name : _tmp7 . clone ( ) } )
2021-06-28 14:35:45 +00:00
}
}
impl std ::convert ::TryFrom < & preserves ::value ::IOValue > for Schema {
type Error = ( ) ;
fn try_from ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Self , Self ::Error > {
let _tmp1 = value . value ( ) . to_record ( None ) . map_err ( | _ | ( ) ) ? ;
if _tmp1 . label ( ) ! = & * LIT17 { return Err ( ( ) ) ; }
let _tmp2 = ( ) ;
if _tmp1 . fields ( ) . len ( ) - 0 < 1 { return Err ( ( ) ) ; }
let _tmp5 = ( & _tmp1 . fields ( ) [ 0 ] ) . value ( ) . to_dictionary ( ) . map_err ( | _ | ( ) ) ? ;
let _tmp6 = _tmp5 . get ( & * LIT18 ) . ok_or ( ( ) ) ? ;
let _tmp8 = Definitions ::try_from ( _tmp6 ) ? ;
let _tmp9 = _tmp5 . get ( & * LIT19 ) . ok_or ( ( ) ) ? ;
let _tmp11 = EmbeddedTypeName ::try_from ( _tmp9 ) ? ;
let _tmp12 = _tmp5 . get ( & * LIT20 ) . ok_or ( ( ) ) ? ;
let _tmp14 = Version ::try_from ( _tmp12 ) ? ;
2021-06-28 15:26:41 +00:00
Ok ( Schema { definitions : _tmp8 , embedded_type : _tmp11 , version : _tmp14 } )
2021-06-28 14:35:45 +00:00
}
}
fn _parse_simple_pattern_any ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < SimplePattern , ( ) > { if value ! = & * LIT21 { return Err ( ( ) ) ; } let _tmp0 = ( ) ; Ok ( SimplePattern ::Any ) }
fn _parse_simple_pattern_atom ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < SimplePattern , ( ) > {
let _tmp1 = value . value ( ) . to_record ( None ) . map_err ( | _ | ( ) ) ? ;
if _tmp1 . label ( ) ! = & * LIT22 { return Err ( ( ) ) ; }
let _tmp2 = ( ) ;
if _tmp1 . fields ( ) . len ( ) - 0 < 1 { return Err ( ( ) ) ; }
let _tmp5 = AtomKind ::try_from ( ( & _tmp1 . fields ( ) [ 0 ] ) ) ? ;
Ok ( SimplePattern ::Atom { atom_kind : std ::boxed ::Box ::new ( _tmp5 ) } )
}
fn _parse_simple_pattern_embedded ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < SimplePattern , ( ) > {
let _tmp1 = value . value ( ) . to_record ( None ) . map_err ( | _ | ( ) ) ? ;
if _tmp1 . label ( ) ! = & * LIT23 { return Err ( ( ) ) ; }
let _tmp2 = ( ) ;
if _tmp1 . fields ( ) . len ( ) - 0 < 1 { return Err ( ( ) ) ; }
let _tmp5 = SimplePattern ::try_from ( ( & _tmp1 . fields ( ) [ 0 ] ) ) ? ;
Ok ( SimplePattern ::Embedded { interface : std ::boxed ::Box ::new ( _tmp5 ) } )
}
fn _parse_simple_pattern_lit ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < SimplePattern , ( ) > {
let _tmp1 = value . value ( ) . to_record ( None ) . map_err ( | _ | ( ) ) ? ;
if _tmp1 . label ( ) ! = & * LIT24 { return Err ( ( ) ) ; }
let _tmp2 = ( ) ;
if _tmp1 . fields ( ) . len ( ) - 0 < 1 { return Err ( ( ) ) ; }
let _tmp5 = ( & _tmp1 . fields ( ) [ 0 ] ) ;
Ok ( SimplePattern ::Lit { value : _tmp5 . clone ( ) } )
}
fn _parse_simple_pattern_seqof ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < SimplePattern , ( ) > {
let _tmp1 = value . value ( ) . to_record ( None ) . map_err ( | _ | ( ) ) ? ;
if _tmp1 . label ( ) ! = & * LIT25 { return Err ( ( ) ) ; }
let _tmp2 = ( ) ;
if _tmp1 . fields ( ) . len ( ) - 0 < 1 { return Err ( ( ) ) ; }
let _tmp5 = SimplePattern ::try_from ( ( & _tmp1 . fields ( ) [ 0 ] ) ) ? ;
Ok ( SimplePattern ::Seqof { pattern : std ::boxed ::Box ::new ( _tmp5 ) } )
}
fn _parse_simple_pattern_setof ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < SimplePattern , ( ) > {
let _tmp1 = value . value ( ) . to_record ( None ) . map_err ( | _ | ( ) ) ? ;
if _tmp1 . label ( ) ! = & * LIT26 { return Err ( ( ) ) ; }
let _tmp2 = ( ) ;
if _tmp1 . fields ( ) . len ( ) - 0 < 1 { return Err ( ( ) ) ; }
let _tmp5 = SimplePattern ::try_from ( ( & _tmp1 . fields ( ) [ 0 ] ) ) ? ;
Ok ( SimplePattern ::Setof { pattern : std ::boxed ::Box ::new ( _tmp5 ) } )
}
fn _parse_simple_pattern_dictof ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < SimplePattern , ( ) > {
let _tmp1 = value . value ( ) . to_record ( None ) . map_err ( | _ | ( ) ) ? ;
if _tmp1 . label ( ) ! = & * LIT27 { return Err ( ( ) ) ; }
let _tmp2 = ( ) ;
if _tmp1 . fields ( ) . len ( ) - 0 < 2 { return Err ( ( ) ) ; }
let _tmp5 = SimplePattern ::try_from ( ( & _tmp1 . fields ( ) [ 0 ] ) ) ? ;
let _tmp7 = SimplePattern ::try_from ( ( & _tmp1 . fields ( ) [ 1 ] ) ) ? ;
Ok ( SimplePattern ::Dictof { key : std ::boxed ::Box ::new ( _tmp5 ) , value : std ::boxed ::Box ::new ( _tmp7 ) } )
}
fn _parse_simple_pattern_ref ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < SimplePattern , ( ) > {
let _tmp0 = Ref ::try_from ( value ) ? ;
Ok ( SimplePattern ::Ref ( std ::boxed ::Box ::new ( _tmp0 ) ) )
}
impl std ::convert ::TryFrom < & preserves ::value ::IOValue > for SimplePattern {
type Error = ( ) ;
fn try_from ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Self , Self ::Error > {
if let Ok ( r ) = _parse_simple_pattern_any ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_simple_pattern_atom ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_simple_pattern_embedded ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_simple_pattern_lit ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_simple_pattern_seqof ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_simple_pattern_setof ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_simple_pattern_dictof ( value ) { return Ok ( r ) ; }
if let Ok ( r ) = _parse_simple_pattern_ref ( value ) { return Ok ( r ) ; }
Err ( ( ) )
}
}
impl std ::convert ::TryFrom < & preserves ::value ::IOValue > for Version {
type Error = ( ) ;
fn try_from ( value : & preserves ::value ::IOValue ) -> std ::result ::Result < Self , Self ::Error > { if value ! = & * LIT28 { return Err ( ( ) ) ; } let _tmp0 = ( ) ; Ok ( Version ) }
}