preserves_schema/gen/
schema.rs

1#![allow(unused_parens)]
2#![allow(unused_imports)]
3#![cfg_attr(rustfmt, rustfmt_skip)]
4
5use std::convert::TryFrom;
6use crate::support as _support;
7use _support::Deserialize;
8use _support::Parse;
9use _support::Unparse;
10use _support::preserves;
11use preserves::value::Domain;
12use preserves::value::NestedValue;
13
14#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash)]
15pub enum AtomKind {
16    Boolean,
17    Double,
18    SignedInteger,
19    String,
20    ByteString,
21    Symbol
22}
23
24impl preserves::value::Domain for AtomKind {}
25
26fn read_atom_kind_boolean<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<AtomKind, _support::ParseError> {
27    match r.next_token(true)? {
28        preserves::value::Token::Atom(v) => match v.value() {
29            preserves::value::Value::Symbol(w) if w == "Boolean" => {}
30            _ => return Err(_support::ParseError::conformance_error("schema.AtomKind::Boolean"))?,
31        }
32        _ => return Err(_support::ParseError::conformance_error("schema.AtomKind::Boolean"))?,
33    }
34    let _tmp0 = ();
35    Ok(AtomKind::Boolean)
36}
37
38fn read_atom_kind_double<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<AtomKind, _support::ParseError> {
39    match r.next_token(true)? {
40        preserves::value::Token::Atom(v) => match v.value() {
41            preserves::value::Value::Symbol(w) if w == "Double" => {}
42            _ => return Err(_support::ParseError::conformance_error("schema.AtomKind::Double"))?,
43        }
44        _ => return Err(_support::ParseError::conformance_error("schema.AtomKind::Double"))?,
45    }
46    let _tmp0 = ();
47    Ok(AtomKind::Double)
48}
49
50fn read_atom_kind_signed_integer<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<AtomKind, _support::ParseError> {
51    match r.next_token(true)? {
52        preserves::value::Token::Atom(v) => match v.value() {
53            preserves::value::Value::Symbol(w) if w == "SignedInteger" => {}
54            _ => return Err(_support::ParseError::conformance_error("schema.AtomKind::SignedInteger"))?,
55        }
56        _ => return Err(_support::ParseError::conformance_error("schema.AtomKind::SignedInteger"))?,
57    }
58    let _tmp0 = ();
59    Ok(AtomKind::SignedInteger)
60}
61
62fn read_atom_kind_string<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<AtomKind, _support::ParseError> {
63    match r.next_token(true)? {
64        preserves::value::Token::Atom(v) => match v.value() {
65            preserves::value::Value::Symbol(w) if w == "String" => {}
66            _ => return Err(_support::ParseError::conformance_error("schema.AtomKind::String"))?,
67        }
68        _ => return Err(_support::ParseError::conformance_error("schema.AtomKind::String"))?,
69    }
70    let _tmp0 = ();
71    Ok(AtomKind::String)
72}
73
74fn read_atom_kind_byte_string<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<AtomKind, _support::ParseError> {
75    match r.next_token(true)? {
76        preserves::value::Token::Atom(v) => match v.value() {
77            preserves::value::Value::Symbol(w) if w == "ByteString" => {}
78            _ => return Err(_support::ParseError::conformance_error("schema.AtomKind::ByteString"))?,
79        }
80        _ => return Err(_support::ParseError::conformance_error("schema.AtomKind::ByteString"))?,
81    }
82    let _tmp0 = ();
83    Ok(AtomKind::ByteString)
84}
85
86fn read_atom_kind_symbol<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<AtomKind, _support::ParseError> {
87    match r.next_token(true)? {
88        preserves::value::Token::Atom(v) => match v.value() {
89            preserves::value::Value::Symbol(w) if w == "Symbol" => {}
90            _ => return Err(_support::ParseError::conformance_error("schema.AtomKind::Symbol"))?,
91        }
92        _ => return Err(_support::ParseError::conformance_error("schema.AtomKind::Symbol"))?,
93    }
94    let _tmp0 = ();
95    Ok(AtomKind::Symbol)
96}
97
98impl<_Value: preserves::value::NestedValue> _support::Deserialize<_Value> for AtomKind {
99    fn deserialize<'de, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Self, _support::ParseError> {
100        let _mark = r.mark()?;
101        match read_atom_kind_boolean(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
102        match read_atom_kind_double(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
103        match read_atom_kind_signed_integer(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
104        match read_atom_kind_string(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
105        match read_atom_kind_byte_string(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
106        match read_atom_kind_symbol(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
107        Err(_support::ParseError::conformance_error("schema.AtomKind"))
108    }
109}
110
111fn parse_atom_kind_boolean<
112    'a,
113    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
114    _Value: preserves::value::NestedValue + 'a
115>(_ctxt: _L, value: &_Value) -> std::result::Result<AtomKind, _support::ParseError> {
116    if value != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_0_BOOLEAN { return Err(_support::ParseError::conformance_error("schema.AtomKind::Boolean")); }
117    let _tmp0 = ();
118    Ok(AtomKind::Boolean)
119}
120
121fn parse_atom_kind_double<
122    'a,
123    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
124    _Value: preserves::value::NestedValue + 'a
125>(_ctxt: _L, value: &_Value) -> std::result::Result<AtomKind, _support::ParseError> {
126    if value != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_1_DOUBLE { return Err(_support::ParseError::conformance_error("schema.AtomKind::Double")); }
127    let _tmp0 = ();
128    Ok(AtomKind::Double)
129}
130
131fn parse_atom_kind_signed_integer<
132    'a,
133    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
134    _Value: preserves::value::NestedValue + 'a
135>(_ctxt: _L, value: &_Value) -> std::result::Result<AtomKind, _support::ParseError> {
136    if value != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_2_SIGNED_INTEGER { return Err(_support::ParseError::conformance_error("schema.AtomKind::SignedInteger")); }
137    let _tmp0 = ();
138    Ok(AtomKind::SignedInteger)
139}
140
141fn parse_atom_kind_string<
142    'a,
143    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
144    _Value: preserves::value::NestedValue + 'a
145>(_ctxt: _L, value: &_Value) -> std::result::Result<AtomKind, _support::ParseError> {
146    if value != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_3_STRING { return Err(_support::ParseError::conformance_error("schema.AtomKind::String")); }
147    let _tmp0 = ();
148    Ok(AtomKind::String)
149}
150
151fn parse_atom_kind_byte_string<
152    'a,
153    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
154    _Value: preserves::value::NestedValue + 'a
155>(_ctxt: _L, value: &_Value) -> std::result::Result<AtomKind, _support::ParseError> {
156    if value != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_4_BYTE_STRING { return Err(_support::ParseError::conformance_error("schema.AtomKind::ByteString")); }
157    let _tmp0 = ();
158    Ok(AtomKind::ByteString)
159}
160
161fn parse_atom_kind_symbol<
162    'a,
163    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
164    _Value: preserves::value::NestedValue + 'a
165>(_ctxt: _L, value: &_Value) -> std::result::Result<AtomKind, _support::ParseError> {
166    if value != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_5_SYMBOL { return Err(_support::ParseError::conformance_error("schema.AtomKind::Symbol")); }
167    let _tmp0 = ();
168    Ok(AtomKind::Symbol)
169}
170
171impl<
172    'a,
173    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
174    _Value: preserves::value::NestedValue + 'a
175> _support::Parse<_L, _Value> for AtomKind {
176    fn parse(_ctxt: _L, value: &_Value) -> std::result::Result<Self, _support::ParseError> {
177        if let Ok(r) = parse_atom_kind_boolean(_ctxt, value) { return Ok(r); }
178        if let Ok(r) = parse_atom_kind_double(_ctxt, value) { return Ok(r); }
179        if let Ok(r) = parse_atom_kind_signed_integer(_ctxt, value) { return Ok(r); }
180        if let Ok(r) = parse_atom_kind_string(_ctxt, value) { return Ok(r); }
181        if let Ok(r) = parse_atom_kind_byte_string(_ctxt, value) { return Ok(r); }
182        if let Ok(r) = parse_atom_kind_symbol(_ctxt, value) { return Ok(r); }
183        Err(_support::ParseError::conformance_error("schema.AtomKind"))
184    }
185}
186
187impl<
188    'a,
189    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
190    _Value: preserves::value::NestedValue + 'a
191> _support::Unparse<_L, _Value> for AtomKind {
192    fn unparse(&self, _ctxt: _L) -> _Value {
193        match self {
194            AtomKind::Boolean => (&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_0_BOOLEAN).clone(),
195            AtomKind::Double => (&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_1_DOUBLE).clone(),
196            AtomKind::SignedInteger => (
197                &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_2_SIGNED_INTEGER
198            ).clone(),
199            AtomKind::String => (&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_3_STRING).clone(),
200            AtomKind::ByteString => (&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_4_BYTE_STRING).clone(),
201            AtomKind::Symbol => (&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_5_SYMBOL).clone(),
202        }
203    }
204}
205
206#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash)]
207pub struct Binding<_Value: preserves::value::NestedValue = preserves::value::IOValue> {
208    pub name: std::string::String,
209    pub pattern: SimplePattern<_Value>
210}
211
212impl<_Value: preserves::value::NestedValue> preserves::value::Domain for Binding<_Value> {}
213
214impl<_Value: preserves::value::NestedValue> _support::Deserialize<_Value> for Binding<_Value> {
215    fn deserialize<'de, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Self, _support::ParseError> {
216        r.open_record(None)?;
217        let mut _tmp0 = _support::B::Type::default();
218        if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordLabel)? {return Err(_support::ParseError::conformance_error("schema.Binding"));}
219        match r.next_token(true)? {
220            preserves::value::Token::Atom(v) => match v.value() {
221                preserves::value::Value::Symbol(w) if w == "named" => {}
222                _ => return Err(_support::ParseError::conformance_error("schema.Binding"))?,
223            }
224            _ => return Err(_support::ParseError::conformance_error("schema.Binding"))?,
225        }
226        let _tmp1 = ();
227        if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {return Err(_support::ParseError::conformance_error("schema.Binding"));}
228        let _tmp2 = r.next_symbol()?.into_owned();
229        if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {return Err(_support::ParseError::conformance_error("schema.Binding"));}
230        let _tmp3 = SimplePattern::deserialize(r)?;
231        r.ensure_complete(_tmp0)?;
232        Ok(Binding {name: _tmp2, pattern: _tmp3})
233    }
234}
235
236impl<
237    'a,
238    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
239    _Value: preserves::value::NestedValue + 'a
240> _support::Parse<_L, _Value> for Binding<_Value> {
241    fn parse(_ctxt: _L, value: &_Value) -> std::result::Result<Self, _support::ParseError> {
242        let _tmp0 = value.value().to_record(None)?;
243        if _tmp0.label() != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_6_NAMED { return Err(_support::ParseError::conformance_error("schema.Binding")); }
244        let _tmp1 = ();
245        if _tmp0.fields().len() < 2 { return Err(_support::ParseError::conformance_error("schema.Binding")); }
246        let _tmp2 = (&_tmp0.fields()[0]).value().to_symbol()?;
247        let _tmp3 = SimplePattern::parse(_ctxt, (&_tmp0.fields()[1]))?;
248        Ok(Binding {name: _tmp2.clone(), pattern: _tmp3})
249    }
250}
251
252impl<
253    'a,
254    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
255    _Value: preserves::value::NestedValue + 'a
256> _support::Unparse<_L, _Value> for Binding<_Value> {
257    fn unparse(&self, _ctxt: _L) -> _Value {
258        let Binding {name: _tmp0, pattern: _tmp1} = self;
259        {
260            let mut _tmp2 = preserves::value::Record(vec![(&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_6_NAMED).clone()]);
261            _tmp2.fields_vec_mut().push(preserves::value::Value::symbol(_tmp0).wrap());
262            _tmp2.fields_vec_mut().push(_tmp1.unparse(_ctxt));
263            _tmp2.finish().wrap()
264        }
265    }
266}
267
268#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash)]
269pub struct Bundle<_Value: preserves::value::NestedValue = preserves::value::IOValue> {
270    pub modules: Modules<_Value>
271}
272
273impl<_Value: preserves::value::NestedValue> preserves::value::Domain for Bundle<_Value> {}
274
275impl<_Value: preserves::value::NestedValue> _support::Deserialize<_Value> for Bundle<_Value> {
276    fn deserialize<'de, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Self, _support::ParseError> {
277        r.open_record(None)?;
278        let mut _tmp0 = _support::B::Type::default();
279        if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordLabel)? {return Err(_support::ParseError::conformance_error("schema.Bundle"));}
280        match r.next_token(true)? {
281            preserves::value::Token::Atom(v) => match v.value() {
282                preserves::value::Value::Symbol(w) if w == "bundle" => {}
283                _ => return Err(_support::ParseError::conformance_error("schema.Bundle"))?,
284            }
285            _ => return Err(_support::ParseError::conformance_error("schema.Bundle"))?,
286        }
287        let _tmp1 = ();
288        if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {return Err(_support::ParseError::conformance_error("schema.Bundle"));}
289        let _tmp2 = Modules::deserialize(r)?;
290        r.ensure_complete(_tmp0)?;
291        Ok(Bundle {modules: _tmp2})
292    }
293}
294
295impl<
296    'a,
297    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
298    _Value: preserves::value::NestedValue + 'a
299> _support::Parse<_L, _Value> for Bundle<_Value> {
300    fn parse(_ctxt: _L, value: &_Value) -> std::result::Result<Self, _support::ParseError> {
301        let _tmp0 = value.value().to_record(None)?;
302        if _tmp0.label() != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_7_BUNDLE { return Err(_support::ParseError::conformance_error("schema.Bundle")); }
303        let _tmp1 = ();
304        if _tmp0.fields().len() < 1 { return Err(_support::ParseError::conformance_error("schema.Bundle")); }
305        let _tmp2 = Modules::parse(_ctxt, (&_tmp0.fields()[0]))?;
306        Ok(Bundle {modules: _tmp2})
307    }
308}
309
310impl<
311    'a,
312    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
313    _Value: preserves::value::NestedValue + 'a
314> _support::Unparse<_L, _Value> for Bundle<_Value> {
315    fn unparse(&self, _ctxt: _L) -> _Value {
316        let Bundle {modules: _tmp0} = self;
317        {
318            let mut _tmp1 = preserves::value::Record(vec![(&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_7_BUNDLE).clone()]);
319            _tmp1.fields_vec_mut().push(_tmp0.unparse(_ctxt));
320            _tmp1.finish().wrap()
321        }
322    }
323}
324
325#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash)]
326pub enum CompoundPattern<_Value: preserves::value::NestedValue = preserves::value::IOValue> {
327    Rec {
328        label: std::boxed::Box<NamedPattern<_Value>>,
329        fields: std::boxed::Box<NamedPattern<_Value>>
330    },
331    Tuple {
332        patterns: std::vec::Vec<NamedPattern<_Value>>
333    },
334    TuplePrefix {
335        fixed: std::vec::Vec<NamedPattern<_Value>>,
336        variable: std::boxed::Box<NamedSimplePattern<_Value>>
337    },
338    Dict {
339        entries: std::boxed::Box<DictionaryEntries<_Value>>
340    }
341}
342
343impl<_Value: preserves::value::NestedValue> preserves::value::Domain for CompoundPattern<_Value> {}
344
345fn read_compound_pattern_rec<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<CompoundPattern<_Value>, _support::ParseError> {
346    r.open_record(None)?;
347    let mut _tmp0 = _support::B::Type::default();
348    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordLabel)? {
349        return Err(_support::ParseError::conformance_error("schema.CompoundPattern::rec"));
350    }
351    match r.next_token(true)? {
352        preserves::value::Token::Atom(v) => match v.value() {
353            preserves::value::Value::Symbol(w) if w == "rec" => {}
354            _ => return Err(_support::ParseError::conformance_error("schema.CompoundPattern::rec"))?,
355        }
356        _ => return Err(_support::ParseError::conformance_error("schema.CompoundPattern::rec"))?,
357    }
358    let _tmp1 = ();
359    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {
360        return Err(_support::ParseError::conformance_error("schema.CompoundPattern::rec"));
361    }
362    let _tmp2 = NamedPattern::deserialize(r)?;
363    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {
364        return Err(_support::ParseError::conformance_error("schema.CompoundPattern::rec"));
365    }
366    let _tmp3 = NamedPattern::deserialize(r)?;
367    r.ensure_complete(_tmp0)?;
368    Ok(CompoundPattern::Rec {label: std::boxed::Box::new(_tmp2), fields: std::boxed::Box::new(_tmp3)})
369}
370
371fn read_compound_pattern_tuple<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<CompoundPattern<_Value>, _support::ParseError> {
372    r.open_record(None)?;
373    let mut _tmp0 = _support::B::Type::default();
374    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordLabel)? {
375        return Err(_support::ParseError::conformance_error("schema.CompoundPattern::tuple"));
376    }
377    match r.next_token(true)? {
378        preserves::value::Token::Atom(v) => match v.value() {
379            preserves::value::Value::Symbol(w) if w == "tuple" => {}
380            _ => return Err(_support::ParseError::conformance_error("schema.CompoundPattern::tuple"))?,
381        }
382        _ => return Err(_support::ParseError::conformance_error("schema.CompoundPattern::tuple"))?,
383    }
384    let _tmp1 = ();
385    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {
386        return Err(_support::ParseError::conformance_error("schema.CompoundPattern::tuple"));
387    }
388    r.open_sequence()?;
389    let mut _tmp4 = _support::B::Type::default();
390    let mut _tmp3 = std::vec::Vec::new();
391    while !r.close_compound(&mut _tmp4)? {
392        if !r.expect_boundary(&mut _tmp4, &_support::B::Item::SequenceValue)? {
393            return Err(_support::ParseError::conformance_error("schema.CompoundPattern::tuple"));
394        }
395        let _tmp5 = NamedPattern::deserialize(r)?;
396        _tmp3.push(_tmp5);
397    }
398    let _tmp2 = _tmp3;
399    r.ensure_complete(_tmp0)?;
400    Ok(CompoundPattern::Tuple {patterns: _tmp2})
401}
402
403fn read_compound_pattern_tuple_prefix<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<CompoundPattern<_Value>, _support::ParseError> {
404    r.open_record(None)?;
405    let mut _tmp0 = _support::B::Type::default();
406    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordLabel)? {
407        return Err(_support::ParseError::conformance_error("schema.CompoundPattern::tuplePrefix"));
408    }
409    match r.next_token(true)? {
410        preserves::value::Token::Atom(v) => match v.value() {
411            preserves::value::Value::Symbol(w) if w == "tuplePrefix" => {}
412            _ => return Err(_support::ParseError::conformance_error("schema.CompoundPattern::tuplePrefix"))?,
413        }
414        _ => return Err(_support::ParseError::conformance_error("schema.CompoundPattern::tuplePrefix"))?,
415    }
416    let _tmp1 = ();
417    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {
418        return Err(_support::ParseError::conformance_error("schema.CompoundPattern::tuplePrefix"));
419    }
420    r.open_sequence()?;
421    let mut _tmp4 = _support::B::Type::default();
422    let mut _tmp3 = std::vec::Vec::new();
423    while !r.close_compound(&mut _tmp4)? {
424        if !r.expect_boundary(&mut _tmp4, &_support::B::Item::SequenceValue)? {
425            return Err(_support::ParseError::conformance_error("schema.CompoundPattern::tuplePrefix"));
426        }
427        let _tmp5 = NamedPattern::deserialize(r)?;
428        _tmp3.push(_tmp5);
429    }
430    let _tmp2 = _tmp3;
431    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {
432        return Err(_support::ParseError::conformance_error("schema.CompoundPattern::tuplePrefix"));
433    }
434    let _tmp6 = NamedSimplePattern::deserialize(r)?;
435    r.ensure_complete(_tmp0)?;
436    Ok(CompoundPattern::TuplePrefix {fixed: _tmp2, variable: std::boxed::Box::new(_tmp6)})
437}
438
439fn read_compound_pattern_dict<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<CompoundPattern<_Value>, _support::ParseError> {
440    r.open_record(None)?;
441    let mut _tmp0 = _support::B::Type::default();
442    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordLabel)? {
443        return Err(_support::ParseError::conformance_error("schema.CompoundPattern::dict"));
444    }
445    match r.next_token(true)? {
446        preserves::value::Token::Atom(v) => match v.value() {
447            preserves::value::Value::Symbol(w) if w == "dict" => {}
448            _ => return Err(_support::ParseError::conformance_error("schema.CompoundPattern::dict"))?,
449        }
450        _ => return Err(_support::ParseError::conformance_error("schema.CompoundPattern::dict"))?,
451    }
452    let _tmp1 = ();
453    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {
454        return Err(_support::ParseError::conformance_error("schema.CompoundPattern::dict"));
455    }
456    let _tmp2 = DictionaryEntries::deserialize(r)?;
457    r.ensure_complete(_tmp0)?;
458    Ok(CompoundPattern::Dict {entries: std::boxed::Box::new(_tmp2)})
459}
460
461impl<_Value: preserves::value::NestedValue> _support::Deserialize<_Value> for CompoundPattern<_Value> {
462    fn deserialize<'de, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Self, _support::ParseError> {
463        let _mark = r.mark()?;
464        match read_compound_pattern_rec(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
465        match read_compound_pattern_tuple(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
466        match read_compound_pattern_tuple_prefix(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
467        match read_compound_pattern_dict(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
468        Err(_support::ParseError::conformance_error("schema.CompoundPattern"))
469    }
470}
471
472fn parse_compound_pattern_rec<
473    'a,
474    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
475    _Value: preserves::value::NestedValue + 'a
476>(_ctxt: _L, value: &_Value) -> std::result::Result<CompoundPattern<_Value>, _support::ParseError> {
477    let _tmp0 = value.value().to_record(None)?;
478    if _tmp0.label() != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_8_REC { return Err(_support::ParseError::conformance_error("schema.CompoundPattern::rec")); }
479    let _tmp1 = ();
480    if _tmp0.fields().len() < 2 { return Err(_support::ParseError::conformance_error("schema.CompoundPattern::rec")); }
481    let _tmp2 = NamedPattern::parse(_ctxt, (&_tmp0.fields()[0]))?;
482    let _tmp3 = NamedPattern::parse(_ctxt, (&_tmp0.fields()[1]))?;
483    Ok(CompoundPattern::Rec {label: std::boxed::Box::new(_tmp2), fields: std::boxed::Box::new(_tmp3)})
484}
485
486fn parse_compound_pattern_tuple<
487    'a,
488    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
489    _Value: preserves::value::NestedValue + 'a
490>(_ctxt: _L, value: &_Value) -> std::result::Result<CompoundPattern<_Value>, _support::ParseError> {
491    let _tmp0 = value.value().to_record(None)?;
492    if _tmp0.label() != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_9_TUPLE { return Err(_support::ParseError::conformance_error("schema.CompoundPattern::tuple")); }
493    let _tmp1 = ();
494    if _tmp0.fields().len() < 1 { return Err(_support::ParseError::conformance_error("schema.CompoundPattern::tuple")); }
495    let _tmp3 = (&_tmp0.fields()[0]).value().to_sequence()?;
496    let mut _tmp2 = std::vec::Vec::new();
497    for _tmp4 in &_tmp3[0..] {
498        let _tmp5 = NamedPattern::parse(_ctxt, _tmp4)?;
499        _tmp2.push(_tmp5);
500    }
501    Ok(CompoundPattern::Tuple {patterns: _tmp2})
502}
503
504fn parse_compound_pattern_tuple_prefix<
505    'a,
506    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
507    _Value: preserves::value::NestedValue + 'a
508>(_ctxt: _L, value: &_Value) -> std::result::Result<CompoundPattern<_Value>, _support::ParseError> {
509    let _tmp0 = value.value().to_record(None)?;
510    if _tmp0.label() != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_10_TUPLE_PREFIX { return Err(_support::ParseError::conformance_error("schema.CompoundPattern::tuplePrefix")); }
511    let _tmp1 = ();
512    if _tmp0.fields().len() < 2 { return Err(_support::ParseError::conformance_error("schema.CompoundPattern::tuplePrefix")); }
513    let _tmp3 = (&_tmp0.fields()[0]).value().to_sequence()?;
514    let mut _tmp2 = std::vec::Vec::new();
515    for _tmp4 in &_tmp3[0..] {
516        let _tmp5 = NamedPattern::parse(_ctxt, _tmp4)?;
517        _tmp2.push(_tmp5);
518    }
519    let _tmp6 = NamedSimplePattern::parse(_ctxt, (&_tmp0.fields()[1]))?;
520    Ok(CompoundPattern::TuplePrefix {fixed: _tmp2, variable: std::boxed::Box::new(_tmp6)})
521}
522
523fn parse_compound_pattern_dict<
524    'a,
525    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
526    _Value: preserves::value::NestedValue + 'a
527>(_ctxt: _L, value: &_Value) -> std::result::Result<CompoundPattern<_Value>, _support::ParseError> {
528    let _tmp0 = value.value().to_record(None)?;
529    if _tmp0.label() != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_11_DICT { return Err(_support::ParseError::conformance_error("schema.CompoundPattern::dict")); }
530    let _tmp1 = ();
531    if _tmp0.fields().len() < 1 { return Err(_support::ParseError::conformance_error("schema.CompoundPattern::dict")); }
532    let _tmp2 = DictionaryEntries::parse(_ctxt, (&_tmp0.fields()[0]))?;
533    Ok(CompoundPattern::Dict {entries: std::boxed::Box::new(_tmp2)})
534}
535
536impl<
537    'a,
538    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
539    _Value: preserves::value::NestedValue + 'a
540> _support::Parse<_L, _Value> for CompoundPattern<_Value> {
541    fn parse(_ctxt: _L, value: &_Value) -> std::result::Result<Self, _support::ParseError> {
542        if let Ok(r) = parse_compound_pattern_rec(_ctxt, value) { return Ok(r); }
543        if let Ok(r) = parse_compound_pattern_tuple(_ctxt, value) { return Ok(r); }
544        if let Ok(r) = parse_compound_pattern_tuple_prefix(_ctxt, value) { return Ok(r); }
545        if let Ok(r) = parse_compound_pattern_dict(_ctxt, value) { return Ok(r); }
546        Err(_support::ParseError::conformance_error("schema.CompoundPattern"))
547    }
548}
549
550impl<
551    'a,
552    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
553    _Value: preserves::value::NestedValue + 'a
554> _support::Unparse<_L, _Value> for CompoundPattern<_Value> {
555    fn unparse(&self, _ctxt: _L) -> _Value {
556        match self {
557            CompoundPattern::Rec {label: _tmp0, fields: _tmp1} => {
558                let mut _tmp2 = preserves::value::Record(vec![(&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_8_REC).clone()]);
559                _tmp2.fields_vec_mut().push(_tmp0.as_ref().unparse(_ctxt));
560                _tmp2.fields_vec_mut().push(_tmp1.as_ref().unparse(_ctxt));
561                _tmp2.finish().wrap()
562            },
563            CompoundPattern::Tuple {patterns: _tmp0} => {
564                let mut _tmp1 = preserves::value::Record(vec![(&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_9_TUPLE).clone()]);
565                _tmp1.fields_vec_mut().push(
566                    {
567                        let mut _tmp2 = std::vec::Vec::new();
568                        for _tmp3 in _tmp0 {
569                            _tmp2.push(_tmp3.unparse(_ctxt));
570                        }
571                        preserves::value::Value::Sequence(_tmp2).wrap()
572                    }
573                );
574                _tmp1.finish().wrap()
575            },
576            CompoundPattern::TuplePrefix {fixed: _tmp0, variable: _tmp1} => {
577                let mut _tmp2 = preserves::value::Record(vec![(
578                    &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_10_TUPLE_PREFIX
579                ).clone()]);
580                _tmp2.fields_vec_mut().push(
581                    {
582                        let mut _tmp3 = std::vec::Vec::new();
583                        for _tmp4 in _tmp0 {
584                            _tmp3.push(_tmp4.unparse(_ctxt));
585                        }
586                        preserves::value::Value::Sequence(_tmp3).wrap()
587                    }
588                );
589                _tmp2.fields_vec_mut().push(_tmp1.as_ref().unparse(_ctxt));
590                _tmp2.finish().wrap()
591            },
592            CompoundPattern::Dict {entries: _tmp0} => {
593                let mut _tmp1 = preserves::value::Record(vec![(&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_11_DICT).clone()]);
594                _tmp1.fields_vec_mut().push(_tmp0.as_ref().unparse(_ctxt));
595                _tmp1.finish().wrap()
596            },
597        }
598    }
599}
600
601#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash)]
602pub enum Definition<_Value: preserves::value::NestedValue = preserves::value::IOValue> {
603    Or {
604        pattern_0: std::boxed::Box<NamedAlternative<_Value>>,
605        pattern_1: std::boxed::Box<NamedAlternative<_Value>>,
606        pattern_n: std::vec::Vec<NamedAlternative<_Value>>
607    },
608    And {
609        pattern_0: std::boxed::Box<NamedPattern<_Value>>,
610        pattern_1: std::boxed::Box<NamedPattern<_Value>>,
611        pattern_n: std::vec::Vec<NamedPattern<_Value>>
612    },
613    Pattern(std::boxed::Box<Pattern<_Value>>)
614}
615
616impl<_Value: preserves::value::NestedValue> preserves::value::Domain for Definition<_Value> {}
617
618fn read_definition_or<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Definition<_Value>, _support::ParseError> {
619    r.open_record(None)?;
620    let mut _tmp0 = _support::B::Type::default();
621    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordLabel)? {return Err(_support::ParseError::conformance_error("schema.Definition::or"));}
622    match r.next_token(true)? {
623        preserves::value::Token::Atom(v) => match v.value() {
624            preserves::value::Value::Symbol(w) if w == "or" => {}
625            _ => return Err(_support::ParseError::conformance_error("schema.Definition::or"))?,
626        }
627        _ => return Err(_support::ParseError::conformance_error("schema.Definition::or"))?,
628    }
629    let _tmp1 = ();
630    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {return Err(_support::ParseError::conformance_error("schema.Definition::or"));}
631    r.open_sequence()?;
632    let mut _tmp2 = _support::B::Type::default();
633    if !r.expect_boundary(&mut _tmp2, &_support::B::Item::SequenceValue)? {return Err(_support::ParseError::conformance_error("schema.Definition::or"));}
634    let _tmp3 = NamedAlternative::deserialize(r)?;
635    if !r.expect_boundary(&mut _tmp2, &_support::B::Item::SequenceValue)? {return Err(_support::ParseError::conformance_error("schema.Definition::or"));}
636    let _tmp4 = NamedAlternative::deserialize(r)?;
637    let mut _tmp6 = std::vec::Vec::new();
638    while !r.close_compound(&mut _tmp2)? {
639        if !r.expect_boundary(&mut _tmp2, &_support::B::Item::SequenceValue)? {return Err(_support::ParseError::conformance_error("schema.Definition::or"));}
640        let _tmp7 = NamedAlternative::deserialize(r)?;
641        _tmp6.push(_tmp7);
642    }
643    let _tmp5 = _tmp6;
644    r.ensure_complete(_tmp0)?;
645    Ok(Definition::Or {
646        pattern_0: std::boxed::Box::new(_tmp3),
647        pattern_1: std::boxed::Box::new(_tmp4),
648        pattern_n: _tmp5
649    })
650}
651
652fn read_definition_and<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Definition<_Value>, _support::ParseError> {
653    r.open_record(None)?;
654    let mut _tmp0 = _support::B::Type::default();
655    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordLabel)? {return Err(_support::ParseError::conformance_error("schema.Definition::and"));}
656    match r.next_token(true)? {
657        preserves::value::Token::Atom(v) => match v.value() {
658            preserves::value::Value::Symbol(w) if w == "and" => {}
659            _ => return Err(_support::ParseError::conformance_error("schema.Definition::and"))?,
660        }
661        _ => return Err(_support::ParseError::conformance_error("schema.Definition::and"))?,
662    }
663    let _tmp1 = ();
664    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {return Err(_support::ParseError::conformance_error("schema.Definition::and"));}
665    r.open_sequence()?;
666    let mut _tmp2 = _support::B::Type::default();
667    if !r.expect_boundary(&mut _tmp2, &_support::B::Item::SequenceValue)? {return Err(_support::ParseError::conformance_error("schema.Definition::and"));}
668    let _tmp3 = NamedPattern::deserialize(r)?;
669    if !r.expect_boundary(&mut _tmp2, &_support::B::Item::SequenceValue)? {return Err(_support::ParseError::conformance_error("schema.Definition::and"));}
670    let _tmp4 = NamedPattern::deserialize(r)?;
671    let mut _tmp6 = std::vec::Vec::new();
672    while !r.close_compound(&mut _tmp2)? {
673        if !r.expect_boundary(&mut _tmp2, &_support::B::Item::SequenceValue)? {return Err(_support::ParseError::conformance_error("schema.Definition::and"));}
674        let _tmp7 = NamedPattern::deserialize(r)?;
675        _tmp6.push(_tmp7);
676    }
677    let _tmp5 = _tmp6;
678    r.ensure_complete(_tmp0)?;
679    Ok(Definition::And {
680        pattern_0: std::boxed::Box::new(_tmp3),
681        pattern_1: std::boxed::Box::new(_tmp4),
682        pattern_n: _tmp5
683    })
684}
685
686fn read_definition_pattern<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Definition<_Value>, _support::ParseError> {
687    let _tmp0 = Pattern::deserialize(r)?;
688    Ok(Definition::Pattern(std::boxed::Box::new(_tmp0)))
689}
690
691impl<_Value: preserves::value::NestedValue> _support::Deserialize<_Value> for Definition<_Value> {
692    fn deserialize<'de, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Self, _support::ParseError> {
693        let _mark = r.mark()?;
694        match read_definition_or(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
695        match read_definition_and(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
696        match read_definition_pattern(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
697        Err(_support::ParseError::conformance_error("schema.Definition"))
698    }
699}
700
701fn parse_definition_or<
702    'a,
703    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
704    _Value: preserves::value::NestedValue + 'a
705>(_ctxt: _L, value: &_Value) -> std::result::Result<Definition<_Value>, _support::ParseError> {
706    let _tmp0 = value.value().to_record(None)?;
707    if _tmp0.label() != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_12_OR { return Err(_support::ParseError::conformance_error("schema.Definition::or")); }
708    let _tmp1 = ();
709    if _tmp0.fields().len() < 1 { return Err(_support::ParseError::conformance_error("schema.Definition::or")); }
710    let _tmp2 = (&_tmp0.fields()[0]).value().to_sequence()?;
711    if _tmp2.len() < 2 { return Err(_support::ParseError::conformance_error("schema.Definition::or")); }
712    let _tmp3 = NamedAlternative::parse(_ctxt, (&_tmp2[0]))?;
713    let _tmp4 = NamedAlternative::parse(_ctxt, (&_tmp2[1]))?;
714    let mut _tmp5 = std::vec::Vec::new();
715    for _tmp6 in &_tmp2[2..] {
716        let _tmp7 = NamedAlternative::parse(_ctxt, _tmp6)?;
717        _tmp5.push(_tmp7);
718    }
719    Ok(Definition::Or {
720        pattern_0: std::boxed::Box::new(_tmp3),
721        pattern_1: std::boxed::Box::new(_tmp4),
722        pattern_n: _tmp5
723    })
724}
725
726fn parse_definition_and<
727    'a,
728    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
729    _Value: preserves::value::NestedValue + 'a
730>(_ctxt: _L, value: &_Value) -> std::result::Result<Definition<_Value>, _support::ParseError> {
731    let _tmp0 = value.value().to_record(None)?;
732    if _tmp0.label() != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_13_AND { return Err(_support::ParseError::conformance_error("schema.Definition::and")); }
733    let _tmp1 = ();
734    if _tmp0.fields().len() < 1 { return Err(_support::ParseError::conformance_error("schema.Definition::and")); }
735    let _tmp2 = (&_tmp0.fields()[0]).value().to_sequence()?;
736    if _tmp2.len() < 2 { return Err(_support::ParseError::conformance_error("schema.Definition::and")); }
737    let _tmp3 = NamedPattern::parse(_ctxt, (&_tmp2[0]))?;
738    let _tmp4 = NamedPattern::parse(_ctxt, (&_tmp2[1]))?;
739    let mut _tmp5 = std::vec::Vec::new();
740    for _tmp6 in &_tmp2[2..] {
741        let _tmp7 = NamedPattern::parse(_ctxt, _tmp6)?;
742        _tmp5.push(_tmp7);
743    }
744    Ok(Definition::And {
745        pattern_0: std::boxed::Box::new(_tmp3),
746        pattern_1: std::boxed::Box::new(_tmp4),
747        pattern_n: _tmp5
748    })
749}
750
751fn parse_definition_pattern<
752    'a,
753    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
754    _Value: preserves::value::NestedValue + 'a
755>(_ctxt: _L, value: &_Value) -> std::result::Result<Definition<_Value>, _support::ParseError> {
756    let _tmp0 = Pattern::parse(_ctxt, value)?;
757    Ok(Definition::Pattern(std::boxed::Box::new(_tmp0)))
758}
759
760impl<
761    'a,
762    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
763    _Value: preserves::value::NestedValue + 'a
764> _support::Parse<_L, _Value> for Definition<_Value> {
765    fn parse(_ctxt: _L, value: &_Value) -> std::result::Result<Self, _support::ParseError> {
766        if let Ok(r) = parse_definition_or(_ctxt, value) { return Ok(r); }
767        if let Ok(r) = parse_definition_and(_ctxt, value) { return Ok(r); }
768        if let Ok(r) = parse_definition_pattern(_ctxt, value) { return Ok(r); }
769        Err(_support::ParseError::conformance_error("schema.Definition"))
770    }
771}
772
773impl<
774    'a,
775    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
776    _Value: preserves::value::NestedValue + 'a
777> _support::Unparse<_L, _Value> for Definition<_Value> {
778    fn unparse(&self, _ctxt: _L) -> _Value {
779        match self {
780            Definition::Or {pattern_0: _tmp0, pattern_1: _tmp1, pattern_n: _tmp2} => {
781                let mut _tmp3 = preserves::value::Record(vec![(&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_12_OR).clone()]);
782                _tmp3.fields_vec_mut().push(
783                    {
784                        let mut _tmp4 = std::vec::Vec::new();
785                        _tmp4.push(_tmp0.as_ref().unparse(_ctxt));
786                        _tmp4.push(_tmp1.as_ref().unparse(_ctxt));
787                        for _tmp5 in _tmp2 {
788                            _tmp4.push(_tmp5.unparse(_ctxt));
789                        }
790                        preserves::value::Value::Sequence(_tmp4).wrap()
791                    }
792                );
793                _tmp3.finish().wrap()
794            },
795            Definition::And {pattern_0: _tmp0, pattern_1: _tmp1, pattern_n: _tmp2} => {
796                let mut _tmp3 = preserves::value::Record(vec![(&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_13_AND).clone()]);
797                _tmp3.fields_vec_mut().push(
798                    {
799                        let mut _tmp4 = std::vec::Vec::new();
800                        _tmp4.push(_tmp0.as_ref().unparse(_ctxt));
801                        _tmp4.push(_tmp1.as_ref().unparse(_ctxt));
802                        for _tmp5 in _tmp2 {
803                            _tmp4.push(_tmp5.unparse(_ctxt));
804                        }
805                        preserves::value::Value::Sequence(_tmp4).wrap()
806                    }
807                );
808                _tmp3.finish().wrap()
809            },
810            Definition::Pattern(_tmp0) => _tmp0.as_ref().unparse(_ctxt),
811        }
812    }
813}
814
815#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash)]
816pub struct Definitions<_Value: preserves::value::NestedValue = preserves::value::IOValue>(pub preserves::value::Map<std::string::String, Definition<_Value>>);
817
818impl<_Value: preserves::value::NestedValue> preserves::value::Domain for Definitions<_Value> {}
819
820impl<_Value: preserves::value::NestedValue> _support::Deserialize<_Value> for Definitions<_Value> {
821    fn deserialize<'de, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Self, _support::ParseError> {
822        r.open_dictionary()?;
823        let mut _tmp2 = _support::B::Type::default();
824        let mut _tmp1 = preserves::value::Map::new();
825        while !r.close_compound(&mut _tmp2)? {
826            if !r.expect_boundary(&mut _tmp2, &_support::B::Item::DictionaryKey)? {return Err(_support::ParseError::conformance_error("schema.Definitions"));}
827            let _tmp3 = r.next_symbol()?.into_owned();
828            if !r.expect_boundary(&mut _tmp2, &_support::B::Item::DictionaryValue)? {return Err(_support::ParseError::conformance_error("schema.Definitions"));}
829            let _tmp4 = Definition::deserialize(r)?;
830            _tmp1.insert(_tmp3, _tmp4);
831        }
832        let _tmp0 = _tmp1;
833        Ok(Definitions(_tmp0))
834    }
835}
836
837impl<
838    'a,
839    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
840    _Value: preserves::value::NestedValue + 'a
841> _support::Parse<_L, _Value> for Definitions<_Value> {
842    fn parse(_ctxt: _L, value: &_Value) -> std::result::Result<Self, _support::ParseError> {
843        let mut _tmp0 = preserves::value::Map::new();
844        for (_tmp1, _tmp2) in value.value().to_dictionary()? {
845            let _tmp3 = _tmp1.value().to_symbol()?;
846            let _tmp4 = Definition::parse(_ctxt, _tmp2)?;
847            _tmp0.insert(_tmp3.clone(), _tmp4);
848        }
849        Ok(Definitions(_tmp0))
850    }
851}
852
853impl<
854    'a,
855    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
856    _Value: preserves::value::NestedValue + 'a
857> _support::Unparse<_L, _Value> for Definitions<_Value> {
858    fn unparse(&self, _ctxt: _L) -> _Value {
859        let Definitions(_tmp0) = self;
860        preserves::value::Value::Dictionary(_tmp0.iter().map(|(_tmp1, _tmp2)| (preserves::value::Value::symbol(_tmp1).wrap(), _tmp2.unparse(_ctxt))).collect()).wrap()
861    }
862}
863
864#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash)]
865pub struct DictionaryEntries<_Value: preserves::value::NestedValue = preserves::value::IOValue>(pub preserves::value::Map<_Value, NamedSimplePattern<_Value>>);
866
867impl<_Value: preserves::value::NestedValue> preserves::value::Domain for DictionaryEntries<_Value> {}
868
869impl<_Value: preserves::value::NestedValue> _support::Deserialize<_Value> for DictionaryEntries<_Value> {
870    fn deserialize<'de, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Self, _support::ParseError> {
871        r.open_dictionary()?;
872        let mut _tmp2 = _support::B::Type::default();
873        let mut _tmp1 = preserves::value::Map::new();
874        while !r.close_compound(&mut _tmp2)? {
875            if !r.expect_boundary(&mut _tmp2, &_support::B::Item::DictionaryKey)? {
876                return Err(_support::ParseError::conformance_error("schema.DictionaryEntries"));
877            }
878            let _tmp3 = r.demand_next(true)?;
879            if !r.expect_boundary(&mut _tmp2, &_support::B::Item::DictionaryValue)? {
880                return Err(_support::ParseError::conformance_error("schema.DictionaryEntries"));
881            }
882            let _tmp4 = NamedSimplePattern::deserialize(r)?;
883            _tmp1.insert(_tmp3, _tmp4);
884        }
885        let _tmp0 = _tmp1;
886        Ok(DictionaryEntries(_tmp0))
887    }
888}
889
890impl<
891    'a,
892    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
893    _Value: preserves::value::NestedValue + 'a
894> _support::Parse<_L, _Value> for DictionaryEntries<_Value> {
895    fn parse(_ctxt: _L, value: &_Value) -> std::result::Result<Self, _support::ParseError> {
896        let mut _tmp0 = preserves::value::Map::new();
897        for (_tmp1, _tmp2) in value.value().to_dictionary()? {
898            let _tmp3 = _tmp1;
899            let _tmp4 = NamedSimplePattern::parse(_ctxt, _tmp2)?;
900            _tmp0.insert(_tmp3.clone(), _tmp4);
901        }
902        Ok(DictionaryEntries(_tmp0))
903    }
904}
905
906impl<
907    'a,
908    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
909    _Value: preserves::value::NestedValue + 'a
910> _support::Unparse<_L, _Value> for DictionaryEntries<_Value> {
911    fn unparse(&self, _ctxt: _L) -> _Value {
912        let DictionaryEntries(_tmp0) = self;
913        preserves::value::Value::Dictionary(_tmp0.iter().map(|(_tmp1, _tmp2)| (_tmp1.clone(), _tmp2.unparse(_ctxt))).collect()).wrap()
914    }
915}
916
917#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash)]
918pub enum EmbeddedTypeName {
919    False,
920    Ref(std::boxed::Box<Ref>)
921}
922
923impl preserves::value::Domain for EmbeddedTypeName {}
924
925fn read_embedded_type_name_false<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<EmbeddedTypeName, _support::ParseError> {
926    match r.next_token(true)? {
927        preserves::value::Token::Atom(v) => match v.value() {
928            preserves::value::Value::Boolean(w) if !*w => {}
929            _ => return Err(_support::ParseError::conformance_error("schema.EmbeddedTypeName::false"))?,
930        }
931        _ => return Err(_support::ParseError::conformance_error("schema.EmbeddedTypeName::false"))?,
932    }
933    let _tmp0 = ();
934    Ok(EmbeddedTypeName::False)
935}
936
937fn read_embedded_type_name_ref<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<EmbeddedTypeName, _support::ParseError> {
938    let _tmp0 = Ref::deserialize(r)?;
939    Ok(EmbeddedTypeName::Ref(std::boxed::Box::new(_tmp0)))
940}
941
942impl<_Value: preserves::value::NestedValue> _support::Deserialize<_Value> for EmbeddedTypeName {
943    fn deserialize<'de, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Self, _support::ParseError> {
944        let _mark = r.mark()?;
945        match read_embedded_type_name_false(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
946        match read_embedded_type_name_ref(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
947        Err(_support::ParseError::conformance_error("schema.EmbeddedTypeName"))
948    }
949}
950
951fn parse_embedded_type_name_false<
952    'a,
953    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
954    _Value: preserves::value::NestedValue + 'a
955>(_ctxt: _L, value: &_Value) -> std::result::Result<EmbeddedTypeName, _support::ParseError> {
956    if value != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_14_FALSE { return Err(_support::ParseError::conformance_error("schema.EmbeddedTypeName::false")); }
957    let _tmp0 = ();
958    Ok(EmbeddedTypeName::False)
959}
960
961fn parse_embedded_type_name_ref<
962    'a,
963    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
964    _Value: preserves::value::NestedValue + 'a
965>(_ctxt: _L, value: &_Value) -> std::result::Result<EmbeddedTypeName, _support::ParseError> {
966    let _tmp0 = Ref::parse(_ctxt, value)?;
967    Ok(EmbeddedTypeName::Ref(std::boxed::Box::new(_tmp0)))
968}
969
970impl<
971    'a,
972    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
973    _Value: preserves::value::NestedValue + 'a
974> _support::Parse<_L, _Value> for EmbeddedTypeName {
975    fn parse(_ctxt: _L, value: &_Value) -> std::result::Result<Self, _support::ParseError> {
976        if let Ok(r) = parse_embedded_type_name_false(_ctxt, value) { return Ok(r); }
977        if let Ok(r) = parse_embedded_type_name_ref(_ctxt, value) { return Ok(r); }
978        Err(_support::ParseError::conformance_error("schema.EmbeddedTypeName"))
979    }
980}
981
982impl<
983    'a,
984    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
985    _Value: preserves::value::NestedValue + 'a
986> _support::Unparse<_L, _Value> for EmbeddedTypeName {
987    fn unparse(&self, _ctxt: _L) -> _Value {
988        match self {
989            EmbeddedTypeName::False => (&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_14_FALSE).clone(),
990            EmbeddedTypeName::Ref(_tmp0) => _tmp0.as_ref().unparse(_ctxt),
991        }
992    }
993}
994
995#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash)]
996pub struct ModulePath(pub std::vec::Vec<std::string::String>);
997
998impl preserves::value::Domain for ModulePath {}
999
1000impl<_Value: preserves::value::NestedValue> _support::Deserialize<_Value> for ModulePath {
1001    fn deserialize<'de, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Self, _support::ParseError> {
1002        r.open_sequence()?;
1003        let mut _tmp2 = _support::B::Type::default();
1004        let mut _tmp1 = std::vec::Vec::new();
1005        while !r.close_compound(&mut _tmp2)? {
1006            if !r.expect_boundary(&mut _tmp2, &_support::B::Item::SequenceValue)? {return Err(_support::ParseError::conformance_error("schema.ModulePath"));}
1007            let _tmp3 = r.next_symbol()?.into_owned();
1008            _tmp1.push(_tmp3);
1009        }
1010        let _tmp0 = _tmp1;
1011        Ok(ModulePath(_tmp0))
1012    }
1013}
1014
1015impl<
1016    'a,
1017    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1018    _Value: preserves::value::NestedValue + 'a
1019> _support::Parse<_L, _Value> for ModulePath {
1020    fn parse(_ctxt: _L, value: &_Value) -> std::result::Result<Self, _support::ParseError> {
1021        let _tmp1 = value.value().to_sequence()?;
1022        let mut _tmp0 = std::vec::Vec::new();
1023        for _tmp2 in &_tmp1[0..] {
1024            let _tmp3 = _tmp2.value().to_symbol()?;
1025            _tmp0.push(_tmp3.clone());
1026        }
1027        Ok(ModulePath(_tmp0))
1028    }
1029}
1030
1031impl<
1032    'a,
1033    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1034    _Value: preserves::value::NestedValue + 'a
1035> _support::Unparse<_L, _Value> for ModulePath {
1036    fn unparse(&self, _ctxt: _L) -> _Value {
1037        let ModulePath(_tmp0) = self;
1038        {
1039            let mut _tmp1 = std::vec::Vec::new();
1040            for _tmp2 in _tmp0 {
1041                _tmp1.push(preserves::value::Value::symbol(_tmp2).wrap());
1042            }
1043            preserves::value::Value::Sequence(_tmp1).wrap()
1044        }
1045    }
1046}
1047
1048#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash)]
1049pub struct Modules<_Value: preserves::value::NestedValue = preserves::value::IOValue>(pub preserves::value::Map<ModulePath, Schema<_Value>>);
1050
1051impl<_Value: preserves::value::NestedValue> preserves::value::Domain for Modules<_Value> {}
1052
1053impl<_Value: preserves::value::NestedValue> _support::Deserialize<_Value> for Modules<_Value> {
1054    fn deserialize<'de, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Self, _support::ParseError> {
1055        r.open_dictionary()?;
1056        let mut _tmp2 = _support::B::Type::default();
1057        let mut _tmp1 = preserves::value::Map::new();
1058        while !r.close_compound(&mut _tmp2)? {
1059            if !r.expect_boundary(&mut _tmp2, &_support::B::Item::DictionaryKey)? {return Err(_support::ParseError::conformance_error("schema.Modules"));}
1060            let _tmp3 = ModulePath::deserialize(r)?;
1061            if !r.expect_boundary(&mut _tmp2, &_support::B::Item::DictionaryValue)? {return Err(_support::ParseError::conformance_error("schema.Modules"));}
1062            let _tmp4 = Schema::deserialize(r)?;
1063            _tmp1.insert(_tmp3, _tmp4);
1064        }
1065        let _tmp0 = _tmp1;
1066        Ok(Modules(_tmp0))
1067    }
1068}
1069
1070impl<
1071    'a,
1072    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1073    _Value: preserves::value::NestedValue + 'a
1074> _support::Parse<_L, _Value> for Modules<_Value> {
1075    fn parse(_ctxt: _L, value: &_Value) -> std::result::Result<Self, _support::ParseError> {
1076        let mut _tmp0 = preserves::value::Map::new();
1077        for (_tmp1, _tmp2) in value.value().to_dictionary()? {
1078            let _tmp3 = ModulePath::parse(_ctxt, _tmp1)?;
1079            let _tmp4 = Schema::parse(_ctxt, _tmp2)?;
1080            _tmp0.insert(_tmp3, _tmp4);
1081        }
1082        Ok(Modules(_tmp0))
1083    }
1084}
1085
1086impl<
1087    'a,
1088    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1089    _Value: preserves::value::NestedValue + 'a
1090> _support::Unparse<_L, _Value> for Modules<_Value> {
1091    fn unparse(&self, _ctxt: _L) -> _Value {
1092        let Modules(_tmp0) = self;
1093        preserves::value::Value::Dictionary(_tmp0.iter().map(|(_tmp1, _tmp2)| (_tmp1.unparse(_ctxt), _tmp2.unparse(_ctxt))).collect()).wrap()
1094    }
1095}
1096
1097#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash)]
1098pub struct NamedAlternative<_Value: preserves::value::NestedValue = preserves::value::IOValue> {
1099    pub variant_label: std::string::String,
1100    pub pattern: Pattern<_Value>
1101}
1102
1103impl<_Value: preserves::value::NestedValue> preserves::value::Domain for NamedAlternative<_Value> {}
1104
1105impl<_Value: preserves::value::NestedValue> _support::Deserialize<_Value> for NamedAlternative<_Value> {
1106    fn deserialize<'de, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Self, _support::ParseError> {
1107        r.open_sequence()?;
1108        let mut _tmp0 = _support::B::Type::default();
1109        if !r.expect_boundary(&mut _tmp0, &_support::B::Item::SequenceValue)? {
1110            return Err(_support::ParseError::conformance_error("schema.NamedAlternative"));
1111        }
1112        let _tmp1 = r.next_str()?.into_owned();
1113        if !r.expect_boundary(&mut _tmp0, &_support::B::Item::SequenceValue)? {
1114            return Err(_support::ParseError::conformance_error("schema.NamedAlternative"));
1115        }
1116        let _tmp2 = Pattern::deserialize(r)?;
1117        r.ensure_complete(_tmp0)?;
1118        Ok(NamedAlternative {variant_label: _tmp1, pattern: _tmp2})
1119    }
1120}
1121
1122impl<
1123    'a,
1124    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1125    _Value: preserves::value::NestedValue + 'a
1126> _support::Parse<_L, _Value> for NamedAlternative<_Value> {
1127    fn parse(_ctxt: _L, value: &_Value) -> std::result::Result<Self, _support::ParseError> {
1128        let _tmp0 = value.value().to_sequence()?;
1129        if _tmp0.len() < 2 { return Err(_support::ParseError::conformance_error("schema.NamedAlternative")); }
1130        let _tmp1 = (&_tmp0[0]).value().to_string()?;
1131        let _tmp2 = Pattern::parse(_ctxt, (&_tmp0[1]))?;
1132        Ok(NamedAlternative {variant_label: _tmp1.clone(), pattern: _tmp2})
1133    }
1134}
1135
1136impl<
1137    'a,
1138    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1139    _Value: preserves::value::NestedValue + 'a
1140> _support::Unparse<_L, _Value> for NamedAlternative<_Value> {
1141    fn unparse(&self, _ctxt: _L) -> _Value {
1142        let NamedAlternative {variant_label: _tmp0, pattern: _tmp1} = self;
1143        {
1144            let mut _tmp2 = std::vec::Vec::new();
1145            _tmp2.push(preserves::value::Value::from(_tmp0).wrap());
1146            _tmp2.push(_tmp1.unparse(_ctxt));
1147            preserves::value::Value::Sequence(_tmp2).wrap()
1148        }
1149    }
1150}
1151
1152#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash)]
1153pub enum NamedPattern<_Value: preserves::value::NestedValue = preserves::value::IOValue> {
1154    Named(std::boxed::Box<Binding<_Value>>),
1155    Anonymous(std::boxed::Box<Pattern<_Value>>)
1156}
1157
1158impl<_Value: preserves::value::NestedValue> preserves::value::Domain for NamedPattern<_Value> {}
1159
1160fn read_named_pattern_named<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<NamedPattern<_Value>, _support::ParseError> {
1161    let _tmp0 = Binding::deserialize(r)?;
1162    Ok(NamedPattern::Named(std::boxed::Box::new(_tmp0)))
1163}
1164
1165fn read_named_pattern_anonymous<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<NamedPattern<_Value>, _support::ParseError> {
1166    let _tmp0 = Pattern::deserialize(r)?;
1167    Ok(NamedPattern::Anonymous(std::boxed::Box::new(_tmp0)))
1168}
1169
1170impl<_Value: preserves::value::NestedValue> _support::Deserialize<_Value> for NamedPattern<_Value> {
1171    fn deserialize<'de, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Self, _support::ParseError> {
1172        let _mark = r.mark()?;
1173        match read_named_pattern_named(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
1174        match read_named_pattern_anonymous(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
1175        Err(_support::ParseError::conformance_error("schema.NamedPattern"))
1176    }
1177}
1178
1179fn parse_named_pattern_named<
1180    'a,
1181    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1182    _Value: preserves::value::NestedValue + 'a
1183>(_ctxt: _L, value: &_Value) -> std::result::Result<NamedPattern<_Value>, _support::ParseError> {
1184    let _tmp0 = Binding::parse(_ctxt, value)?;
1185    Ok(NamedPattern::Named(std::boxed::Box::new(_tmp0)))
1186}
1187
1188fn parse_named_pattern_anonymous<
1189    'a,
1190    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1191    _Value: preserves::value::NestedValue + 'a
1192>(_ctxt: _L, value: &_Value) -> std::result::Result<NamedPattern<_Value>, _support::ParseError> {
1193    let _tmp0 = Pattern::parse(_ctxt, value)?;
1194    Ok(NamedPattern::Anonymous(std::boxed::Box::new(_tmp0)))
1195}
1196
1197impl<
1198    'a,
1199    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1200    _Value: preserves::value::NestedValue + 'a
1201> _support::Parse<_L, _Value> for NamedPattern<_Value> {
1202    fn parse(_ctxt: _L, value: &_Value) -> std::result::Result<Self, _support::ParseError> {
1203        if let Ok(r) = parse_named_pattern_named(_ctxt, value) { return Ok(r); }
1204        if let Ok(r) = parse_named_pattern_anonymous(_ctxt, value) { return Ok(r); }
1205        Err(_support::ParseError::conformance_error("schema.NamedPattern"))
1206    }
1207}
1208
1209impl<
1210    'a,
1211    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1212    _Value: preserves::value::NestedValue + 'a
1213> _support::Unparse<_L, _Value> for NamedPattern<_Value> {
1214    fn unparse(&self, _ctxt: _L) -> _Value {
1215        match self {
1216            NamedPattern::Named(_tmp0) => _tmp0.as_ref().unparse(_ctxt),
1217            NamedPattern::Anonymous(_tmp0) => _tmp0.as_ref().unparse(_ctxt),
1218        }
1219    }
1220}
1221
1222#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash)]
1223pub enum NamedSimplePattern<_Value: preserves::value::NestedValue = preserves::value::IOValue> {
1224    Named(std::boxed::Box<Binding<_Value>>),
1225    Anonymous(std::boxed::Box<SimplePattern<_Value>>)
1226}
1227
1228impl<_Value: preserves::value::NestedValue> preserves::value::Domain for NamedSimplePattern<_Value> {}
1229
1230fn read_named_simple_pattern_named<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<NamedSimplePattern<_Value>, _support::ParseError> {
1231    let _tmp0 = Binding::deserialize(r)?;
1232    Ok(NamedSimplePattern::Named(std::boxed::Box::new(_tmp0)))
1233}
1234
1235fn read_named_simple_pattern_anonymous<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<NamedSimplePattern<_Value>, _support::ParseError> {
1236    let _tmp0 = SimplePattern::deserialize(r)?;
1237    Ok(NamedSimplePattern::Anonymous(std::boxed::Box::new(_tmp0)))
1238}
1239
1240impl<_Value: preserves::value::NestedValue> _support::Deserialize<_Value> for NamedSimplePattern<_Value> {
1241    fn deserialize<'de, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Self, _support::ParseError> {
1242        let _mark = r.mark()?;
1243        match read_named_simple_pattern_named(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
1244        match read_named_simple_pattern_anonymous(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
1245        Err(_support::ParseError::conformance_error("schema.NamedSimplePattern"))
1246    }
1247}
1248
1249fn parse_named_simple_pattern_named<
1250    'a,
1251    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1252    _Value: preserves::value::NestedValue + 'a
1253>(_ctxt: _L, value: &_Value) -> std::result::Result<NamedSimplePattern<_Value>, _support::ParseError> {
1254    let _tmp0 = Binding::parse(_ctxt, value)?;
1255    Ok(NamedSimplePattern::Named(std::boxed::Box::new(_tmp0)))
1256}
1257
1258fn parse_named_simple_pattern_anonymous<
1259    'a,
1260    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1261    _Value: preserves::value::NestedValue + 'a
1262>(_ctxt: _L, value: &_Value) -> std::result::Result<NamedSimplePattern<_Value>, _support::ParseError> {
1263    let _tmp0 = SimplePattern::parse(_ctxt, value)?;
1264    Ok(NamedSimplePattern::Anonymous(std::boxed::Box::new(_tmp0)))
1265}
1266
1267impl<
1268    'a,
1269    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1270    _Value: preserves::value::NestedValue + 'a
1271> _support::Parse<_L, _Value> for NamedSimplePattern<_Value> {
1272    fn parse(_ctxt: _L, value: &_Value) -> std::result::Result<Self, _support::ParseError> {
1273        if let Ok(r) = parse_named_simple_pattern_named(_ctxt, value) { return Ok(r); }
1274        if let Ok(r) = parse_named_simple_pattern_anonymous(_ctxt, value) { return Ok(r); }
1275        Err(_support::ParseError::conformance_error("schema.NamedSimplePattern"))
1276    }
1277}
1278
1279impl<
1280    'a,
1281    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1282    _Value: preserves::value::NestedValue + 'a
1283> _support::Unparse<_L, _Value> for NamedSimplePattern<_Value> {
1284    fn unparse(&self, _ctxt: _L) -> _Value {
1285        match self {
1286            NamedSimplePattern::Named(_tmp0) => _tmp0.as_ref().unparse(_ctxt),
1287            NamedSimplePattern::Anonymous(_tmp0) => _tmp0.as_ref().unparse(_ctxt),
1288        }
1289    }
1290}
1291
1292#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash)]
1293pub enum Pattern<_Value: preserves::value::NestedValue = preserves::value::IOValue> {
1294    SimplePattern(std::boxed::Box<SimplePattern<_Value>>),
1295    CompoundPattern(std::boxed::Box<CompoundPattern<_Value>>)
1296}
1297
1298impl<_Value: preserves::value::NestedValue> preserves::value::Domain for Pattern<_Value> {}
1299
1300fn read_pattern_simple_pattern<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Pattern<_Value>, _support::ParseError> {
1301    let _tmp0 = SimplePattern::deserialize(r)?;
1302    Ok(Pattern::SimplePattern(std::boxed::Box::new(_tmp0)))
1303}
1304
1305fn read_pattern_compound_pattern<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Pattern<_Value>, _support::ParseError> {
1306    let _tmp0 = CompoundPattern::deserialize(r)?;
1307    Ok(Pattern::CompoundPattern(std::boxed::Box::new(_tmp0)))
1308}
1309
1310impl<_Value: preserves::value::NestedValue> _support::Deserialize<_Value> for Pattern<_Value> {
1311    fn deserialize<'de, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Self, _support::ParseError> {
1312        let _mark = r.mark()?;
1313        match read_pattern_simple_pattern(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
1314        match read_pattern_compound_pattern(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
1315        Err(_support::ParseError::conformance_error("schema.Pattern"))
1316    }
1317}
1318
1319fn parse_pattern_simple_pattern<
1320    'a,
1321    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1322    _Value: preserves::value::NestedValue + 'a
1323>(_ctxt: _L, value: &_Value) -> std::result::Result<Pattern<_Value>, _support::ParseError> {
1324    let _tmp0 = SimplePattern::parse(_ctxt, value)?;
1325    Ok(Pattern::SimplePattern(std::boxed::Box::new(_tmp0)))
1326}
1327
1328fn parse_pattern_compound_pattern<
1329    'a,
1330    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1331    _Value: preserves::value::NestedValue + 'a
1332>(_ctxt: _L, value: &_Value) -> std::result::Result<Pattern<_Value>, _support::ParseError> {
1333    let _tmp0 = CompoundPattern::parse(_ctxt, value)?;
1334    Ok(Pattern::CompoundPattern(std::boxed::Box::new(_tmp0)))
1335}
1336
1337impl<
1338    'a,
1339    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1340    _Value: preserves::value::NestedValue + 'a
1341> _support::Parse<_L, _Value> for Pattern<_Value> {
1342    fn parse(_ctxt: _L, value: &_Value) -> std::result::Result<Self, _support::ParseError> {
1343        if let Ok(r) = parse_pattern_simple_pattern(_ctxt, value) { return Ok(r); }
1344        if let Ok(r) = parse_pattern_compound_pattern(_ctxt, value) { return Ok(r); }
1345        Err(_support::ParseError::conformance_error("schema.Pattern"))
1346    }
1347}
1348
1349impl<
1350    'a,
1351    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1352    _Value: preserves::value::NestedValue + 'a
1353> _support::Unparse<_L, _Value> for Pattern<_Value> {
1354    fn unparse(&self, _ctxt: _L) -> _Value {
1355        match self {
1356            Pattern::SimplePattern(_tmp0) => _tmp0.as_ref().unparse(_ctxt),
1357            Pattern::CompoundPattern(_tmp0) => _tmp0.as_ref().unparse(_ctxt),
1358        }
1359    }
1360}
1361
1362#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash)]
1363pub struct Ref {
1364    pub module: ModulePath,
1365    pub name: std::string::String
1366}
1367
1368impl preserves::value::Domain for Ref {}
1369
1370impl<_Value: preserves::value::NestedValue> _support::Deserialize<_Value> for Ref {
1371    fn deserialize<'de, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Self, _support::ParseError> {
1372        r.open_record(None)?;
1373        let mut _tmp0 = _support::B::Type::default();
1374        if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordLabel)? {return Err(_support::ParseError::conformance_error("schema.Ref"));}
1375        match r.next_token(true)? {
1376            preserves::value::Token::Atom(v) => match v.value() {
1377                preserves::value::Value::Symbol(w) if w == "ref" => {}
1378                _ => return Err(_support::ParseError::conformance_error("schema.Ref"))?,
1379            }
1380            _ => return Err(_support::ParseError::conformance_error("schema.Ref"))?,
1381        }
1382        let _tmp1 = ();
1383        if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {return Err(_support::ParseError::conformance_error("schema.Ref"));}
1384        let _tmp2 = ModulePath::deserialize(r)?;
1385        if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {return Err(_support::ParseError::conformance_error("schema.Ref"));}
1386        let _tmp3 = r.next_symbol()?.into_owned();
1387        r.ensure_complete(_tmp0)?;
1388        Ok(Ref {module: _tmp2, name: _tmp3})
1389    }
1390}
1391
1392impl<
1393    'a,
1394    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1395    _Value: preserves::value::NestedValue + 'a
1396> _support::Parse<_L, _Value> for Ref {
1397    fn parse(_ctxt: _L, value: &_Value) -> std::result::Result<Self, _support::ParseError> {
1398        let _tmp0 = value.value().to_record(None)?;
1399        if _tmp0.label() != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_15_REF { return Err(_support::ParseError::conformance_error("schema.Ref")); }
1400        let _tmp1 = ();
1401        if _tmp0.fields().len() < 2 { return Err(_support::ParseError::conformance_error("schema.Ref")); }
1402        let _tmp2 = ModulePath::parse(_ctxt, (&_tmp0.fields()[0]))?;
1403        let _tmp3 = (&_tmp0.fields()[1]).value().to_symbol()?;
1404        Ok(Ref {module: _tmp2, name: _tmp3.clone()})
1405    }
1406}
1407
1408impl<
1409    'a,
1410    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1411    _Value: preserves::value::NestedValue + 'a
1412> _support::Unparse<_L, _Value> for Ref {
1413    fn unparse(&self, _ctxt: _L) -> _Value {
1414        let Ref {module: _tmp0, name: _tmp1} = self;
1415        {
1416            let mut _tmp2 = preserves::value::Record(vec![(&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_15_REF).clone()]);
1417            _tmp2.fields_vec_mut().push(_tmp0.unparse(_ctxt));
1418            _tmp2.fields_vec_mut().push(preserves::value::Value::symbol(_tmp1).wrap());
1419            _tmp2.finish().wrap()
1420        }
1421    }
1422}
1423
1424#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash)]
1425pub struct Schema<_Value: preserves::value::NestedValue = preserves::value::IOValue> {
1426    pub definitions: Definitions<_Value>,
1427    pub embedded_type: EmbeddedTypeName,
1428    pub version: Version
1429}
1430
1431impl<_Value: preserves::value::NestedValue> preserves::value::Domain for Schema<_Value> {}
1432
1433impl<_Value: preserves::value::NestedValue> _support::Deserialize<_Value> for Schema<_Value> {
1434    fn deserialize<'de, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Self, _support::ParseError> {
1435        r.open_record(None)?;
1436        let mut _tmp0 = _support::B::Type::default();
1437        if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordLabel)? {return Err(_support::ParseError::conformance_error("schema.Schema"));}
1438        match r.next_token(true)? {
1439            preserves::value::Token::Atom(v) => match v.value() {
1440                preserves::value::Value::Symbol(w) if w == "schema" => {}
1441                _ => return Err(_support::ParseError::conformance_error("schema.Schema"))?,
1442            }
1443            _ => return Err(_support::ParseError::conformance_error("schema.Schema"))?,
1444        }
1445        let _tmp1 = ();
1446        if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {return Err(_support::ParseError::conformance_error("schema.Schema"));}
1447        r.open_dictionary()?;
1448        let mut _tmp2 = _support::B::Type::default();
1449        let mut _tmp3 = None;
1450        let mut _tmp4 = None;
1451        let mut _tmp5 = None;
1452        while !r.close_compound(&mut _tmp2)? {
1453            if !r.expect_boundary(&mut _tmp2, &_support::B::Item::DictionaryKey)? {return Err(_support::ParseError::conformance_error("schema.Schema"));}
1454            match r.next_token(true)? {
1455                preserves::value::Token::Atom(v) => match v.value() {
1456                    preserves::value::Value::Symbol(w) if w == "definitions" => {
1457                        if !r.expect_boundary(&mut _tmp2, &_support::B::Item::DictionaryValue)? {return Err(_support::ParseError::conformance_error("schema.Schema"));}
1458                        _tmp3 = Some(Definitions::deserialize(r)?);
1459                        continue;
1460                    }
1461                    preserves::value::Value::Symbol(w) if w == "embeddedType" => {
1462                        if !r.expect_boundary(&mut _tmp2, &_support::B::Item::DictionaryValue)? {return Err(_support::ParseError::conformance_error("schema.Schema"));}
1463                        _tmp4 = Some(EmbeddedTypeName::deserialize(r)?);
1464                        continue;
1465                    }
1466                    preserves::value::Value::Symbol(w) if w == "version" => {
1467                        if !r.expect_boundary(&mut _tmp2, &_support::B::Item::DictionaryValue)? {return Err(_support::ParseError::conformance_error("schema.Schema"));}
1468                        _tmp5 = Some(Version::deserialize(r)?);
1469                        continue;
1470                    }
1471                    _ => return Err(_support::ParseError::conformance_error("schema.Schema"))?,
1472                }
1473                _ => return Err(_support::ParseError::conformance_error("schema.Schema"))?,
1474            }
1475        }
1476        r.ensure_complete(_tmp0)?;
1477        Ok(Schema {
1478            definitions: _tmp3.ok_or_else(|| _support::ParseError::conformance_error("schema.Schema"))?,
1479            embedded_type: _tmp4.ok_or_else(|| _support::ParseError::conformance_error("schema.Schema"))?,
1480            version: _tmp5.ok_or_else(|| _support::ParseError::conformance_error("schema.Schema"))?
1481        })
1482    }
1483}
1484
1485impl<
1486    'a,
1487    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1488    _Value: preserves::value::NestedValue + 'a
1489> _support::Parse<_L, _Value> for Schema<_Value> {
1490    fn parse(_ctxt: _L, value: &_Value) -> std::result::Result<Self, _support::ParseError> {
1491        let _tmp0 = value.value().to_record(None)?;
1492        if _tmp0.label() != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_16_SCHEMA { return Err(_support::ParseError::conformance_error("schema.Schema")); }
1493        let _tmp1 = ();
1494        if _tmp0.fields().len() < 1 { return Err(_support::ParseError::conformance_error("schema.Schema")); }
1495        let _tmp2 = (&_tmp0.fields()[0]).value().to_dictionary()?;
1496        let _tmp3 = _tmp2.get(
1497            &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_17_DEFINITIONS
1498        ).ok_or_else(|| _support::ParseError::conformance_error("schema.Schema"))?;
1499        let _tmp4 = Definitions::parse(_ctxt, _tmp3)?;
1500        let _tmp5 = _tmp2.get(
1501            &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_18_EMBEDDED_TYPE
1502        ).ok_or_else(|| _support::ParseError::conformance_error("schema.Schema"))?;
1503        let _tmp6 = EmbeddedTypeName::parse(_ctxt, _tmp5)?;
1504        let _tmp7 = _tmp2.get(&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_19_VERSION).ok_or_else(|| _support::ParseError::conformance_error("schema.Schema"))?;
1505        let _tmp8 = Version::parse(_ctxt, _tmp7)?;
1506        Ok(Schema {definitions: _tmp4, embedded_type: _tmp6, version: _tmp8})
1507    }
1508}
1509
1510impl<
1511    'a,
1512    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1513    _Value: preserves::value::NestedValue + 'a
1514> _support::Unparse<_L, _Value> for Schema<_Value> {
1515    fn unparse(&self, _ctxt: _L) -> _Value {
1516        let Schema {definitions: _tmp0, embedded_type: _tmp1, version: _tmp2} = self;
1517        {
1518            let mut _tmp3 = preserves::value::Record(vec![(&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_16_SCHEMA).clone()]);
1519            _tmp3.fields_vec_mut().push(
1520                {
1521                    let mut _tmp4 = preserves::value::Map::new();
1522                    _tmp4.insert(
1523                        (
1524                            &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_17_DEFINITIONS
1525                        ).clone(),
1526                        _tmp0.unparse(_ctxt)
1527                    );
1528                    _tmp4.insert(
1529                        (
1530                            &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_18_EMBEDDED_TYPE
1531                        ).clone(),
1532                        _tmp1.unparse(_ctxt)
1533                    );
1534                    _tmp4.insert(
1535                        (&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_19_VERSION).clone(),
1536                        _tmp2.unparse(_ctxt)
1537                    );
1538                    preserves::value::Value::Dictionary(_tmp4).wrap()
1539                }
1540            );
1541            _tmp3.finish().wrap()
1542        }
1543    }
1544}
1545
1546#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash)]
1547pub enum SimplePattern<_Value: preserves::value::NestedValue = preserves::value::IOValue> {
1548    Any,
1549    Atom {
1550        atom_kind: std::boxed::Box<AtomKind>
1551    },
1552    Embedded {
1553        interface: std::boxed::Box<SimplePattern<_Value>>
1554    },
1555    Lit {
1556        value: _Value
1557    },
1558    Seqof {
1559        pattern: std::boxed::Box<SimplePattern<_Value>>
1560    },
1561    Setof {
1562        pattern: std::boxed::Box<SimplePattern<_Value>>
1563    },
1564    Dictof {
1565        key: std::boxed::Box<SimplePattern<_Value>>,
1566        value: std::boxed::Box<SimplePattern<_Value>>
1567    },
1568    Ref(std::boxed::Box<Ref>)
1569}
1570
1571impl<_Value: preserves::value::NestedValue> preserves::value::Domain for SimplePattern<_Value> {}
1572
1573fn read_simple_pattern_any<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<SimplePattern<_Value>, _support::ParseError> {
1574    match r.next_token(true)? {
1575        preserves::value::Token::Atom(v) => match v.value() {
1576            preserves::value::Value::Symbol(w) if w == "any" => {}
1577            _ => return Err(_support::ParseError::conformance_error("schema.SimplePattern::any"))?,
1578        }
1579        _ => return Err(_support::ParseError::conformance_error("schema.SimplePattern::any"))?,
1580    }
1581    let _tmp0 = ();
1582    Ok(SimplePattern::Any)
1583}
1584
1585fn read_simple_pattern_atom<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<SimplePattern<_Value>, _support::ParseError> {
1586    r.open_record(None)?;
1587    let mut _tmp0 = _support::B::Type::default();
1588    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordLabel)? {
1589        return Err(_support::ParseError::conformance_error("schema.SimplePattern::atom"));
1590    }
1591    match r.next_token(true)? {
1592        preserves::value::Token::Atom(v) => match v.value() {
1593            preserves::value::Value::Symbol(w) if w == "atom" => {}
1594            _ => return Err(_support::ParseError::conformance_error("schema.SimplePattern::atom"))?,
1595        }
1596        _ => return Err(_support::ParseError::conformance_error("schema.SimplePattern::atom"))?,
1597    }
1598    let _tmp1 = ();
1599    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {
1600        return Err(_support::ParseError::conformance_error("schema.SimplePattern::atom"));
1601    }
1602    let _tmp2 = AtomKind::deserialize(r)?;
1603    r.ensure_complete(_tmp0)?;
1604    Ok(SimplePattern::Atom {atom_kind: std::boxed::Box::new(_tmp2)})
1605}
1606
1607fn read_simple_pattern_embedded<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<SimplePattern<_Value>, _support::ParseError> {
1608    r.open_record(None)?;
1609    let mut _tmp0 = _support::B::Type::default();
1610    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordLabel)? {
1611        return Err(_support::ParseError::conformance_error("schema.SimplePattern::embedded"));
1612    }
1613    match r.next_token(true)? {
1614        preserves::value::Token::Atom(v) => match v.value() {
1615            preserves::value::Value::Symbol(w) if w == "embedded" => {}
1616            _ => return Err(_support::ParseError::conformance_error("schema.SimplePattern::embedded"))?,
1617        }
1618        _ => return Err(_support::ParseError::conformance_error("schema.SimplePattern::embedded"))?,
1619    }
1620    let _tmp1 = ();
1621    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {
1622        return Err(_support::ParseError::conformance_error("schema.SimplePattern::embedded"));
1623    }
1624    let _tmp2 = SimplePattern::deserialize(r)?;
1625    r.ensure_complete(_tmp0)?;
1626    Ok(SimplePattern::Embedded {interface: std::boxed::Box::new(_tmp2)})
1627}
1628
1629fn read_simple_pattern_lit<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<SimplePattern<_Value>, _support::ParseError> {
1630    r.open_record(None)?;
1631    let mut _tmp0 = _support::B::Type::default();
1632    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordLabel)? {
1633        return Err(_support::ParseError::conformance_error("schema.SimplePattern::lit"));
1634    }
1635    match r.next_token(true)? {
1636        preserves::value::Token::Atom(v) => match v.value() {
1637            preserves::value::Value::Symbol(w) if w == "lit" => {}
1638            _ => return Err(_support::ParseError::conformance_error("schema.SimplePattern::lit"))?,
1639        }
1640        _ => return Err(_support::ParseError::conformance_error("schema.SimplePattern::lit"))?,
1641    }
1642    let _tmp1 = ();
1643    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {
1644        return Err(_support::ParseError::conformance_error("schema.SimplePattern::lit"));
1645    }
1646    let _tmp2 = r.demand_next(true)?;
1647    r.ensure_complete(_tmp0)?;
1648    Ok(SimplePattern::Lit {value: _tmp2})
1649}
1650
1651fn read_simple_pattern_seqof<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<SimplePattern<_Value>, _support::ParseError> {
1652    r.open_record(None)?;
1653    let mut _tmp0 = _support::B::Type::default();
1654    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordLabel)? {
1655        return Err(_support::ParseError::conformance_error("schema.SimplePattern::seqof"));
1656    }
1657    match r.next_token(true)? {
1658        preserves::value::Token::Atom(v) => match v.value() {
1659            preserves::value::Value::Symbol(w) if w == "seqof" => {}
1660            _ => return Err(_support::ParseError::conformance_error("schema.SimplePattern::seqof"))?,
1661        }
1662        _ => return Err(_support::ParseError::conformance_error("schema.SimplePattern::seqof"))?,
1663    }
1664    let _tmp1 = ();
1665    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {
1666        return Err(_support::ParseError::conformance_error("schema.SimplePattern::seqof"));
1667    }
1668    let _tmp2 = SimplePattern::deserialize(r)?;
1669    r.ensure_complete(_tmp0)?;
1670    Ok(SimplePattern::Seqof {pattern: std::boxed::Box::new(_tmp2)})
1671}
1672
1673fn read_simple_pattern_setof<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<SimplePattern<_Value>, _support::ParseError> {
1674    r.open_record(None)?;
1675    let mut _tmp0 = _support::B::Type::default();
1676    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordLabel)? {
1677        return Err(_support::ParseError::conformance_error("schema.SimplePattern::setof"));
1678    }
1679    match r.next_token(true)? {
1680        preserves::value::Token::Atom(v) => match v.value() {
1681            preserves::value::Value::Symbol(w) if w == "setof" => {}
1682            _ => return Err(_support::ParseError::conformance_error("schema.SimplePattern::setof"))?,
1683        }
1684        _ => return Err(_support::ParseError::conformance_error("schema.SimplePattern::setof"))?,
1685    }
1686    let _tmp1 = ();
1687    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {
1688        return Err(_support::ParseError::conformance_error("schema.SimplePattern::setof"));
1689    }
1690    let _tmp2 = SimplePattern::deserialize(r)?;
1691    r.ensure_complete(_tmp0)?;
1692    Ok(SimplePattern::Setof {pattern: std::boxed::Box::new(_tmp2)})
1693}
1694
1695fn read_simple_pattern_dictof<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<SimplePattern<_Value>, _support::ParseError> {
1696    r.open_record(None)?;
1697    let mut _tmp0 = _support::B::Type::default();
1698    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordLabel)? {
1699        return Err(_support::ParseError::conformance_error("schema.SimplePattern::dictof"));
1700    }
1701    match r.next_token(true)? {
1702        preserves::value::Token::Atom(v) => match v.value() {
1703            preserves::value::Value::Symbol(w) if w == "dictof" => {}
1704            _ => return Err(_support::ParseError::conformance_error("schema.SimplePattern::dictof"))?,
1705        }
1706        _ => return Err(_support::ParseError::conformance_error("schema.SimplePattern::dictof"))?,
1707    }
1708    let _tmp1 = ();
1709    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {
1710        return Err(_support::ParseError::conformance_error("schema.SimplePattern::dictof"));
1711    }
1712    let _tmp2 = SimplePattern::deserialize(r)?;
1713    if !r.expect_boundary(&mut _tmp0, &_support::B::Item::RecordField)? {
1714        return Err(_support::ParseError::conformance_error("schema.SimplePattern::dictof"));
1715    }
1716    let _tmp3 = SimplePattern::deserialize(r)?;
1717    r.ensure_complete(_tmp0)?;
1718    Ok(SimplePattern::Dictof {key: std::boxed::Box::new(_tmp2), value: std::boxed::Box::new(_tmp3)})
1719}
1720
1721fn read_simple_pattern_ref<'de, _Value: preserves::value::NestedValue, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<SimplePattern<_Value>, _support::ParseError> {
1722    let _tmp0 = Ref::deserialize(r)?;
1723    Ok(SimplePattern::Ref(std::boxed::Box::new(_tmp0)))
1724}
1725
1726impl<_Value: preserves::value::NestedValue> _support::Deserialize<_Value> for SimplePattern<_Value> {
1727    fn deserialize<'de, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Self, _support::ParseError> {
1728        let _mark = r.mark()?;
1729        match read_simple_pattern_any(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
1730        match read_simple_pattern_atom(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
1731        match read_simple_pattern_embedded(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
1732        match read_simple_pattern_lit(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
1733        match read_simple_pattern_seqof(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
1734        match read_simple_pattern_setof(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
1735        match read_simple_pattern_dictof(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
1736        match read_simple_pattern_ref(r) { Err(e) if e.is_conformance_error() => r.restore(&_mark)?, result => return result }
1737        Err(_support::ParseError::conformance_error("schema.SimplePattern"))
1738    }
1739}
1740
1741fn parse_simple_pattern_any<
1742    'a,
1743    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1744    _Value: preserves::value::NestedValue + 'a
1745>(_ctxt: _L, value: &_Value) -> std::result::Result<SimplePattern<_Value>, _support::ParseError> {
1746    if value != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_20_ANY { return Err(_support::ParseError::conformance_error("schema.SimplePattern::any")); }
1747    let _tmp0 = ();
1748    Ok(SimplePattern::Any)
1749}
1750
1751fn parse_simple_pattern_atom<
1752    'a,
1753    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1754    _Value: preserves::value::NestedValue + 'a
1755>(_ctxt: _L, value: &_Value) -> std::result::Result<SimplePattern<_Value>, _support::ParseError> {
1756    let _tmp0 = value.value().to_record(None)?;
1757    if _tmp0.label() != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_21_ATOM { return Err(_support::ParseError::conformance_error("schema.SimplePattern::atom")); }
1758    let _tmp1 = ();
1759    if _tmp0.fields().len() < 1 { return Err(_support::ParseError::conformance_error("schema.SimplePattern::atom")); }
1760    let _tmp2 = AtomKind::parse(_ctxt, (&_tmp0.fields()[0]))?;
1761    Ok(SimplePattern::Atom {atom_kind: std::boxed::Box::new(_tmp2)})
1762}
1763
1764fn parse_simple_pattern_embedded<
1765    'a,
1766    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1767    _Value: preserves::value::NestedValue + 'a
1768>(_ctxt: _L, value: &_Value) -> std::result::Result<SimplePattern<_Value>, _support::ParseError> {
1769    let _tmp0 = value.value().to_record(None)?;
1770    if _tmp0.label() != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_22_EMBEDDED { return Err(_support::ParseError::conformance_error("schema.SimplePattern::embedded")); }
1771    let _tmp1 = ();
1772    if _tmp0.fields().len() < 1 { return Err(_support::ParseError::conformance_error("schema.SimplePattern::embedded")); }
1773    let _tmp2 = SimplePattern::parse(_ctxt, (&_tmp0.fields()[0]))?;
1774    Ok(SimplePattern::Embedded {interface: std::boxed::Box::new(_tmp2)})
1775}
1776
1777fn parse_simple_pattern_lit<
1778    'a,
1779    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1780    _Value: preserves::value::NestedValue + 'a
1781>(_ctxt: _L, value: &_Value) -> std::result::Result<SimplePattern<_Value>, _support::ParseError> {
1782    let _tmp0 = value.value().to_record(None)?;
1783    if _tmp0.label() != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_23_LIT { return Err(_support::ParseError::conformance_error("schema.SimplePattern::lit")); }
1784    let _tmp1 = ();
1785    if _tmp0.fields().len() < 1 { return Err(_support::ParseError::conformance_error("schema.SimplePattern::lit")); }
1786    let _tmp2 = (&_tmp0.fields()[0]);
1787    Ok(SimplePattern::Lit {value: _tmp2.clone()})
1788}
1789
1790fn parse_simple_pattern_seqof<
1791    'a,
1792    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1793    _Value: preserves::value::NestedValue + 'a
1794>(_ctxt: _L, value: &_Value) -> std::result::Result<SimplePattern<_Value>, _support::ParseError> {
1795    let _tmp0 = value.value().to_record(None)?;
1796    if _tmp0.label() != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_24_SEQOF { return Err(_support::ParseError::conformance_error("schema.SimplePattern::seqof")); }
1797    let _tmp1 = ();
1798    if _tmp0.fields().len() < 1 { return Err(_support::ParseError::conformance_error("schema.SimplePattern::seqof")); }
1799    let _tmp2 = SimplePattern::parse(_ctxt, (&_tmp0.fields()[0]))?;
1800    Ok(SimplePattern::Seqof {pattern: std::boxed::Box::new(_tmp2)})
1801}
1802
1803fn parse_simple_pattern_setof<
1804    'a,
1805    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1806    _Value: preserves::value::NestedValue + 'a
1807>(_ctxt: _L, value: &_Value) -> std::result::Result<SimplePattern<_Value>, _support::ParseError> {
1808    let _tmp0 = value.value().to_record(None)?;
1809    if _tmp0.label() != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_25_SETOF { return Err(_support::ParseError::conformance_error("schema.SimplePattern::setof")); }
1810    let _tmp1 = ();
1811    if _tmp0.fields().len() < 1 { return Err(_support::ParseError::conformance_error("schema.SimplePattern::setof")); }
1812    let _tmp2 = SimplePattern::parse(_ctxt, (&_tmp0.fields()[0]))?;
1813    Ok(SimplePattern::Setof {pattern: std::boxed::Box::new(_tmp2)})
1814}
1815
1816fn parse_simple_pattern_dictof<
1817    'a,
1818    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1819    _Value: preserves::value::NestedValue + 'a
1820>(_ctxt: _L, value: &_Value) -> std::result::Result<SimplePattern<_Value>, _support::ParseError> {
1821    let _tmp0 = value.value().to_record(None)?;
1822    if _tmp0.label() != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_26_DICTOF { return Err(_support::ParseError::conformance_error("schema.SimplePattern::dictof")); }
1823    let _tmp1 = ();
1824    if _tmp0.fields().len() < 2 { return Err(_support::ParseError::conformance_error("schema.SimplePattern::dictof")); }
1825    let _tmp2 = SimplePattern::parse(_ctxt, (&_tmp0.fields()[0]))?;
1826    let _tmp3 = SimplePattern::parse(_ctxt, (&_tmp0.fields()[1]))?;
1827    Ok(SimplePattern::Dictof {key: std::boxed::Box::new(_tmp2), value: std::boxed::Box::new(_tmp3)})
1828}
1829
1830fn parse_simple_pattern_ref<
1831    'a,
1832    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1833    _Value: preserves::value::NestedValue + 'a
1834>(_ctxt: _L, value: &_Value) -> std::result::Result<SimplePattern<_Value>, _support::ParseError> {
1835    let _tmp0 = Ref::parse(_ctxt, value)?;
1836    Ok(SimplePattern::Ref(std::boxed::Box::new(_tmp0)))
1837}
1838
1839impl<
1840    'a,
1841    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1842    _Value: preserves::value::NestedValue + 'a
1843> _support::Parse<_L, _Value> for SimplePattern<_Value> {
1844    fn parse(_ctxt: _L, value: &_Value) -> std::result::Result<Self, _support::ParseError> {
1845        if let Ok(r) = parse_simple_pattern_any(_ctxt, value) { return Ok(r); }
1846        if let Ok(r) = parse_simple_pattern_atom(_ctxt, value) { return Ok(r); }
1847        if let Ok(r) = parse_simple_pattern_embedded(_ctxt, value) { return Ok(r); }
1848        if let Ok(r) = parse_simple_pattern_lit(_ctxt, value) { return Ok(r); }
1849        if let Ok(r) = parse_simple_pattern_seqof(_ctxt, value) { return Ok(r); }
1850        if let Ok(r) = parse_simple_pattern_setof(_ctxt, value) { return Ok(r); }
1851        if let Ok(r) = parse_simple_pattern_dictof(_ctxt, value) { return Ok(r); }
1852        if let Ok(r) = parse_simple_pattern_ref(_ctxt, value) { return Ok(r); }
1853        Err(_support::ParseError::conformance_error("schema.SimplePattern"))
1854    }
1855}
1856
1857impl<
1858    'a,
1859    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1860    _Value: preserves::value::NestedValue + 'a
1861> _support::Unparse<_L, _Value> for SimplePattern<_Value> {
1862    fn unparse(&self, _ctxt: _L) -> _Value {
1863        match self {
1864            SimplePattern::Any => (&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_20_ANY).clone(),
1865            SimplePattern::Atom {atom_kind: _tmp0} => {
1866                let mut _tmp1 = preserves::value::Record(vec![(&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_21_ATOM).clone()]);
1867                _tmp1.fields_vec_mut().push(_tmp0.as_ref().unparse(_ctxt));
1868                _tmp1.finish().wrap()
1869            },
1870            SimplePattern::Embedded {interface: _tmp0} => {
1871                let mut _tmp1 = preserves::value::Record(vec![(&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_22_EMBEDDED).clone()]);
1872                _tmp1.fields_vec_mut().push(_tmp0.as_ref().unparse(_ctxt));
1873                _tmp1.finish().wrap()
1874            },
1875            SimplePattern::Lit {value: _tmp0} => {
1876                let mut _tmp1 = preserves::value::Record(vec![(&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_23_LIT).clone()]);
1877                _tmp1.fields_vec_mut().push(_tmp0.clone());
1878                _tmp1.finish().wrap()
1879            },
1880            SimplePattern::Seqof {pattern: _tmp0} => {
1881                let mut _tmp1 = preserves::value::Record(vec![(&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_24_SEQOF).clone()]);
1882                _tmp1.fields_vec_mut().push(_tmp0.as_ref().unparse(_ctxt));
1883                _tmp1.finish().wrap()
1884            },
1885            SimplePattern::Setof {pattern: _tmp0} => {
1886                let mut _tmp1 = preserves::value::Record(vec![(&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_25_SETOF).clone()]);
1887                _tmp1.fields_vec_mut().push(_tmp0.as_ref().unparse(_ctxt));
1888                _tmp1.finish().wrap()
1889            },
1890            SimplePattern::Dictof {key: _tmp0, value: _tmp1} => {
1891                let mut _tmp2 = preserves::value::Record(vec![(&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_26_DICTOF).clone()]);
1892                _tmp2.fields_vec_mut().push(_tmp0.as_ref().unparse(_ctxt));
1893                _tmp2.fields_vec_mut().push(_tmp1.as_ref().unparse(_ctxt));
1894                _tmp2.finish().wrap()
1895            },
1896            SimplePattern::Ref(_tmp0) => _tmp0.as_ref().unparse(_ctxt),
1897        }
1898    }
1899}
1900
1901#[derive(Debug, PartialOrd, Ord, PartialEq, Eq, Clone, Hash)]
1902pub struct Version;
1903
1904impl preserves::value::Domain for Version {}
1905
1906impl<_Value: preserves::value::NestedValue> _support::Deserialize<_Value> for Version {
1907    fn deserialize<'de, R: _support::Reader<'de, _Value>>(r: &mut R) -> std::result::Result<Self, _support::ParseError> {
1908        match r.next_token(true)? {
1909            preserves::value::Token::Atom(v) => match v.value() {
1910                preserves::value::Value::SignedInteger(w) if *w == (1).into() => {}
1911                _ => return Err(_support::ParseError::conformance_error("schema.Version"))?,
1912            }
1913            _ => return Err(_support::ParseError::conformance_error("schema.Version"))?,
1914        }
1915        let _tmp0 = ();
1916        Ok(Version)
1917    }
1918}
1919
1920impl<
1921    'a,
1922    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1923    _Value: preserves::value::NestedValue + 'a
1924> _support::Parse<_L, _Value> for Version {
1925    fn parse(_ctxt: _L, value: &_Value) -> std::result::Result<Self, _support::ParseError> {
1926        if value != &<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_27_1 { return Err(_support::ParseError::conformance_error("schema.Version")); }
1927        let _tmp0 = ();
1928        Ok(Version)
1929    }
1930}
1931
1932impl<
1933    'a,
1934    _L: Copy + Into<&'a crate::gen::Language<_Value>>,
1935    _Value: preserves::value::NestedValue + 'a
1936> _support::Unparse<_L, _Value> for Version {
1937    fn unparse(&self, _ctxt: _L) -> _Value {
1938        let Version = self;
1939        (&<_L as Into<&'a crate::gen::Language<_Value>>>::into(_ctxt).LIT_27_1).clone()
1940    }
1941}