1use crate::models::schema::{MaxOccurs, QName};
2use core::ops::Deref;
3use xsd_parser_types::{
4 misc::Namespace,
5 quick_xml::{
6 DeserializeBytes, DeserializeHelper, Error, ErrorKind, RawByteStr, ValidateError,
7 WithDeserializer,
8 },
9 xml::AnyElement,
10};
11pub const NS_XS: Namespace = Namespace::new_const(b"http://www.w3.org/2001/XMLSchema");
12pub const NS_XML: Namespace = Namespace::new_const(b"http://www.w3.org/XML/1998/namespace");
13#[derive(Clone, Debug, Eq, PartialEq)]
14pub struct Schema {
15 pub target_namespace: Option<String>,
16 pub version: Option<String>,
17 pub final_default: FullDerivationSetType,
18 pub block_default: BlockSetType,
19 pub attribute_form_default: FormChoiceType,
20 pub element_form_default: FormChoiceType,
21 pub default_attributes: Option<QName>,
22 pub xpath_default_namespace: XpathDefaultNamespaceType,
23 pub id: Option<String>,
24 pub lang: Option<String>,
25 pub content: Vec<SchemaContent>,
26}
27#[derive(Clone, Debug, Eq, PartialEq)]
28pub enum SchemaContent {
29 Include(Include),
30 Import(Import),
31 Redefine(Redefine),
32 Override(Override),
33 Annotation(Annotation),
34 DefaultOpenContent(DefaultOpenContent),
35 SimpleType(SimpleBaseType),
36 ComplexType(ComplexBaseType),
37 Group(GroupType),
38 AttributeGroup(AttributeGroupType),
39 Element(ElementType),
40 Attribute(AttributeType),
41 Notation(Notation),
42}
43impl Schema {
44 #[must_use]
45 pub fn default_final_default() -> FullDerivationSetType {
46 FullDerivationSetType::TypeDerivationControlList(TypeDerivationControlList(Vec::new()))
47 }
48 #[must_use]
49 pub fn default_block_default() -> BlockSetType {
50 BlockSetType::BlockSetItemList(BlockSetItemList(Vec::new()))
51 }
52 #[must_use]
53 pub fn default_attribute_form_default() -> FormChoiceType {
54 FormChoiceType::Unqualified
55 }
56 #[must_use]
57 pub fn default_element_form_default() -> FormChoiceType {
58 FormChoiceType::Unqualified
59 }
60 #[must_use]
61 pub fn default_xpath_default_namespace() -> XpathDefaultNamespaceType {
62 XpathDefaultNamespaceType::String(String::from("##local"))
63 }
64}
65impl WithDeserializer for Schema {
66 type Deserializer = Box<quick_xml_deserialize::SchemaDeserializer>;
67}
68impl WithDeserializer for SchemaContent {
69 type Deserializer = Box<quick_xml_deserialize::SchemaContentDeserializer>;
70}
71#[derive(Clone, Debug, Eq, PartialEq)]
72pub enum FullDerivationSetType {
73 All,
74 TypeDerivationControlList(TypeDerivationControlList),
75}
76impl DeserializeBytes for FullDerivationSetType {
77 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
78 match bytes {
79 b"#all" => Ok(Self::All),
80 x => Ok(Self::TypeDerivationControlList(
81 TypeDerivationControlList::deserialize_bytes(helper, x)?,
82 )),
83 }
84 }
85}
86#[derive(Clone, Debug, Default, Eq, PartialEq)]
87pub struct TypeDerivationControlList(pub Vec<TypeDerivationControlType>);
88impl DeserializeBytes for TypeDerivationControlList {
89 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
90 Ok(Self(
91 bytes
92 .split(|b| *b == b' ' || *b == b'|' || *b == b',' || *b == b';')
93 .map(|bytes| TypeDerivationControlType::deserialize_bytes(helper, bytes))
94 .collect::<Result<Vec<_>, _>>()?,
95 ))
96 }
97}
98#[derive(Clone, Debug, Eq, PartialEq)]
99pub enum BlockSetType {
100 All,
101 BlockSetItemList(BlockSetItemList),
102}
103impl DeserializeBytes for BlockSetType {
104 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
105 match bytes {
106 b"#all" => Ok(Self::All),
107 x => Ok(Self::BlockSetItemList(BlockSetItemList::deserialize_bytes(
108 helper, x,
109 )?)),
110 }
111 }
112}
113#[derive(Clone, Debug, Default, Eq, PartialEq)]
114pub struct BlockSetItemList(pub Vec<BlockSetItemType>);
115impl DeserializeBytes for BlockSetItemList {
116 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
117 Ok(Self(
118 bytes
119 .split(|b| *b == b' ' || *b == b'|' || *b == b',' || *b == b';')
120 .map(|bytes| BlockSetItemType::deserialize_bytes(helper, bytes))
121 .collect::<Result<Vec<_>, _>>()?,
122 ))
123 }
124}
125#[derive(Clone, Debug, Eq, PartialEq)]
126pub enum FormChoiceType {
127 Qualified,
128 Unqualified,
129}
130impl DeserializeBytes for FormChoiceType {
131 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
132 match bytes {
133 b"qualified" => Ok(Self::Qualified),
134 b"unqualified" => Ok(Self::Unqualified),
135 x => Err(Error::from(ErrorKind::UnknownOrInvalidValue(
136 RawByteStr::from_slice(x),
137 ))),
138 }
139 }
140}
141#[derive(Clone, Debug, Eq, PartialEq)]
142pub enum XpathDefaultNamespaceType {
143 String(String),
144 DefaultNamespace,
145 TargetNamespace,
146 Local,
147}
148impl DeserializeBytes for XpathDefaultNamespaceType {
149 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
150 match bytes {
151 b"##defaultNamespace" => Ok(Self::DefaultNamespace),
152 b"##targetNamespace" => Ok(Self::TargetNamespace),
153 b"##local" => Ok(Self::Local),
154 x => Ok(Self::String(String::deserialize_bytes(helper, x)?)),
155 }
156 }
157}
158#[derive(Clone, Debug, Eq, PartialEq)]
159pub struct Include {
160 pub id: Option<String>,
161 pub schema_location: String,
162 pub annotation: Option<Annotation>,
163}
164impl WithDeserializer for Include {
165 type Deserializer = Box<quick_xml_deserialize::IncludeDeserializer>;
166}
167#[derive(Clone, Debug, Eq, PartialEq)]
168pub struct Import {
169 pub id: Option<String>,
170 pub namespace: Option<String>,
171 pub schema_location: Option<String>,
172 pub annotation: Option<Annotation>,
173}
174impl WithDeserializer for Import {
175 type Deserializer = Box<quick_xml_deserialize::ImportDeserializer>;
176}
177#[derive(Clone, Debug, Eq, PartialEq)]
178pub struct Redefine {
179 pub schema_location: String,
180 pub id: Option<String>,
181 pub content: Vec<RedefineContent>,
182}
183#[derive(Clone, Debug, Eq, PartialEq)]
184pub enum RedefineContent {
185 Annotation(Annotation),
186 SimpleType(SimpleBaseType),
187 ComplexType(ComplexBaseType),
188 Group(GroupType),
189 AttributeGroup(AttributeGroupType),
190}
191impl WithDeserializer for Redefine {
192 type Deserializer = Box<quick_xml_deserialize::RedefineDeserializer>;
193}
194impl WithDeserializer for RedefineContent {
195 type Deserializer = Box<quick_xml_deserialize::RedefineContentDeserializer>;
196}
197#[derive(Clone, Debug, Eq, PartialEq)]
198pub struct Override {
199 pub schema_location: String,
200 pub id: Option<String>,
201 pub content: Vec<OverrideContent>,
202}
203#[derive(Clone, Debug, Eq, PartialEq)]
204pub enum OverrideContent {
205 Annotation(Annotation),
206 SimpleType(SimpleBaseType),
207 ComplexType(ComplexBaseType),
208 Group(GroupType),
209 AttributeGroup(AttributeGroupType),
210 Element(ElementType),
211 Attribute(AttributeType),
212 Notation(Notation),
213}
214impl WithDeserializer for Override {
215 type Deserializer = Box<quick_xml_deserialize::OverrideDeserializer>;
216}
217impl WithDeserializer for OverrideContent {
218 type Deserializer = Box<quick_xml_deserialize::OverrideContentDeserializer>;
219}
220#[derive(Clone, Debug, Eq, PartialEq)]
221pub struct Annotation {
222 pub id: Option<String>,
223 pub content: Vec<AnnotationContent>,
224}
225#[derive(Clone, Debug, Eq, PartialEq)]
226pub enum AnnotationContent {
227 Appinfo(AnyElement),
228 Documentation(AnyElement),
229}
230impl WithDeserializer for Annotation {
231 type Deserializer = Box<quick_xml_deserialize::AnnotationDeserializer>;
232}
233impl WithDeserializer for AnnotationContent {
234 type Deserializer = Box<quick_xml_deserialize::AnnotationContentDeserializer>;
235}
236#[derive(Clone, Debug, Eq, PartialEq)]
237pub struct DefaultOpenContent {
238 pub id: Option<String>,
239 pub applies_to_empty: bool,
240 pub mode: DefaultOpenContentModeType,
241 pub annotation: Option<Annotation>,
242 pub any: WildcardType,
243}
244impl DefaultOpenContent {
245 #[must_use]
246 pub fn default_applies_to_empty() -> bool {
247 false
248 }
249 #[must_use]
250 pub fn default_mode() -> DefaultOpenContentModeType {
251 DefaultOpenContentModeType::Interleave
252 }
253}
254impl WithDeserializer for DefaultOpenContent {
255 type Deserializer = Box<quick_xml_deserialize::DefaultOpenContentDeserializer>;
256}
257#[derive(Clone, Debug, Eq, PartialEq)]
258pub struct SimpleBaseType {
259 pub id: Option<String>,
260 pub final_: Option<SimpleDerivationSetType>,
261 pub name: Option<String>,
262 pub content: Vec<SimpleBaseTypeContent>,
263}
264#[derive(Clone, Debug, Eq, PartialEq)]
265pub enum SimpleBaseTypeContent {
266 Annotation(Annotation),
267 Restriction(Restriction),
268 List(List),
269 Union(Union),
270}
271impl WithDeserializer for SimpleBaseType {
272 type Deserializer = Box<quick_xml_deserialize::SimpleBaseTypeDeserializer>;
273}
274impl WithDeserializer for SimpleBaseTypeContent {
275 type Deserializer = Box<quick_xml_deserialize::SimpleBaseTypeContentDeserializer>;
276}
277#[derive(Clone, Debug, Eq, PartialEq)]
278pub struct ComplexBaseType {
279 pub id: Option<String>,
280 pub name: Option<String>,
281 pub mixed: Option<bool>,
282 pub abstract_: bool,
283 pub final_: Option<DerivationSetType>,
284 pub block: Option<DerivationSetType>,
285 pub default_attributes_apply: bool,
286 pub content: Vec<ComplexBaseTypeContent>,
287}
288#[derive(Clone, Debug, Eq, PartialEq)]
289pub enum ComplexBaseTypeContent {
290 Annotation(Annotation),
291 SimpleContent(SimpleContent),
292 ComplexContent(ComplexContent),
293 OpenContent(OpenContent),
294 Group(GroupType),
295 All(GroupType),
296 Choice(GroupType),
297 Sequence(GroupType),
298 Attribute(AttributeType),
299 AttributeGroup(AttributeGroupType),
300 AnyAttribute(AnyAttribute),
301 Assert(AssertionType),
302}
303impl ComplexBaseType {
304 #[must_use]
305 pub fn default_abstract_() -> bool {
306 false
307 }
308 #[must_use]
309 pub fn default_default_attributes_apply() -> bool {
310 true
311 }
312}
313impl WithDeserializer for ComplexBaseType {
314 type Deserializer = Box<quick_xml_deserialize::ComplexBaseTypeDeserializer>;
315}
316impl WithDeserializer for ComplexBaseTypeContent {
317 type Deserializer = Box<quick_xml_deserialize::ComplexBaseTypeContentDeserializer>;
318}
319#[derive(Clone, Debug, Eq, PartialEq)]
320pub struct GroupType {
321 pub id: Option<String>,
322 pub name: Option<String>,
323 pub ref_: Option<QName>,
324 pub min_occurs: usize,
325 pub max_occurs: MaxOccurs,
326 pub content: Vec<GroupTypeContent>,
327}
328#[derive(Clone, Debug, Eq, PartialEq)]
329pub enum GroupTypeContent {
330 Annotation(Annotation),
331 Element(ElementType),
332 Group(GroupType),
333 All(GroupType),
334 Choice(GroupType),
335 Sequence(GroupType),
336 Any(Any),
337}
338impl GroupType {
339 #[must_use]
340 pub fn default_min_occurs() -> usize {
341 1usize
342 }
343 #[must_use]
344 pub fn default_max_occurs() -> MaxOccurs {
345 MaxOccurs::Bounded(1usize)
346 }
347}
348impl WithDeserializer for GroupType {
349 type Deserializer = Box<quick_xml_deserialize::GroupTypeDeserializer>;
350}
351impl WithDeserializer for GroupTypeContent {
352 type Deserializer = Box<quick_xml_deserialize::GroupTypeContentDeserializer>;
353}
354#[derive(Clone, Debug, Eq, PartialEq)]
355pub struct AttributeGroupType {
356 pub id: Option<String>,
357 pub name: Option<String>,
358 pub ref_: Option<QName>,
359 pub content: Vec<AttributeGroupTypeContent>,
360}
361#[derive(Clone, Debug, Eq, PartialEq)]
362pub enum AttributeGroupTypeContent {
363 Annotation(Annotation),
364 Attribute(AttributeType),
365 AttributeGroup(AttributeGroupType),
366 AnyAttribute(AnyAttribute),
367}
368impl WithDeserializer for AttributeGroupType {
369 type Deserializer = Box<quick_xml_deserialize::AttributeGroupTypeDeserializer>;
370}
371impl WithDeserializer for AttributeGroupTypeContent {
372 type Deserializer = Box<quick_xml_deserialize::AttributeGroupTypeContentDeserializer>;
373}
374#[derive(Clone, Debug, Eq, PartialEq)]
375pub struct ElementType {
376 pub id: Option<String>,
377 pub name: Option<String>,
378 pub ref_: Option<QName>,
379 pub type_: Option<QName>,
380 pub substitution_group: Option<QNameList>,
381 pub min_occurs: usize,
382 pub max_occurs: MaxOccurs,
383 pub default: Option<String>,
384 pub fixed: Option<String>,
385 pub nillable: Option<bool>,
386 pub abstract_: bool,
387 pub final_: Option<DerivationSetType>,
388 pub block: Option<BlockSetType>,
389 pub form: Option<FormChoiceType>,
390 pub target_namespace: Option<String>,
391 pub content: Vec<ElementTypeContent>,
392}
393#[derive(Clone, Debug, Eq, PartialEq)]
394pub enum ElementTypeContent {
395 Annotation(Annotation),
396 SimpleType(SimpleBaseType),
397 ComplexType(ComplexBaseType),
398 Alternative(AltType),
399 Unique(KeybaseType),
400 Key(KeybaseType),
401 Keyref(Keyref),
402}
403impl ElementType {
404 #[must_use]
405 pub fn default_min_occurs() -> usize {
406 1usize
407 }
408 #[must_use]
409 pub fn default_max_occurs() -> MaxOccurs {
410 MaxOccurs::Bounded(1usize)
411 }
412 #[must_use]
413 pub fn default_abstract_() -> bool {
414 false
415 }
416}
417impl WithDeserializer for ElementType {
418 type Deserializer = Box<quick_xml_deserialize::ElementTypeDeserializer>;
419}
420impl WithDeserializer for ElementTypeContent {
421 type Deserializer = Box<quick_xml_deserialize::ElementTypeContentDeserializer>;
422}
423#[derive(Clone, Debug, Eq, PartialEq)]
424pub struct AttributeType {
425 pub id: Option<String>,
426 pub name: Option<String>,
427 pub ref_: Option<QName>,
428 pub type_: Option<QName>,
429 pub use_: AttributeUseType,
430 pub default: Option<String>,
431 pub fixed: Option<String>,
432 pub form: Option<FormChoiceType>,
433 pub target_namespace: Option<String>,
434 pub inheritable: Option<bool>,
435 pub annotation: Option<Annotation>,
436 pub simple_type: Option<SimpleBaseType>,
437}
438impl AttributeType {
439 #[must_use]
440 pub fn default_use_() -> AttributeUseType {
441 AttributeUseType::Optional
442 }
443}
444impl WithDeserializer for AttributeType {
445 type Deserializer = Box<quick_xml_deserialize::AttributeTypeDeserializer>;
446}
447#[derive(Clone, Debug, Eq, PartialEq)]
448pub struct Notation {
449 pub id: Option<String>,
450 pub name: String,
451 pub public: Option<String>,
452 pub system: Option<String>,
453 pub annotation: Option<Annotation>,
454}
455impl WithDeserializer for Notation {
456 type Deserializer = Box<quick_xml_deserialize::NotationDeserializer>;
457}
458#[derive(Clone, Debug, Eq, PartialEq)]
459pub enum TypeDerivationControlType {
460 Extension,
461 Restriction,
462 List,
463 Union,
464}
465impl DeserializeBytes for TypeDerivationControlType {
466 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
467 match bytes {
468 b"extension" => Ok(Self::Extension),
469 b"restriction" => Ok(Self::Restriction),
470 b"list" => Ok(Self::List),
471 b"union" => Ok(Self::Union),
472 x => Err(Error::from(ErrorKind::UnknownOrInvalidValue(
473 RawByteStr::from_slice(x),
474 ))),
475 }
476 }
477}
478#[derive(Clone, Debug, Eq, PartialEq)]
479pub enum BlockSetItemType {
480 Extension,
481 Restriction,
482 Substitution,
483}
484impl DeserializeBytes for BlockSetItemType {
485 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
486 match bytes {
487 b"extension" => Ok(Self::Extension),
488 b"restriction" => Ok(Self::Restriction),
489 b"substitution" => Ok(Self::Substitution),
490 x => Err(Error::from(ErrorKind::UnknownOrInvalidValue(
491 RawByteStr::from_slice(x),
492 ))),
493 }
494 }
495}
496#[derive(Clone, Debug, Eq, PartialEq)]
497pub enum DefaultOpenContentModeType {
498 Interleave,
499 Suffix,
500}
501impl DeserializeBytes for DefaultOpenContentModeType {
502 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
503 match bytes {
504 b"interleave" => Ok(Self::Interleave),
505 b"suffix" => Ok(Self::Suffix),
506 x => Err(Error::from(ErrorKind::UnknownOrInvalidValue(
507 RawByteStr::from_slice(x),
508 ))),
509 }
510 }
511}
512#[derive(Clone, Debug, Eq, PartialEq)]
513pub struct WildcardType {
514 pub id: Option<String>,
515 pub namespace: Option<NamespaceListType>,
516 pub not_namespace: Option<NotNamespaceType>,
517 pub process_contents: ProcessContentsType,
518 pub annotation: Option<Annotation>,
519}
520impl WildcardType {
521 #[must_use]
522 pub fn default_process_contents() -> ProcessContentsType {
523 ProcessContentsType::Strict
524 }
525}
526impl WithDeserializer for WildcardType {
527 type Deserializer = Box<quick_xml_deserialize::WildcardTypeDeserializer>;
528}
529#[derive(Clone, Debug, Eq, PartialEq)]
530pub enum SimpleDerivationSetType {
531 All,
532 SimpleDerivationSetItemList(SimpleDerivationSetItemList),
533}
534impl DeserializeBytes for SimpleDerivationSetType {
535 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
536 match bytes {
537 b"#all" => Ok(Self::All),
538 x => Ok(Self::SimpleDerivationSetItemList(
539 SimpleDerivationSetItemList::deserialize_bytes(helper, x)?,
540 )),
541 }
542 }
543}
544#[derive(Clone, Debug, Eq, PartialEq)]
545pub struct Restriction {
546 pub id: Option<String>,
547 pub base: Option<QName>,
548 pub content: Vec<RestrictionContent>,
549}
550#[derive(Clone, Debug, Eq, PartialEq)]
551pub enum RestrictionContent {
552 Annotation(Annotation),
553 SimpleType(SimpleBaseType),
554 Facet(Facet),
555}
556impl WithDeserializer for Restriction {
557 type Deserializer = Box<quick_xml_deserialize::RestrictionDeserializer>;
558}
559impl WithDeserializer for RestrictionContent {
560 type Deserializer = Box<quick_xml_deserialize::RestrictionContentDeserializer>;
561}
562#[derive(Clone, Debug, Eq, PartialEq)]
563pub struct List {
564 pub id: Option<String>,
565 pub item_type: Option<QName>,
566 pub annotation: Option<Annotation>,
567 pub simple_type: Option<Box<SimpleBaseType>>,
568}
569impl WithDeserializer for List {
570 type Deserializer = Box<quick_xml_deserialize::ListDeserializer>;
571}
572#[derive(Clone, Debug, Eq, PartialEq)]
573pub struct Union {
574 pub id: Option<String>,
575 pub member_types: Option<QNameList>,
576 pub annotation: Option<Annotation>,
577 pub simple_type: Vec<SimpleBaseType>,
578}
579impl WithDeserializer for Union {
580 type Deserializer = Box<quick_xml_deserialize::UnionDeserializer>;
581}
582#[derive(Clone, Debug, Eq, PartialEq)]
583pub enum DerivationSetType {
584 All,
585 ReducedDerivationControlList(ReducedDerivationControlList),
586}
587impl DeserializeBytes for DerivationSetType {
588 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
589 match bytes {
590 b"#all" => Ok(Self::All),
591 x => Ok(Self::ReducedDerivationControlList(
592 ReducedDerivationControlList::deserialize_bytes(helper, x)?,
593 )),
594 }
595 }
596}
597#[derive(Clone, Debug, Eq, PartialEq)]
598pub struct SimpleContent {
599 pub id: Option<String>,
600 pub content: Vec<SimpleContentContent>,
601}
602#[derive(Clone, Debug, Eq, PartialEq)]
603pub enum SimpleContentContent {
604 Annotation(Annotation),
605 Restriction(RestrictionType),
606 Extension(ExtensionType),
607}
608impl WithDeserializer for SimpleContent {
609 type Deserializer = Box<quick_xml_deserialize::SimpleContentDeserializer>;
610}
611impl WithDeserializer for SimpleContentContent {
612 type Deserializer = Box<quick_xml_deserialize::SimpleContentContentDeserializer>;
613}
614#[derive(Clone, Debug, Eq, PartialEq)]
615pub struct ComplexContent {
616 pub id: Option<String>,
617 pub mixed: Option<bool>,
618 pub content: Vec<ComplexContentContent>,
619}
620#[derive(Clone, Debug, Eq, PartialEq)]
621pub enum ComplexContentContent {
622 Annotation(Annotation),
623 Restriction(RestrictionType),
624 Extension(ExtensionType),
625}
626impl WithDeserializer for ComplexContent {
627 type Deserializer = Box<quick_xml_deserialize::ComplexContentDeserializer>;
628}
629impl WithDeserializer for ComplexContentContent {
630 type Deserializer = Box<quick_xml_deserialize::ComplexContentContentDeserializer>;
631}
632#[derive(Clone, Debug, Eq, PartialEq)]
633pub struct OpenContent {
634 pub id: Option<String>,
635 pub mode: OpenContentModeType,
636 pub annotation: Option<Annotation>,
637 pub any: Option<WildcardType>,
638}
639impl OpenContent {
640 #[must_use]
641 pub fn default_mode() -> OpenContentModeType {
642 OpenContentModeType::Interleave
643 }
644}
645impl WithDeserializer for OpenContent {
646 type Deserializer = Box<quick_xml_deserialize::OpenContentDeserializer>;
647}
648#[derive(Clone, Debug, Eq, PartialEq)]
649pub struct AnyAttribute {
650 pub id: Option<String>,
651 pub namespace: Option<NamespaceListType>,
652 pub not_namespace: Option<NotNamespaceType>,
653 pub process_contents: ProcessContentsType,
654 pub not_q_name: Option<QnameListAType>,
655 pub annotation: Option<Annotation>,
656}
657impl AnyAttribute {
658 #[must_use]
659 pub fn default_process_contents() -> ProcessContentsType {
660 ProcessContentsType::Strict
661 }
662}
663impl WithDeserializer for AnyAttribute {
664 type Deserializer = Box<quick_xml_deserialize::AnyAttributeDeserializer>;
665}
666#[derive(Clone, Debug, Eq, PartialEq)]
667pub struct AssertionType {
668 pub id: Option<String>,
669 pub test: Option<String>,
670 pub xpath_default_namespace: Option<XpathDefaultNamespaceType>,
671 pub annotation: Option<Annotation>,
672}
673impl WithDeserializer for AssertionType {
674 type Deserializer = Box<quick_xml_deserialize::AssertionTypeDeserializer>;
675}
676#[derive(Clone, Debug, Eq, PartialEq)]
677pub struct Any {
678 pub id: Option<String>,
679 pub namespace: Option<NamespaceListType>,
680 pub not_namespace: Option<NotNamespaceType>,
681 pub process_contents: ProcessContentsType,
682 pub not_q_name: Option<QnameListType>,
683 pub min_occurs: usize,
684 pub max_occurs: MaxOccurs,
685 pub annotation: Option<Annotation>,
686}
687impl Any {
688 #[must_use]
689 pub fn default_process_contents() -> ProcessContentsType {
690 ProcessContentsType::Strict
691 }
692 #[must_use]
693 pub fn default_min_occurs() -> usize {
694 1usize
695 }
696 #[must_use]
697 pub fn default_max_occurs() -> MaxOccurs {
698 MaxOccurs::Bounded(1usize)
699 }
700}
701impl WithDeserializer for Any {
702 type Deserializer = Box<quick_xml_deserialize::AnyDeserializer>;
703}
704#[derive(Clone, Debug, Default, Eq, PartialEq)]
705pub struct QNameList(pub Vec<QName>);
706impl DeserializeBytes for QNameList {
707 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
708 Ok(Self(
709 bytes
710 .split(|b| *b == b' ' || *b == b'|' || *b == b',' || *b == b';')
711 .map(|bytes| QName::deserialize_bytes(helper, bytes))
712 .collect::<Result<Vec<_>, _>>()?,
713 ))
714 }
715}
716#[derive(Clone, Debug, Eq, PartialEq)]
717pub struct AltType {
718 pub id: Option<String>,
719 pub test: Option<String>,
720 pub type_: Option<QName>,
721 pub xpath_default_namespace: Option<XpathDefaultNamespaceType>,
722 pub content: Vec<AltTypeContent>,
723}
724#[derive(Clone, Debug, Eq, PartialEq)]
725pub enum AltTypeContent {
726 Annotation(Annotation),
727 SimpleType(SimpleBaseType),
728 ComplexType(ComplexBaseType),
729}
730impl WithDeserializer for AltType {
731 type Deserializer = Box<quick_xml_deserialize::AltTypeDeserializer>;
732}
733impl WithDeserializer for AltTypeContent {
734 type Deserializer = Box<quick_xml_deserialize::AltTypeContentDeserializer>;
735}
736#[derive(Clone, Debug, Eq, PartialEq)]
737pub struct KeybaseType {
738 pub id: Option<String>,
739 pub name: Option<String>,
740 pub ref_: Option<QName>,
741 pub content: Option<KeybaseTypeContent>,
742}
743#[derive(Clone, Debug, Eq, PartialEq)]
744pub struct KeybaseTypeContent {
745 pub annotation: Option<Annotation>,
746 pub selector: Field,
747 pub field: Vec<Field>,
748}
749impl WithDeserializer for KeybaseType {
750 type Deserializer = Box<quick_xml_deserialize::KeybaseTypeDeserializer>;
751}
752impl WithDeserializer for KeybaseTypeContent {
753 type Deserializer = Box<quick_xml_deserialize::KeybaseTypeContentDeserializer>;
754}
755#[derive(Clone, Debug, Eq, PartialEq)]
756pub struct Keyref {
757 pub id: Option<String>,
758 pub name: Option<String>,
759 pub ref_: Option<QName>,
760 pub refer: Option<QName>,
761 pub content: Option<KeyrefContent>,
762}
763#[derive(Clone, Debug, Eq, PartialEq)]
764pub struct KeyrefContent {
765 pub annotation: Option<Annotation>,
766 pub selector: Field,
767 pub field: Vec<Field>,
768}
769impl WithDeserializer for Keyref {
770 type Deserializer = Box<quick_xml_deserialize::KeyrefDeserializer>;
771}
772impl WithDeserializer for KeyrefContent {
773 type Deserializer = Box<quick_xml_deserialize::KeyrefContentDeserializer>;
774}
775#[derive(Clone, Debug, Eq, PartialEq)]
776pub enum AttributeUseType {
777 Prohibited,
778 Optional,
779 Required,
780}
781impl DeserializeBytes for AttributeUseType {
782 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
783 match bytes {
784 b"prohibited" => Ok(Self::Prohibited),
785 b"optional" => Ok(Self::Optional),
786 b"required" => Ok(Self::Required),
787 x => Err(Error::from(ErrorKind::UnknownOrInvalidValue(
788 RawByteStr::from_slice(x),
789 ))),
790 }
791 }
792}
793#[derive(Clone, Debug, Eq, PartialEq)]
794pub enum NamespaceListType {
795 Any,
796 Other,
797 BasicNamespaceList(BasicNamespaceListType),
798}
799impl DeserializeBytes for NamespaceListType {
800 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
801 match bytes {
802 b"##any" => Ok(Self::Any),
803 b"##other" => Ok(Self::Other),
804 x => Ok(Self::BasicNamespaceList(
805 BasicNamespaceListType::deserialize_bytes(helper, x)?,
806 )),
807 }
808 }
809}
810#[derive(Clone, Debug, Eq, PartialEq)]
811pub struct NotNamespaceType(pub Vec<BasicNamespaceListItemType>);
812impl NotNamespaceType {
813 pub fn new(inner: Vec<BasicNamespaceListItemType>) -> Result<Self, ValidateError> {
814 Self::validate_value(&inner)?;
815 Ok(Self(inner))
816 }
817 #[must_use]
818 pub fn into_inner(self) -> Vec<BasicNamespaceListItemType> {
819 self.0
820 }
821 pub fn validate_value(value: &Vec<BasicNamespaceListItemType>) -> Result<(), ValidateError> {
822 if value.is_empty() {
823 return Err(ValidateError::MinLength(1usize));
824 }
825 Ok(())
826 }
827}
828impl From<NotNamespaceType> for Vec<BasicNamespaceListItemType> {
829 fn from(value: NotNamespaceType) -> Vec<BasicNamespaceListItemType> {
830 value.0
831 }
832}
833impl TryFrom<Vec<BasicNamespaceListItemType>> for NotNamespaceType {
834 type Error = ValidateError;
835 fn try_from(value: Vec<BasicNamespaceListItemType>) -> Result<Self, ValidateError> {
836 Self::new(value)
837 }
838}
839impl Deref for NotNamespaceType {
840 type Target = Vec<BasicNamespaceListItemType>;
841 fn deref(&self) -> &Self::Target {
842 &self.0
843 }
844}
845impl DeserializeBytes for NotNamespaceType {
846 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
847 let inner = bytes
848 .split(|b| *b == b' ' || *b == b'|' || *b == b',' || *b == b';')
849 .map(|bytes| BasicNamespaceListItemType::deserialize_bytes(helper, bytes))
850 .collect::<Result<Vec<_>, _>>()?;
851 Ok(Self::new(inner).map_err(|error| (bytes, error))?)
852 }
853}
854#[derive(Clone, Debug, Eq, PartialEq)]
855pub enum ProcessContentsType {
856 Skip,
857 Lax,
858 Strict,
859}
860impl DeserializeBytes for ProcessContentsType {
861 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
862 match bytes {
863 b"skip" => Ok(Self::Skip),
864 b"lax" => Ok(Self::Lax),
865 b"strict" => Ok(Self::Strict),
866 x => Err(Error::from(ErrorKind::UnknownOrInvalidValue(
867 RawByteStr::from_slice(x),
868 ))),
869 }
870 }
871}
872#[derive(Clone, Debug, Default, Eq, PartialEq)]
873pub struct SimpleDerivationSetItemList(pub Vec<SimpleDerivationSetItemType>);
874impl DeserializeBytes for SimpleDerivationSetItemList {
875 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
876 Ok(Self(
877 bytes
878 .split(|b| *b == b' ' || *b == b'|' || *b == b',' || *b == b';')
879 .map(|bytes| SimpleDerivationSetItemType::deserialize_bytes(helper, bytes))
880 .collect::<Result<Vec<_>, _>>()?,
881 ))
882 }
883}
884#[derive(Clone, Debug, Eq, PartialEq)]
885pub enum Facet {
886 MinExclusive(FacetType),
887 MinInclusive(FacetType),
888 MaxExclusive(FacetType),
889 MaxInclusive(FacetType),
890 TotalDigits(FacetType),
891 FractionDigits(FacetType),
892 Length(FacetType),
893 MinLength(FacetType),
894 MaxLength(FacetType),
895 Enumeration(FacetType),
896 WhiteSpace(FacetType),
897 Pattern(FacetType),
898 Assertion(AssertionType),
899 ExplicitTimezone(FacetType),
900}
901impl WithDeserializer for Facet {
902 type Deserializer = Box<quick_xml_deserialize::FacetDeserializer>;
903}
904#[derive(Clone, Debug, Default, Eq, PartialEq)]
905pub struct ReducedDerivationControlList(pub Vec<ReducedDerivationControlType>);
906impl DeserializeBytes for ReducedDerivationControlList {
907 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
908 Ok(Self(
909 bytes
910 .split(|b| *b == b' ' || *b == b'|' || *b == b',' || *b == b';')
911 .map(|bytes| ReducedDerivationControlType::deserialize_bytes(helper, bytes))
912 .collect::<Result<Vec<_>, _>>()?,
913 ))
914 }
915}
916#[derive(Clone, Debug, Eq, PartialEq)]
917pub struct RestrictionType {
918 pub id: Option<String>,
919 pub base: QName,
920 pub content: Vec<RestrictionTypeContent>,
921}
922#[derive(Clone, Debug, Eq, PartialEq)]
923pub enum RestrictionTypeContent {
924 Annotation(Annotation),
925 OpenContent(OpenContent),
926 Group(GroupType),
927 All(GroupType),
928 Choice(GroupType),
929 Sequence(GroupType),
930 SimpleType(SimpleBaseType),
931 Facet(Facet),
932 Attribute(AttributeType),
933 AttributeGroup(AttributeGroupType),
934 AnyAttribute(AnyAttribute),
935 Assert(AssertionType),
936}
937impl WithDeserializer for RestrictionType {
938 type Deserializer = Box<quick_xml_deserialize::RestrictionTypeDeserializer>;
939}
940impl WithDeserializer for RestrictionTypeContent {
941 type Deserializer = Box<quick_xml_deserialize::RestrictionTypeContentDeserializer>;
942}
943#[derive(Clone, Debug, Eq, PartialEq)]
944pub struct ExtensionType {
945 pub id: Option<String>,
946 pub base: QName,
947 pub content: Vec<ExtensionTypeContent>,
948}
949#[derive(Clone, Debug, Eq, PartialEq)]
950pub enum ExtensionTypeContent {
951 Annotation(Annotation),
952 OpenContent(OpenContent),
953 Group(GroupType),
954 All(GroupType),
955 Choice(GroupType),
956 Sequence(GroupType),
957 Attribute(AttributeType),
958 AttributeGroup(AttributeGroupType),
959 AnyAttribute(AnyAttribute),
960 Assert(AssertionType),
961}
962impl WithDeserializer for ExtensionType {
963 type Deserializer = Box<quick_xml_deserialize::ExtensionTypeDeserializer>;
964}
965impl WithDeserializer for ExtensionTypeContent {
966 type Deserializer = Box<quick_xml_deserialize::ExtensionTypeContentDeserializer>;
967}
968#[derive(Clone, Debug, Eq, PartialEq)]
969pub enum OpenContentModeType {
970 None,
971 Interleave,
972 Suffix,
973}
974impl DeserializeBytes for OpenContentModeType {
975 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
976 match bytes {
977 b"none" => Ok(Self::None),
978 b"interleave" => Ok(Self::Interleave),
979 b"suffix" => Ok(Self::Suffix),
980 x => Err(Error::from(ErrorKind::UnknownOrInvalidValue(
981 RawByteStr::from_slice(x),
982 ))),
983 }
984 }
985}
986#[derive(Clone, Debug, Default, Eq, PartialEq)]
987pub struct QnameListAType(pub Vec<QnameListAItemType>);
988impl DeserializeBytes for QnameListAType {
989 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
990 Ok(Self(
991 bytes
992 .split(|b| *b == b' ' || *b == b'|' || *b == b',' || *b == b';')
993 .map(|bytes| QnameListAItemType::deserialize_bytes(helper, bytes))
994 .collect::<Result<Vec<_>, _>>()?,
995 ))
996 }
997}
998#[derive(Clone, Debug, Default, Eq, PartialEq)]
999pub struct QnameListType(pub Vec<QnameListItemType>);
1000impl DeserializeBytes for QnameListType {
1001 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
1002 Ok(Self(
1003 bytes
1004 .split(|b| *b == b' ' || *b == b'|' || *b == b',' || *b == b';')
1005 .map(|bytes| QnameListItemType::deserialize_bytes(helper, bytes))
1006 .collect::<Result<Vec<_>, _>>()?,
1007 ))
1008 }
1009}
1010#[derive(Clone, Debug, Eq, PartialEq)]
1011pub struct Field {
1012 pub id: Option<String>,
1013 pub xpath: String,
1014 pub xpath_default_namespace: Option<XpathDefaultNamespaceType>,
1015 pub annotation: Option<Annotation>,
1016}
1017impl WithDeserializer for Field {
1018 type Deserializer = Box<quick_xml_deserialize::FieldDeserializer>;
1019}
1020#[derive(Clone, Debug, Default, Eq, PartialEq)]
1021pub struct BasicNamespaceListType(pub Vec<BasicNamespaceListItemType>);
1022impl DeserializeBytes for BasicNamespaceListType {
1023 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
1024 Ok(Self(
1025 bytes
1026 .split(|b| *b == b' ' || *b == b'|' || *b == b',' || *b == b';')
1027 .map(|bytes| BasicNamespaceListItemType::deserialize_bytes(helper, bytes))
1028 .collect::<Result<Vec<_>, _>>()?,
1029 ))
1030 }
1031}
1032#[derive(Clone, Debug, Eq, PartialEq)]
1033pub enum BasicNamespaceListItemType {
1034 String(String),
1035 TargetNamespace,
1036 Local,
1037}
1038impl DeserializeBytes for BasicNamespaceListItemType {
1039 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
1040 match bytes {
1041 b"##targetNamespace" => Ok(Self::TargetNamespace),
1042 b"##local" => Ok(Self::Local),
1043 x => Ok(Self::String(String::deserialize_bytes(helper, x)?)),
1044 }
1045 }
1046}
1047#[derive(Clone, Debug, Eq, PartialEq)]
1048pub enum SimpleDerivationSetItemType {
1049 List,
1050 Union,
1051 Restriction,
1052 Extension,
1053}
1054impl DeserializeBytes for SimpleDerivationSetItemType {
1055 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
1056 match bytes {
1057 b"list" => Ok(Self::List),
1058 b"union" => Ok(Self::Union),
1059 b"restriction" => Ok(Self::Restriction),
1060 b"extension" => Ok(Self::Extension),
1061 x => Err(Error::from(ErrorKind::UnknownOrInvalidValue(
1062 RawByteStr::from_slice(x),
1063 ))),
1064 }
1065 }
1066}
1067#[derive(Clone, Debug, Eq, PartialEq)]
1068pub struct FacetType {
1069 pub id: Option<String>,
1070 pub value: String,
1071 pub fixed: bool,
1072 pub annotation: Option<Annotation>,
1073}
1074impl FacetType {
1075 #[must_use]
1076 pub fn default_fixed() -> bool {
1077 false
1078 }
1079}
1080impl WithDeserializer for FacetType {
1081 type Deserializer = Box<quick_xml_deserialize::FacetTypeDeserializer>;
1082}
1083#[derive(Clone, Debug, Eq, PartialEq)]
1084pub enum ReducedDerivationControlType {
1085 Extension,
1086 Restriction,
1087}
1088impl DeserializeBytes for ReducedDerivationControlType {
1089 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
1090 match bytes {
1091 b"extension" => Ok(Self::Extension),
1092 b"restriction" => Ok(Self::Restriction),
1093 x => Err(Error::from(ErrorKind::UnknownOrInvalidValue(
1094 RawByteStr::from_slice(x),
1095 ))),
1096 }
1097 }
1098}
1099#[derive(Clone, Debug, Eq, PartialEq)]
1100pub enum QnameListAItemType {
1101 QName(QName),
1102 Defined,
1103}
1104impl DeserializeBytes for QnameListAItemType {
1105 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
1106 match bytes {
1107 b"##defined" => Ok(Self::Defined),
1108 x => Ok(Self::QName(QName::deserialize_bytes(helper, x)?)),
1109 }
1110 }
1111}
1112#[derive(Clone, Debug, Eq, PartialEq)]
1113pub enum QnameListItemType {
1114 QName(QName),
1115 Defined,
1116 DefinedSibling,
1117}
1118impl DeserializeBytes for QnameListItemType {
1119 fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
1120 match bytes {
1121 b"##defined" => Ok(Self::Defined),
1122 b"##definedSibling" => Ok(Self::DefinedSibling),
1123 x => Ok(Self::QName(QName::deserialize_bytes(helper, x)?)),
1124 }
1125 }
1126}
1127pub mod quick_xml_deserialize {
1128 use crate::models::schema::{MaxOccurs, QName};
1129 use core::mem::replace;
1130 use xsd_parser_types::{
1131 quick_xml::{
1132 BytesStart, DeserializeHelper, Deserializer,
1133 DeserializerArtifact, DeserializerEvent, DeserializerOutput, DeserializerResult,
1134 ElementHandlerOutput, Error, ErrorKind, Event, RawByteStr, WithDeserializer,
1135 },
1136 xml::AnyElement,
1137 };
1138 #[derive(Debug)]
1139 pub struct SchemaDeserializer {
1140 target_namespace: Option<String>,
1141 version: Option<String>,
1142 final_default: super::FullDerivationSetType,
1143 block_default: super::BlockSetType,
1144 attribute_form_default: super::FormChoiceType,
1145 element_form_default: super::FormChoiceType,
1146 default_attributes: Option<QName>,
1147 xpath_default_namespace: super::XpathDefaultNamespaceType,
1148 id: Option<String>,
1149 lang: Option<String>,
1150 content: Vec<super::SchemaContent>,
1151 state__: Box<SchemaDeserializerState>,
1152 }
1153 #[derive(Debug)]
1154 enum SchemaDeserializerState {
1155 Init__,
1156 Next__,
1157 Content__(<super::SchemaContent as WithDeserializer>::Deserializer),
1158 Unknown__,
1159 }
1160 impl SchemaDeserializer {
1161 fn from_bytes_start(
1162 helper: &mut DeserializeHelper,
1163 bytes_start: &BytesStart<'_>,
1164 ) -> Result<Box<Self>, Error> {
1165 let mut target_namespace: Option<String> = None;
1166 let mut version: Option<String> = None;
1167 let mut final_default: Option<super::FullDerivationSetType> = None;
1168 let mut block_default: Option<super::BlockSetType> = None;
1169 let mut attribute_form_default: Option<super::FormChoiceType> = None;
1170 let mut element_form_default: Option<super::FormChoiceType> = None;
1171 let mut default_attributes: Option<QName> = None;
1172 let mut xpath_default_namespace: Option<super::XpathDefaultNamespaceType> = None;
1173 let mut id: Option<String> = None;
1174 let mut lang: Option<String> = None;
1175 for attrib in helper.filter_xmlns_attributes(bytes_start) {
1176 let attrib = attrib?;
1177 if matches!(
1178 helper.resolve_local_name(attrib.key, &super::NS_XS),
1179 Some(b"targetNamespace")
1180 ) {
1181 helper.read_attrib(&mut target_namespace, b"targetNamespace", &attrib.value)?;
1182 } else if matches!(
1183 helper.resolve_local_name(attrib.key, &super::NS_XS),
1184 Some(b"version")
1185 ) {
1186 helper.read_attrib(&mut version, b"version", &attrib.value)?;
1187 } else if matches!(
1188 helper.resolve_local_name(attrib.key, &super::NS_XS),
1189 Some(b"finalDefault")
1190 ) {
1191 helper.read_attrib(&mut final_default, b"finalDefault", &attrib.value)?;
1192 } else if matches!(
1193 helper.resolve_local_name(attrib.key, &super::NS_XS),
1194 Some(b"blockDefault")
1195 ) {
1196 helper.read_attrib(&mut block_default, b"blockDefault", &attrib.value)?;
1197 } else if matches!(
1198 helper.resolve_local_name(attrib.key, &super::NS_XS),
1199 Some(b"attributeFormDefault")
1200 ) {
1201 helper.read_attrib(
1202 &mut attribute_form_default,
1203 b"attributeFormDefault",
1204 &attrib.value,
1205 )?;
1206 } else if matches!(
1207 helper.resolve_local_name(attrib.key, &super::NS_XS),
1208 Some(b"elementFormDefault")
1209 ) {
1210 helper.read_attrib(
1211 &mut element_form_default,
1212 b"elementFormDefault",
1213 &attrib.value,
1214 )?;
1215 } else if matches!(
1216 helper.resolve_local_name(attrib.key, &super::NS_XS),
1217 Some(b"defaultAttributes")
1218 ) {
1219 helper.read_attrib(
1220 &mut default_attributes,
1221 b"defaultAttributes",
1222 &attrib.value,
1223 )?;
1224 } else if matches!(
1225 helper.resolve_local_name(attrib.key, &super::NS_XS),
1226 Some(b"xpathDefaultNamespace")
1227 ) {
1228 helper.read_attrib(
1229 &mut xpath_default_namespace,
1230 b"xpathDefaultNamespace",
1231 &attrib.value,
1232 )?;
1233 } else if matches!(
1234 helper.resolve_local_name(attrib.key, &super::NS_XS),
1235 Some(b"id")
1236 ) {
1237 helper.read_attrib(&mut id, b"id", &attrib.value)?;
1238 } else if matches!(
1239 helper.resolve_local_name(attrib.key, &super::NS_XML),
1240 Some(b"lang")
1241 ) {
1242 helper.read_attrib(&mut lang, b"lang", &attrib.value)?;
1243 }
1244 }
1245 Ok(Box::new(Self {
1246 target_namespace: target_namespace,
1247 version: version,
1248 final_default: final_default.unwrap_or_else(super::Schema::default_final_default),
1249 block_default: block_default.unwrap_or_else(super::Schema::default_block_default),
1250 attribute_form_default: attribute_form_default
1251 .unwrap_or_else(super::Schema::default_attribute_form_default),
1252 element_form_default: element_form_default
1253 .unwrap_or_else(super::Schema::default_element_form_default),
1254 default_attributes: default_attributes,
1255 xpath_default_namespace: xpath_default_namespace
1256 .unwrap_or_else(super::Schema::default_xpath_default_namespace),
1257 id: id,
1258 lang: lang,
1259 content: Vec::new(),
1260 state__: Box::new(SchemaDeserializerState::Init__),
1261 }))
1262 }
1263 fn finish_state(
1264 &mut self,
1265 helper: &mut DeserializeHelper,
1266 state: SchemaDeserializerState,
1267 ) -> Result<(), Error> {
1268 if let SchemaDeserializerState::Content__(deserializer) = state {
1269 self.store_content(deserializer.finish(helper)?)?;
1270 }
1271 Ok(())
1272 }
1273 fn store_content(&mut self, value: super::SchemaContent) -> Result<(), Error> {
1274 self.content.push(value);
1275 Ok(())
1276 }
1277 fn handle_content<'de>(
1278 &mut self,
1279 helper: &mut DeserializeHelper,
1280 output: DeserializerOutput<'de, super::SchemaContent>,
1281 fallback: &mut Option<SchemaDeserializerState>,
1282 ) -> Result<ElementHandlerOutput<'de>, Error> {
1283 let DeserializerOutput {
1284 artifact,
1285 event,
1286 allow_any,
1287 } = output;
1288 if artifact.is_none() {
1289 *self.state__ = fallback.take().unwrap_or(SchemaDeserializerState::Next__);
1290 return Ok(ElementHandlerOutput::break_(event, allow_any));
1291 }
1292 if let Some(fallback) = fallback.take() {
1293 self.finish_state(helper, fallback)?;
1294 }
1295 Ok(match artifact {
1296 DeserializerArtifact::None => unreachable!(),
1297 DeserializerArtifact::Data(data) => {
1298 self.store_content(data)?;
1299 *self.state__ = SchemaDeserializerState::Next__;
1300 ElementHandlerOutput::from_event(event, allow_any)
1301 }
1302 DeserializerArtifact::Deserializer(deserializer) => {
1303 let ret = ElementHandlerOutput::from_event(event, allow_any);
1304 match &ret {
1305 ElementHandlerOutput::Break { .. } => {
1306 *self.state__ = SchemaDeserializerState::Content__(deserializer);
1307 }
1308 ElementHandlerOutput::Continue { .. } => {
1309 fallback
1310 .get_or_insert(SchemaDeserializerState::Content__(deserializer));
1311 *self.state__ = SchemaDeserializerState::Next__;
1312 }
1313 }
1314 ret
1315 }
1316 })
1317 }
1318 }
1319 impl<'de> Deserializer<'de, super::Schema> for Box<SchemaDeserializer> {
1320 fn init(
1321 helper: &mut DeserializeHelper,
1322 event: Event<'de>,
1323 ) -> DeserializerResult<'de, super::Schema> {
1324 helper.init_deserializer_from_start_event(event, SchemaDeserializer::from_bytes_start)
1325 }
1326 fn next(
1327 mut self,
1328 helper: &mut DeserializeHelper,
1329 event: Event<'de>,
1330 ) -> DeserializerResult<'de, super::Schema> {
1331 use SchemaDeserializerState as S;
1332 let mut event = event;
1333 let mut fallback = None;
1334 let (event, allow_any) = loop {
1335 let state = replace(&mut *self.state__, S::Unknown__);
1336 event = match (state, event) {
1337 (S::Unknown__, _) => unreachable!(),
1338 (S::Content__(deserializer), event) => {
1339 let output = deserializer.next(helper, event)?;
1340 match self.handle_content(helper, output, &mut fallback)? {
1341 ElementHandlerOutput::Break { event, allow_any } => {
1342 break (event, allow_any)
1343 }
1344 ElementHandlerOutput::Continue { event, .. } => event,
1345 }
1346 }
1347 (_, Event::End(_)) => {
1348 return Ok(DeserializerOutput {
1349 artifact: DeserializerArtifact::Data(self.finish(helper)?),
1350 event: DeserializerEvent::None,
1351 allow_any: false,
1352 });
1353 }
1354 (state @ (S::Init__ | S::Next__), event) => {
1355 fallback.get_or_insert(state);
1356 let output =
1357 <super::SchemaContent as WithDeserializer>::Deserializer::init(
1358 helper, event,
1359 )?;
1360 match self.handle_content(helper, output, &mut fallback)? {
1361 ElementHandlerOutput::Break { event, allow_any } => {
1362 break (event, allow_any)
1363 }
1364 ElementHandlerOutput::Continue { event, .. } => event,
1365 }
1366 }
1367 }
1368 };
1369 let artifact = DeserializerArtifact::Deserializer(self);
1370 Ok(DeserializerOutput {
1371 artifact,
1372 event,
1373 allow_any,
1374 })
1375 }
1376 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::Schema, Error> {
1377 let state = replace(&mut *self.state__, SchemaDeserializerState::Unknown__);
1378 self.finish_state(helper, state)?;
1379 Ok(super::Schema {
1380 target_namespace: self.target_namespace,
1381 version: self.version,
1382 final_default: self.final_default,
1383 block_default: self.block_default,
1384 attribute_form_default: self.attribute_form_default,
1385 element_form_default: self.element_form_default,
1386 default_attributes: self.default_attributes,
1387 xpath_default_namespace: self.xpath_default_namespace,
1388 id: self.id,
1389 lang: self.lang,
1390 content: self.content,
1391 })
1392 }
1393 }
1394 #[derive(Debug)]
1395 pub struct SchemaContentDeserializer {
1396 state__: Box<SchemaContentDeserializerState>,
1397 }
1398 #[derive(Debug)]
1399 pub enum SchemaContentDeserializerState {
1400 Init__,
1401 Include(
1402 Option<super::Include>,
1403 Option<<super::Include as WithDeserializer>::Deserializer>,
1404 ),
1405 Import(
1406 Option<super::Import>,
1407 Option<<super::Import as WithDeserializer>::Deserializer>,
1408 ),
1409 Redefine(
1410 Option<super::Redefine>,
1411 Option<<super::Redefine as WithDeserializer>::Deserializer>,
1412 ),
1413 Override(
1414 Option<super::Override>,
1415 Option<<super::Override as WithDeserializer>::Deserializer>,
1416 ),
1417 Annotation(
1418 Option<super::Annotation>,
1419 Option<<super::Annotation as WithDeserializer>::Deserializer>,
1420 ),
1421 DefaultOpenContent(
1422 Option<super::DefaultOpenContent>,
1423 Option<<super::DefaultOpenContent as WithDeserializer>::Deserializer>,
1424 ),
1425 SimpleType(
1426 Option<super::SimpleBaseType>,
1427 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
1428 ),
1429 ComplexType(
1430 Option<super::ComplexBaseType>,
1431 Option<<super::ComplexBaseType as WithDeserializer>::Deserializer>,
1432 ),
1433 Group(
1434 Option<super::GroupType>,
1435 Option<<super::GroupType as WithDeserializer>::Deserializer>,
1436 ),
1437 AttributeGroup(
1438 Option<super::AttributeGroupType>,
1439 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
1440 ),
1441 Element(
1442 Option<super::ElementType>,
1443 Option<<super::ElementType as WithDeserializer>::Deserializer>,
1444 ),
1445 Attribute(
1446 Option<super::AttributeType>,
1447 Option<<super::AttributeType as WithDeserializer>::Deserializer>,
1448 ),
1449 Notation(
1450 Option<super::Notation>,
1451 Option<<super::Notation as WithDeserializer>::Deserializer>,
1452 ),
1453 Done__(super::SchemaContent),
1454 Unknown__,
1455 }
1456 impl SchemaContentDeserializer {
1457 fn find_suitable<'de>(
1458 &mut self,
1459 helper: &mut DeserializeHelper,
1460 event: Event<'de>,
1461 fallback: &mut Option<SchemaContentDeserializerState>,
1462 ) -> Result<ElementHandlerOutput<'de>, Error> {
1463 if let Event::Start(x) | Event::Empty(x) = &event {
1464 if matches!(
1465 helper.resolve_local_name(x.name(), &super::NS_XS),
1466 Some(b"include")
1467 ) {
1468 let output =
1469 <super::Include as WithDeserializer>::Deserializer::init(helper, event)?;
1470 return self.handle_include(helper, Default::default(), output, &mut *fallback);
1471 }
1472 if matches!(
1473 helper.resolve_local_name(x.name(), &super::NS_XS),
1474 Some(b"import")
1475 ) {
1476 let output =
1477 <super::Import as WithDeserializer>::Deserializer::init(helper, event)?;
1478 return self.handle_import(helper, Default::default(), output, &mut *fallback);
1479 }
1480 if matches!(
1481 helper.resolve_local_name(x.name(), &super::NS_XS),
1482 Some(b"redefine")
1483 ) {
1484 let output =
1485 <super::Redefine as WithDeserializer>::Deserializer::init(helper, event)?;
1486 return self.handle_redefine(
1487 helper,
1488 Default::default(),
1489 output,
1490 &mut *fallback,
1491 );
1492 }
1493 if matches!(
1494 helper.resolve_local_name(x.name(), &super::NS_XS),
1495 Some(b"override")
1496 ) {
1497 let output =
1498 <super::Override as WithDeserializer>::Deserializer::init(helper, event)?;
1499 return self.handle_override_(
1500 helper,
1501 Default::default(),
1502 output,
1503 &mut *fallback,
1504 );
1505 }
1506 if matches!(
1507 helper.resolve_local_name(x.name(), &super::NS_XS),
1508 Some(b"annotation")
1509 ) {
1510 let output =
1511 <super::Annotation as WithDeserializer>::Deserializer::init(helper, event)?;
1512 return self.handle_annotation(
1513 helper,
1514 Default::default(),
1515 output,
1516 &mut *fallback,
1517 );
1518 }
1519 if matches!(
1520 helper.resolve_local_name(x.name(), &super::NS_XS),
1521 Some(b"defaultOpenContent")
1522 ) {
1523 let output =
1524 <super::DefaultOpenContent as WithDeserializer>::Deserializer::init(
1525 helper, event,
1526 )?;
1527 return self.handle_default_open_content(
1528 helper,
1529 Default::default(),
1530 output,
1531 &mut *fallback,
1532 );
1533 }
1534 if matches!(
1535 helper.resolve_local_name(x.name(), &super::NS_XS),
1536 Some(b"simpleType")
1537 ) {
1538 let output = <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
1539 helper, event,
1540 )?;
1541 return self.handle_simple_type(
1542 helper,
1543 Default::default(),
1544 output,
1545 &mut *fallback,
1546 );
1547 }
1548 if matches!(
1549 helper.resolve_local_name(x.name(), &super::NS_XS),
1550 Some(b"complexType")
1551 ) {
1552 let output = <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
1553 helper, event,
1554 )?;
1555 return self.handle_complex_type(
1556 helper,
1557 Default::default(),
1558 output,
1559 &mut *fallback,
1560 );
1561 }
1562 if matches!(
1563 helper.resolve_local_name(x.name(), &super::NS_XS),
1564 Some(b"group")
1565 ) {
1566 let output =
1567 <super::GroupType as WithDeserializer>::Deserializer::init(helper, event)?;
1568 return self.handle_group(helper, Default::default(), output, &mut *fallback);
1569 }
1570 if matches!(
1571 helper.resolve_local_name(x.name(), &super::NS_XS),
1572 Some(b"attributeGroup")
1573 ) {
1574 let output =
1575 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
1576 helper, event,
1577 )?;
1578 return self.handle_attribute_group(
1579 helper,
1580 Default::default(),
1581 output,
1582 &mut *fallback,
1583 );
1584 }
1585 if matches!(
1586 helper.resolve_local_name(x.name(), &super::NS_XS),
1587 Some(b"element")
1588 ) {
1589 let output = <super::ElementType as WithDeserializer>::Deserializer::init(
1590 helper, event,
1591 )?;
1592 return self.handle_element(helper, Default::default(), output, &mut *fallback);
1593 }
1594 if matches!(
1595 helper.resolve_local_name(x.name(), &super::NS_XS),
1596 Some(b"attribute")
1597 ) {
1598 let output = <super::AttributeType as WithDeserializer>::Deserializer::init(
1599 helper, event,
1600 )?;
1601 return self.handle_attribute(
1602 helper,
1603 Default::default(),
1604 output,
1605 &mut *fallback,
1606 );
1607 }
1608 if matches!(
1609 helper.resolve_local_name(x.name(), &super::NS_XS),
1610 Some(b"notation")
1611 ) {
1612 let output =
1613 <super::Notation as WithDeserializer>::Deserializer::init(helper, event)?;
1614 return self.handle_notation(
1615 helper,
1616 Default::default(),
1617 output,
1618 &mut *fallback,
1619 );
1620 }
1621 }
1622 *self.state__ = fallback
1623 .take()
1624 .unwrap_or(SchemaContentDeserializerState::Init__);
1625 Ok(ElementHandlerOutput::return_to_parent(event, false))
1626 }
1627 fn finish_state(
1628 helper: &mut DeserializeHelper,
1629 state: SchemaContentDeserializerState,
1630 ) -> Result<super::SchemaContent, Error> {
1631 use SchemaContentDeserializerState as S;
1632 match state {
1633 S::Unknown__ => unreachable!(),
1634 S::Init__ => Err(ErrorKind::MissingContent.into()),
1635 S::Include(mut values, deserializer) => {
1636 if let Some(deserializer) = deserializer {
1637 let value = deserializer.finish(helper)?;
1638 SchemaContentDeserializer::store_include(&mut values, value)?;
1639 }
1640 Ok(super::SchemaContent::Include(values.ok_or_else(|| {
1641 ErrorKind::MissingElement("include".into())
1642 })?))
1643 }
1644 S::Import(mut values, deserializer) => {
1645 if let Some(deserializer) = deserializer {
1646 let value = deserializer.finish(helper)?;
1647 SchemaContentDeserializer::store_import(&mut values, value)?;
1648 }
1649 Ok(super::SchemaContent::Import(values.ok_or_else(|| {
1650 ErrorKind::MissingElement("import".into())
1651 })?))
1652 }
1653 S::Redefine(mut values, deserializer) => {
1654 if let Some(deserializer) = deserializer {
1655 let value = deserializer.finish(helper)?;
1656 SchemaContentDeserializer::store_redefine(&mut values, value)?;
1657 }
1658 Ok(super::SchemaContent::Redefine(values.ok_or_else(|| {
1659 ErrorKind::MissingElement("redefine".into())
1660 })?))
1661 }
1662 S::Override(mut values, deserializer) => {
1663 if let Some(deserializer) = deserializer {
1664 let value = deserializer.finish(helper)?;
1665 SchemaContentDeserializer::store_override_(&mut values, value)?;
1666 }
1667 Ok(super::SchemaContent::Override(values.ok_or_else(|| {
1668 ErrorKind::MissingElement("override".into())
1669 })?))
1670 }
1671 S::Annotation(mut values, deserializer) => {
1672 if let Some(deserializer) = deserializer {
1673 let value = deserializer.finish(helper)?;
1674 SchemaContentDeserializer::store_annotation(&mut values, value)?;
1675 }
1676 Ok(super::SchemaContent::Annotation(values.ok_or_else(
1677 || ErrorKind::MissingElement("annotation".into()),
1678 )?))
1679 }
1680 S::DefaultOpenContent(mut values, deserializer) => {
1681 if let Some(deserializer) = deserializer {
1682 let value = deserializer.finish(helper)?;
1683 SchemaContentDeserializer::store_default_open_content(&mut values, value)?;
1684 }
1685 Ok(super::SchemaContent::DefaultOpenContent(
1686 values.ok_or_else(|| {
1687 ErrorKind::MissingElement("defaultOpenContent".into())
1688 })?,
1689 ))
1690 }
1691 S::SimpleType(mut values, deserializer) => {
1692 if let Some(deserializer) = deserializer {
1693 let value = deserializer.finish(helper)?;
1694 SchemaContentDeserializer::store_simple_type(&mut values, value)?;
1695 }
1696 Ok(super::SchemaContent::SimpleType(values.ok_or_else(
1697 || ErrorKind::MissingElement("simpleType".into()),
1698 )?))
1699 }
1700 S::ComplexType(mut values, deserializer) => {
1701 if let Some(deserializer) = deserializer {
1702 let value = deserializer.finish(helper)?;
1703 SchemaContentDeserializer::store_complex_type(&mut values, value)?;
1704 }
1705 Ok(super::SchemaContent::ComplexType(values.ok_or_else(
1706 || ErrorKind::MissingElement("complexType".into()),
1707 )?))
1708 }
1709 S::Group(mut values, deserializer) => {
1710 if let Some(deserializer) = deserializer {
1711 let value = deserializer.finish(helper)?;
1712 SchemaContentDeserializer::store_group(&mut values, value)?;
1713 }
1714 Ok(super::SchemaContent::Group(values.ok_or_else(|| {
1715 ErrorKind::MissingElement("group".into())
1716 })?))
1717 }
1718 S::AttributeGroup(mut values, deserializer) => {
1719 if let Some(deserializer) = deserializer {
1720 let value = deserializer.finish(helper)?;
1721 SchemaContentDeserializer::store_attribute_group(&mut values, value)?;
1722 }
1723 Ok(super::SchemaContent::AttributeGroup(values.ok_or_else(
1724 || ErrorKind::MissingElement("attributeGroup".into()),
1725 )?))
1726 }
1727 S::Element(mut values, deserializer) => {
1728 if let Some(deserializer) = deserializer {
1729 let value = deserializer.finish(helper)?;
1730 SchemaContentDeserializer::store_element(&mut values, value)?;
1731 }
1732 Ok(super::SchemaContent::Element(values.ok_or_else(|| {
1733 ErrorKind::MissingElement("element".into())
1734 })?))
1735 }
1736 S::Attribute(mut values, deserializer) => {
1737 if let Some(deserializer) = deserializer {
1738 let value = deserializer.finish(helper)?;
1739 SchemaContentDeserializer::store_attribute(&mut values, value)?;
1740 }
1741 Ok(super::SchemaContent::Attribute(values.ok_or_else(
1742 || ErrorKind::MissingElement("attribute".into()),
1743 )?))
1744 }
1745 S::Notation(mut values, deserializer) => {
1746 if let Some(deserializer) = deserializer {
1747 let value = deserializer.finish(helper)?;
1748 SchemaContentDeserializer::store_notation(&mut values, value)?;
1749 }
1750 Ok(super::SchemaContent::Notation(values.ok_or_else(|| {
1751 ErrorKind::MissingElement("notation".into())
1752 })?))
1753 }
1754 S::Done__(data) => Ok(data),
1755 }
1756 }
1757 fn store_include(
1758 values: &mut Option<super::Include>,
1759 value: super::Include,
1760 ) -> Result<(), Error> {
1761 if values.is_some() {
1762 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1763 b"include",
1764 )))?;
1765 }
1766 *values = Some(value);
1767 Ok(())
1768 }
1769 fn store_import(
1770 values: &mut Option<super::Import>,
1771 value: super::Import,
1772 ) -> Result<(), Error> {
1773 if values.is_some() {
1774 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1775 b"import",
1776 )))?;
1777 }
1778 *values = Some(value);
1779 Ok(())
1780 }
1781 fn store_redefine(
1782 values: &mut Option<super::Redefine>,
1783 value: super::Redefine,
1784 ) -> Result<(), Error> {
1785 if values.is_some() {
1786 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1787 b"redefine",
1788 )))?;
1789 }
1790 *values = Some(value);
1791 Ok(())
1792 }
1793 fn store_override_(
1794 values: &mut Option<super::Override>,
1795 value: super::Override,
1796 ) -> Result<(), Error> {
1797 if values.is_some() {
1798 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1799 b"override",
1800 )))?;
1801 }
1802 *values = Some(value);
1803 Ok(())
1804 }
1805 fn store_annotation(
1806 values: &mut Option<super::Annotation>,
1807 value: super::Annotation,
1808 ) -> Result<(), Error> {
1809 if values.is_some() {
1810 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1811 b"annotation",
1812 )))?;
1813 }
1814 *values = Some(value);
1815 Ok(())
1816 }
1817 fn store_default_open_content(
1818 values: &mut Option<super::DefaultOpenContent>,
1819 value: super::DefaultOpenContent,
1820 ) -> Result<(), Error> {
1821 if values.is_some() {
1822 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1823 b"defaultOpenContent",
1824 )))?;
1825 }
1826 *values = Some(value);
1827 Ok(())
1828 }
1829 fn store_simple_type(
1830 values: &mut Option<super::SimpleBaseType>,
1831 value: super::SimpleBaseType,
1832 ) -> Result<(), Error> {
1833 if values.is_some() {
1834 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1835 b"simpleType",
1836 )))?;
1837 }
1838 *values = Some(value);
1839 Ok(())
1840 }
1841 fn store_complex_type(
1842 values: &mut Option<super::ComplexBaseType>,
1843 value: super::ComplexBaseType,
1844 ) -> Result<(), Error> {
1845 if values.is_some() {
1846 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1847 b"complexType",
1848 )))?;
1849 }
1850 *values = Some(value);
1851 Ok(())
1852 }
1853 fn store_group(
1854 values: &mut Option<super::GroupType>,
1855 value: super::GroupType,
1856 ) -> Result<(), Error> {
1857 if values.is_some() {
1858 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1859 b"group",
1860 )))?;
1861 }
1862 *values = Some(value);
1863 Ok(())
1864 }
1865 fn store_attribute_group(
1866 values: &mut Option<super::AttributeGroupType>,
1867 value: super::AttributeGroupType,
1868 ) -> Result<(), Error> {
1869 if values.is_some() {
1870 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1871 b"attributeGroup",
1872 )))?;
1873 }
1874 *values = Some(value);
1875 Ok(())
1876 }
1877 fn store_element(
1878 values: &mut Option<super::ElementType>,
1879 value: super::ElementType,
1880 ) -> Result<(), Error> {
1881 if values.is_some() {
1882 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1883 b"element",
1884 )))?;
1885 }
1886 *values = Some(value);
1887 Ok(())
1888 }
1889 fn store_attribute(
1890 values: &mut Option<super::AttributeType>,
1891 value: super::AttributeType,
1892 ) -> Result<(), Error> {
1893 if values.is_some() {
1894 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1895 b"attribute",
1896 )))?;
1897 }
1898 *values = Some(value);
1899 Ok(())
1900 }
1901 fn store_notation(
1902 values: &mut Option<super::Notation>,
1903 value: super::Notation,
1904 ) -> Result<(), Error> {
1905 if values.is_some() {
1906 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1907 b"notation",
1908 )))?;
1909 }
1910 *values = Some(value);
1911 Ok(())
1912 }
1913 fn handle_include<'de>(
1914 &mut self,
1915 helper: &mut DeserializeHelper,
1916 mut values: Option<super::Include>,
1917 output: DeserializerOutput<'de, super::Include>,
1918 fallback: &mut Option<SchemaContentDeserializerState>,
1919 ) -> Result<ElementHandlerOutput<'de>, Error> {
1920 let DeserializerOutput {
1921 artifact,
1922 event,
1923 allow_any,
1924 } = output;
1925 if artifact.is_none() {
1926 *self.state__ = match fallback.take() {
1927 None if values.is_none() => {
1928 *self.state__ = SchemaContentDeserializerState::Init__;
1929 return Ok(ElementHandlerOutput::from_event(event, allow_any));
1930 }
1931 None => SchemaContentDeserializerState::Include(values, None),
1932 Some(SchemaContentDeserializerState::Include(_, Some(deserializer))) => {
1933 SchemaContentDeserializerState::Include(values, Some(deserializer))
1934 }
1935 _ => unreachable!(),
1936 };
1937 return Ok(ElementHandlerOutput::break_(event, allow_any));
1938 }
1939 match fallback.take() {
1940 None => (),
1941 Some(SchemaContentDeserializerState::Include(_, Some(deserializer))) => {
1942 let data = deserializer.finish(helper)?;
1943 SchemaContentDeserializer::store_include(&mut values, data)?;
1944 }
1945 Some(_) => unreachable!(),
1946 }
1947 Ok(match artifact {
1948 DeserializerArtifact::None => unreachable!(),
1949 DeserializerArtifact::Data(data) => {
1950 SchemaContentDeserializer::store_include(&mut values, data)?;
1951 let data = SchemaContentDeserializer::finish_state(
1952 helper,
1953 SchemaContentDeserializerState::Include(values, None),
1954 )?;
1955 *self.state__ = SchemaContentDeserializerState::Done__(data);
1956 ElementHandlerOutput::Break { event, allow_any }
1957 }
1958 DeserializerArtifact::Deserializer(deserializer) => {
1959 *self.state__ =
1960 SchemaContentDeserializerState::Include(values, Some(deserializer));
1961 ElementHandlerOutput::from_event_end(event, allow_any)
1962 }
1963 })
1964 }
1965 fn handle_import<'de>(
1966 &mut self,
1967 helper: &mut DeserializeHelper,
1968 mut values: Option<super::Import>,
1969 output: DeserializerOutput<'de, super::Import>,
1970 fallback: &mut Option<SchemaContentDeserializerState>,
1971 ) -> Result<ElementHandlerOutput<'de>, Error> {
1972 let DeserializerOutput {
1973 artifact,
1974 event,
1975 allow_any,
1976 } = output;
1977 if artifact.is_none() {
1978 *self.state__ = match fallback.take() {
1979 None if values.is_none() => {
1980 *self.state__ = SchemaContentDeserializerState::Init__;
1981 return Ok(ElementHandlerOutput::from_event(event, allow_any));
1982 }
1983 None => SchemaContentDeserializerState::Import(values, None),
1984 Some(SchemaContentDeserializerState::Import(_, Some(deserializer))) => {
1985 SchemaContentDeserializerState::Import(values, Some(deserializer))
1986 }
1987 _ => unreachable!(),
1988 };
1989 return Ok(ElementHandlerOutput::break_(event, allow_any));
1990 }
1991 match fallback.take() {
1992 None => (),
1993 Some(SchemaContentDeserializerState::Import(_, Some(deserializer))) => {
1994 let data = deserializer.finish(helper)?;
1995 SchemaContentDeserializer::store_import(&mut values, data)?;
1996 }
1997 Some(_) => unreachable!(),
1998 }
1999 Ok(match artifact {
2000 DeserializerArtifact::None => unreachable!(),
2001 DeserializerArtifact::Data(data) => {
2002 SchemaContentDeserializer::store_import(&mut values, data)?;
2003 let data = SchemaContentDeserializer::finish_state(
2004 helper,
2005 SchemaContentDeserializerState::Import(values, None),
2006 )?;
2007 *self.state__ = SchemaContentDeserializerState::Done__(data);
2008 ElementHandlerOutput::Break { event, allow_any }
2009 }
2010 DeserializerArtifact::Deserializer(deserializer) => {
2011 *self.state__ =
2012 SchemaContentDeserializerState::Import(values, Some(deserializer));
2013 ElementHandlerOutput::from_event_end(event, allow_any)
2014 }
2015 })
2016 }
2017 fn handle_redefine<'de>(
2018 &mut self,
2019 helper: &mut DeserializeHelper,
2020 mut values: Option<super::Redefine>,
2021 output: DeserializerOutput<'de, super::Redefine>,
2022 fallback: &mut Option<SchemaContentDeserializerState>,
2023 ) -> Result<ElementHandlerOutput<'de>, Error> {
2024 let DeserializerOutput {
2025 artifact,
2026 event,
2027 allow_any,
2028 } = output;
2029 if artifact.is_none() {
2030 *self.state__ = match fallback.take() {
2031 None if values.is_none() => {
2032 *self.state__ = SchemaContentDeserializerState::Init__;
2033 return Ok(ElementHandlerOutput::from_event(event, allow_any));
2034 }
2035 None => SchemaContentDeserializerState::Redefine(values, None),
2036 Some(SchemaContentDeserializerState::Redefine(_, Some(deserializer))) => {
2037 SchemaContentDeserializerState::Redefine(values, Some(deserializer))
2038 }
2039 _ => unreachable!(),
2040 };
2041 return Ok(ElementHandlerOutput::break_(event, allow_any));
2042 }
2043 match fallback.take() {
2044 None => (),
2045 Some(SchemaContentDeserializerState::Redefine(_, Some(deserializer))) => {
2046 let data = deserializer.finish(helper)?;
2047 SchemaContentDeserializer::store_redefine(&mut values, data)?;
2048 }
2049 Some(_) => unreachable!(),
2050 }
2051 Ok(match artifact {
2052 DeserializerArtifact::None => unreachable!(),
2053 DeserializerArtifact::Data(data) => {
2054 SchemaContentDeserializer::store_redefine(&mut values, data)?;
2055 let data = SchemaContentDeserializer::finish_state(
2056 helper,
2057 SchemaContentDeserializerState::Redefine(values, None),
2058 )?;
2059 *self.state__ = SchemaContentDeserializerState::Done__(data);
2060 ElementHandlerOutput::Break { event, allow_any }
2061 }
2062 DeserializerArtifact::Deserializer(deserializer) => {
2063 *self.state__ =
2064 SchemaContentDeserializerState::Redefine(values, Some(deserializer));
2065 ElementHandlerOutput::from_event_end(event, allow_any)
2066 }
2067 })
2068 }
2069 fn handle_override_<'de>(
2070 &mut self,
2071 helper: &mut DeserializeHelper,
2072 mut values: Option<super::Override>,
2073 output: DeserializerOutput<'de, super::Override>,
2074 fallback: &mut Option<SchemaContentDeserializerState>,
2075 ) -> Result<ElementHandlerOutput<'de>, Error> {
2076 let DeserializerOutput {
2077 artifact,
2078 event,
2079 allow_any,
2080 } = output;
2081 if artifact.is_none() {
2082 *self.state__ = match fallback.take() {
2083 None if values.is_none() => {
2084 *self.state__ = SchemaContentDeserializerState::Init__;
2085 return Ok(ElementHandlerOutput::from_event(event, allow_any));
2086 }
2087 None => SchemaContentDeserializerState::Override(values, None),
2088 Some(SchemaContentDeserializerState::Override(_, Some(deserializer))) => {
2089 SchemaContentDeserializerState::Override(values, Some(deserializer))
2090 }
2091 _ => unreachable!(),
2092 };
2093 return Ok(ElementHandlerOutput::break_(event, allow_any));
2094 }
2095 match fallback.take() {
2096 None => (),
2097 Some(SchemaContentDeserializerState::Override(_, Some(deserializer))) => {
2098 let data = deserializer.finish(helper)?;
2099 SchemaContentDeserializer::store_override_(&mut values, data)?;
2100 }
2101 Some(_) => unreachable!(),
2102 }
2103 Ok(match artifact {
2104 DeserializerArtifact::None => unreachable!(),
2105 DeserializerArtifact::Data(data) => {
2106 SchemaContentDeserializer::store_override_(&mut values, data)?;
2107 let data = SchemaContentDeserializer::finish_state(
2108 helper,
2109 SchemaContentDeserializerState::Override(values, None),
2110 )?;
2111 *self.state__ = SchemaContentDeserializerState::Done__(data);
2112 ElementHandlerOutput::Break { event, allow_any }
2113 }
2114 DeserializerArtifact::Deserializer(deserializer) => {
2115 *self.state__ =
2116 SchemaContentDeserializerState::Override(values, Some(deserializer));
2117 ElementHandlerOutput::from_event_end(event, allow_any)
2118 }
2119 })
2120 }
2121 fn handle_annotation<'de>(
2122 &mut self,
2123 helper: &mut DeserializeHelper,
2124 mut values: Option<super::Annotation>,
2125 output: DeserializerOutput<'de, super::Annotation>,
2126 fallback: &mut Option<SchemaContentDeserializerState>,
2127 ) -> Result<ElementHandlerOutput<'de>, Error> {
2128 let DeserializerOutput {
2129 artifact,
2130 event,
2131 allow_any,
2132 } = output;
2133 if artifact.is_none() {
2134 *self.state__ = match fallback.take() {
2135 None if values.is_none() => {
2136 *self.state__ = SchemaContentDeserializerState::Init__;
2137 return Ok(ElementHandlerOutput::from_event(event, allow_any));
2138 }
2139 None => SchemaContentDeserializerState::Annotation(values, None),
2140 Some(SchemaContentDeserializerState::Annotation(_, Some(deserializer))) => {
2141 SchemaContentDeserializerState::Annotation(values, Some(deserializer))
2142 }
2143 _ => unreachable!(),
2144 };
2145 return Ok(ElementHandlerOutput::break_(event, allow_any));
2146 }
2147 match fallback.take() {
2148 None => (),
2149 Some(SchemaContentDeserializerState::Annotation(_, Some(deserializer))) => {
2150 let data = deserializer.finish(helper)?;
2151 SchemaContentDeserializer::store_annotation(&mut values, data)?;
2152 }
2153 Some(_) => unreachable!(),
2154 }
2155 Ok(match artifact {
2156 DeserializerArtifact::None => unreachable!(),
2157 DeserializerArtifact::Data(data) => {
2158 SchemaContentDeserializer::store_annotation(&mut values, data)?;
2159 let data = SchemaContentDeserializer::finish_state(
2160 helper,
2161 SchemaContentDeserializerState::Annotation(values, None),
2162 )?;
2163 *self.state__ = SchemaContentDeserializerState::Done__(data);
2164 ElementHandlerOutput::Break { event, allow_any }
2165 }
2166 DeserializerArtifact::Deserializer(deserializer) => {
2167 *self.state__ =
2168 SchemaContentDeserializerState::Annotation(values, Some(deserializer));
2169 ElementHandlerOutput::from_event_end(event, allow_any)
2170 }
2171 })
2172 }
2173 fn handle_default_open_content<'de>(
2174 &mut self,
2175 helper: &mut DeserializeHelper,
2176 mut values: Option<super::DefaultOpenContent>,
2177 output: DeserializerOutput<'de, super::DefaultOpenContent>,
2178 fallback: &mut Option<SchemaContentDeserializerState>,
2179 ) -> Result<ElementHandlerOutput<'de>, Error> {
2180 let DeserializerOutput {
2181 artifact,
2182 event,
2183 allow_any,
2184 } = output;
2185 if artifact.is_none() {
2186 *self.state__ = match fallback.take() {
2187 None if values.is_none() => {
2188 *self.state__ = SchemaContentDeserializerState::Init__;
2189 return Ok(ElementHandlerOutput::from_event(event, allow_any));
2190 }
2191 None => SchemaContentDeserializerState::DefaultOpenContent(values, None),
2192 Some(SchemaContentDeserializerState::DefaultOpenContent(
2193 _,
2194 Some(deserializer),
2195 )) => SchemaContentDeserializerState::DefaultOpenContent(
2196 values,
2197 Some(deserializer),
2198 ),
2199 _ => unreachable!(),
2200 };
2201 return Ok(ElementHandlerOutput::break_(event, allow_any));
2202 }
2203 match fallback.take() {
2204 None => (),
2205 Some(SchemaContentDeserializerState::DefaultOpenContent(_, Some(deserializer))) => {
2206 let data = deserializer.finish(helper)?;
2207 SchemaContentDeserializer::store_default_open_content(&mut values, data)?;
2208 }
2209 Some(_) => unreachable!(),
2210 }
2211 Ok(match artifact {
2212 DeserializerArtifact::None => unreachable!(),
2213 DeserializerArtifact::Data(data) => {
2214 SchemaContentDeserializer::store_default_open_content(&mut values, data)?;
2215 let data = SchemaContentDeserializer::finish_state(
2216 helper,
2217 SchemaContentDeserializerState::DefaultOpenContent(values, None),
2218 )?;
2219 *self.state__ = SchemaContentDeserializerState::Done__(data);
2220 ElementHandlerOutput::Break { event, allow_any }
2221 }
2222 DeserializerArtifact::Deserializer(deserializer) => {
2223 *self.state__ = SchemaContentDeserializerState::DefaultOpenContent(
2224 values,
2225 Some(deserializer),
2226 );
2227 ElementHandlerOutput::from_event_end(event, allow_any)
2228 }
2229 })
2230 }
2231 fn handle_simple_type<'de>(
2232 &mut self,
2233 helper: &mut DeserializeHelper,
2234 mut values: Option<super::SimpleBaseType>,
2235 output: DeserializerOutput<'de, super::SimpleBaseType>,
2236 fallback: &mut Option<SchemaContentDeserializerState>,
2237 ) -> Result<ElementHandlerOutput<'de>, Error> {
2238 let DeserializerOutput {
2239 artifact,
2240 event,
2241 allow_any,
2242 } = output;
2243 if artifact.is_none() {
2244 *self.state__ = match fallback.take() {
2245 None if values.is_none() => {
2246 *self.state__ = SchemaContentDeserializerState::Init__;
2247 return Ok(ElementHandlerOutput::from_event(event, allow_any));
2248 }
2249 None => SchemaContentDeserializerState::SimpleType(values, None),
2250 Some(SchemaContentDeserializerState::SimpleType(_, Some(deserializer))) => {
2251 SchemaContentDeserializerState::SimpleType(values, Some(deserializer))
2252 }
2253 _ => unreachable!(),
2254 };
2255 return Ok(ElementHandlerOutput::break_(event, allow_any));
2256 }
2257 match fallback.take() {
2258 None => (),
2259 Some(SchemaContentDeserializerState::SimpleType(_, Some(deserializer))) => {
2260 let data = deserializer.finish(helper)?;
2261 SchemaContentDeserializer::store_simple_type(&mut values, data)?;
2262 }
2263 Some(_) => unreachable!(),
2264 }
2265 Ok(match artifact {
2266 DeserializerArtifact::None => unreachable!(),
2267 DeserializerArtifact::Data(data) => {
2268 SchemaContentDeserializer::store_simple_type(&mut values, data)?;
2269 let data = SchemaContentDeserializer::finish_state(
2270 helper,
2271 SchemaContentDeserializerState::SimpleType(values, None),
2272 )?;
2273 *self.state__ = SchemaContentDeserializerState::Done__(data);
2274 ElementHandlerOutput::Break { event, allow_any }
2275 }
2276 DeserializerArtifact::Deserializer(deserializer) => {
2277 *self.state__ =
2278 SchemaContentDeserializerState::SimpleType(values, Some(deserializer));
2279 ElementHandlerOutput::from_event_end(event, allow_any)
2280 }
2281 })
2282 }
2283 fn handle_complex_type<'de>(
2284 &mut self,
2285 helper: &mut DeserializeHelper,
2286 mut values: Option<super::ComplexBaseType>,
2287 output: DeserializerOutput<'de, super::ComplexBaseType>,
2288 fallback: &mut Option<SchemaContentDeserializerState>,
2289 ) -> Result<ElementHandlerOutput<'de>, Error> {
2290 let DeserializerOutput {
2291 artifact,
2292 event,
2293 allow_any,
2294 } = output;
2295 if artifact.is_none() {
2296 *self.state__ = match fallback.take() {
2297 None if values.is_none() => {
2298 *self.state__ = SchemaContentDeserializerState::Init__;
2299 return Ok(ElementHandlerOutput::from_event(event, allow_any));
2300 }
2301 None => SchemaContentDeserializerState::ComplexType(values, None),
2302 Some(SchemaContentDeserializerState::ComplexType(_, Some(deserializer))) => {
2303 SchemaContentDeserializerState::ComplexType(values, Some(deserializer))
2304 }
2305 _ => unreachable!(),
2306 };
2307 return Ok(ElementHandlerOutput::break_(event, allow_any));
2308 }
2309 match fallback.take() {
2310 None => (),
2311 Some(SchemaContentDeserializerState::ComplexType(_, Some(deserializer))) => {
2312 let data = deserializer.finish(helper)?;
2313 SchemaContentDeserializer::store_complex_type(&mut values, data)?;
2314 }
2315 Some(_) => unreachable!(),
2316 }
2317 Ok(match artifact {
2318 DeserializerArtifact::None => unreachable!(),
2319 DeserializerArtifact::Data(data) => {
2320 SchemaContentDeserializer::store_complex_type(&mut values, data)?;
2321 let data = SchemaContentDeserializer::finish_state(
2322 helper,
2323 SchemaContentDeserializerState::ComplexType(values, None),
2324 )?;
2325 *self.state__ = SchemaContentDeserializerState::Done__(data);
2326 ElementHandlerOutput::Break { event, allow_any }
2327 }
2328 DeserializerArtifact::Deserializer(deserializer) => {
2329 *self.state__ =
2330 SchemaContentDeserializerState::ComplexType(values, Some(deserializer));
2331 ElementHandlerOutput::from_event_end(event, allow_any)
2332 }
2333 })
2334 }
2335 fn handle_group<'de>(
2336 &mut self,
2337 helper: &mut DeserializeHelper,
2338 mut values: Option<super::GroupType>,
2339 output: DeserializerOutput<'de, super::GroupType>,
2340 fallback: &mut Option<SchemaContentDeserializerState>,
2341 ) -> Result<ElementHandlerOutput<'de>, Error> {
2342 let DeserializerOutput {
2343 artifact,
2344 event,
2345 allow_any,
2346 } = output;
2347 if artifact.is_none() {
2348 *self.state__ = match fallback.take() {
2349 None if values.is_none() => {
2350 *self.state__ = SchemaContentDeserializerState::Init__;
2351 return Ok(ElementHandlerOutput::from_event(event, allow_any));
2352 }
2353 None => SchemaContentDeserializerState::Group(values, None),
2354 Some(SchemaContentDeserializerState::Group(_, Some(deserializer))) => {
2355 SchemaContentDeserializerState::Group(values, Some(deserializer))
2356 }
2357 _ => unreachable!(),
2358 };
2359 return Ok(ElementHandlerOutput::break_(event, allow_any));
2360 }
2361 match fallback.take() {
2362 None => (),
2363 Some(SchemaContentDeserializerState::Group(_, Some(deserializer))) => {
2364 let data = deserializer.finish(helper)?;
2365 SchemaContentDeserializer::store_group(&mut values, data)?;
2366 }
2367 Some(_) => unreachable!(),
2368 }
2369 Ok(match artifact {
2370 DeserializerArtifact::None => unreachable!(),
2371 DeserializerArtifact::Data(data) => {
2372 SchemaContentDeserializer::store_group(&mut values, data)?;
2373 let data = SchemaContentDeserializer::finish_state(
2374 helper,
2375 SchemaContentDeserializerState::Group(values, None),
2376 )?;
2377 *self.state__ = SchemaContentDeserializerState::Done__(data);
2378 ElementHandlerOutput::Break { event, allow_any }
2379 }
2380 DeserializerArtifact::Deserializer(deserializer) => {
2381 *self.state__ =
2382 SchemaContentDeserializerState::Group(values, Some(deserializer));
2383 ElementHandlerOutput::from_event_end(event, allow_any)
2384 }
2385 })
2386 }
2387 fn handle_attribute_group<'de>(
2388 &mut self,
2389 helper: &mut DeserializeHelper,
2390 mut values: Option<super::AttributeGroupType>,
2391 output: DeserializerOutput<'de, super::AttributeGroupType>,
2392 fallback: &mut Option<SchemaContentDeserializerState>,
2393 ) -> Result<ElementHandlerOutput<'de>, Error> {
2394 let DeserializerOutput {
2395 artifact,
2396 event,
2397 allow_any,
2398 } = output;
2399 if artifact.is_none() {
2400 *self.state__ = match fallback.take() {
2401 None if values.is_none() => {
2402 *self.state__ = SchemaContentDeserializerState::Init__;
2403 return Ok(ElementHandlerOutput::from_event(event, allow_any));
2404 }
2405 None => SchemaContentDeserializerState::AttributeGroup(values, None),
2406 Some(SchemaContentDeserializerState::AttributeGroup(_, Some(deserializer))) => {
2407 SchemaContentDeserializerState::AttributeGroup(values, Some(deserializer))
2408 }
2409 _ => unreachable!(),
2410 };
2411 return Ok(ElementHandlerOutput::break_(event, allow_any));
2412 }
2413 match fallback.take() {
2414 None => (),
2415 Some(SchemaContentDeserializerState::AttributeGroup(_, Some(deserializer))) => {
2416 let data = deserializer.finish(helper)?;
2417 SchemaContentDeserializer::store_attribute_group(&mut values, data)?;
2418 }
2419 Some(_) => unreachable!(),
2420 }
2421 Ok(match artifact {
2422 DeserializerArtifact::None => unreachable!(),
2423 DeserializerArtifact::Data(data) => {
2424 SchemaContentDeserializer::store_attribute_group(&mut values, data)?;
2425 let data = SchemaContentDeserializer::finish_state(
2426 helper,
2427 SchemaContentDeserializerState::AttributeGroup(values, None),
2428 )?;
2429 *self.state__ = SchemaContentDeserializerState::Done__(data);
2430 ElementHandlerOutput::Break { event, allow_any }
2431 }
2432 DeserializerArtifact::Deserializer(deserializer) => {
2433 *self.state__ =
2434 SchemaContentDeserializerState::AttributeGroup(values, Some(deserializer));
2435 ElementHandlerOutput::from_event_end(event, allow_any)
2436 }
2437 })
2438 }
2439 fn handle_element<'de>(
2440 &mut self,
2441 helper: &mut DeserializeHelper,
2442 mut values: Option<super::ElementType>,
2443 output: DeserializerOutput<'de, super::ElementType>,
2444 fallback: &mut Option<SchemaContentDeserializerState>,
2445 ) -> Result<ElementHandlerOutput<'de>, Error> {
2446 let DeserializerOutput {
2447 artifact,
2448 event,
2449 allow_any,
2450 } = output;
2451 if artifact.is_none() {
2452 *self.state__ = match fallback.take() {
2453 None if values.is_none() => {
2454 *self.state__ = SchemaContentDeserializerState::Init__;
2455 return Ok(ElementHandlerOutput::from_event(event, allow_any));
2456 }
2457 None => SchemaContentDeserializerState::Element(values, None),
2458 Some(SchemaContentDeserializerState::Element(_, Some(deserializer))) => {
2459 SchemaContentDeserializerState::Element(values, Some(deserializer))
2460 }
2461 _ => unreachable!(),
2462 };
2463 return Ok(ElementHandlerOutput::break_(event, allow_any));
2464 }
2465 match fallback.take() {
2466 None => (),
2467 Some(SchemaContentDeserializerState::Element(_, Some(deserializer))) => {
2468 let data = deserializer.finish(helper)?;
2469 SchemaContentDeserializer::store_element(&mut values, data)?;
2470 }
2471 Some(_) => unreachable!(),
2472 }
2473 Ok(match artifact {
2474 DeserializerArtifact::None => unreachable!(),
2475 DeserializerArtifact::Data(data) => {
2476 SchemaContentDeserializer::store_element(&mut values, data)?;
2477 let data = SchemaContentDeserializer::finish_state(
2478 helper,
2479 SchemaContentDeserializerState::Element(values, None),
2480 )?;
2481 *self.state__ = SchemaContentDeserializerState::Done__(data);
2482 ElementHandlerOutput::Break { event, allow_any }
2483 }
2484 DeserializerArtifact::Deserializer(deserializer) => {
2485 *self.state__ =
2486 SchemaContentDeserializerState::Element(values, Some(deserializer));
2487 ElementHandlerOutput::from_event_end(event, allow_any)
2488 }
2489 })
2490 }
2491 fn handle_attribute<'de>(
2492 &mut self,
2493 helper: &mut DeserializeHelper,
2494 mut values: Option<super::AttributeType>,
2495 output: DeserializerOutput<'de, super::AttributeType>,
2496 fallback: &mut Option<SchemaContentDeserializerState>,
2497 ) -> Result<ElementHandlerOutput<'de>, Error> {
2498 let DeserializerOutput {
2499 artifact,
2500 event,
2501 allow_any,
2502 } = output;
2503 if artifact.is_none() {
2504 *self.state__ = match fallback.take() {
2505 None if values.is_none() => {
2506 *self.state__ = SchemaContentDeserializerState::Init__;
2507 return Ok(ElementHandlerOutput::from_event(event, allow_any));
2508 }
2509 None => SchemaContentDeserializerState::Attribute(values, None),
2510 Some(SchemaContentDeserializerState::Attribute(_, Some(deserializer))) => {
2511 SchemaContentDeserializerState::Attribute(values, Some(deserializer))
2512 }
2513 _ => unreachable!(),
2514 };
2515 return Ok(ElementHandlerOutput::break_(event, allow_any));
2516 }
2517 match fallback.take() {
2518 None => (),
2519 Some(SchemaContentDeserializerState::Attribute(_, Some(deserializer))) => {
2520 let data = deserializer.finish(helper)?;
2521 SchemaContentDeserializer::store_attribute(&mut values, data)?;
2522 }
2523 Some(_) => unreachable!(),
2524 }
2525 Ok(match artifact {
2526 DeserializerArtifact::None => unreachable!(),
2527 DeserializerArtifact::Data(data) => {
2528 SchemaContentDeserializer::store_attribute(&mut values, data)?;
2529 let data = SchemaContentDeserializer::finish_state(
2530 helper,
2531 SchemaContentDeserializerState::Attribute(values, None),
2532 )?;
2533 *self.state__ = SchemaContentDeserializerState::Done__(data);
2534 ElementHandlerOutput::Break { event, allow_any }
2535 }
2536 DeserializerArtifact::Deserializer(deserializer) => {
2537 *self.state__ =
2538 SchemaContentDeserializerState::Attribute(values, Some(deserializer));
2539 ElementHandlerOutput::from_event_end(event, allow_any)
2540 }
2541 })
2542 }
2543 fn handle_notation<'de>(
2544 &mut self,
2545 helper: &mut DeserializeHelper,
2546 mut values: Option<super::Notation>,
2547 output: DeserializerOutput<'de, super::Notation>,
2548 fallback: &mut Option<SchemaContentDeserializerState>,
2549 ) -> Result<ElementHandlerOutput<'de>, Error> {
2550 let DeserializerOutput {
2551 artifact,
2552 event,
2553 allow_any,
2554 } = output;
2555 if artifact.is_none() {
2556 *self.state__ = match fallback.take() {
2557 None if values.is_none() => {
2558 *self.state__ = SchemaContentDeserializerState::Init__;
2559 return Ok(ElementHandlerOutput::from_event(event, allow_any));
2560 }
2561 None => SchemaContentDeserializerState::Notation(values, None),
2562 Some(SchemaContentDeserializerState::Notation(_, Some(deserializer))) => {
2563 SchemaContentDeserializerState::Notation(values, Some(deserializer))
2564 }
2565 _ => unreachable!(),
2566 };
2567 return Ok(ElementHandlerOutput::break_(event, allow_any));
2568 }
2569 match fallback.take() {
2570 None => (),
2571 Some(SchemaContentDeserializerState::Notation(_, Some(deserializer))) => {
2572 let data = deserializer.finish(helper)?;
2573 SchemaContentDeserializer::store_notation(&mut values, data)?;
2574 }
2575 Some(_) => unreachable!(),
2576 }
2577 Ok(match artifact {
2578 DeserializerArtifact::None => unreachable!(),
2579 DeserializerArtifact::Data(data) => {
2580 SchemaContentDeserializer::store_notation(&mut values, data)?;
2581 let data = SchemaContentDeserializer::finish_state(
2582 helper,
2583 SchemaContentDeserializerState::Notation(values, None),
2584 )?;
2585 *self.state__ = SchemaContentDeserializerState::Done__(data);
2586 ElementHandlerOutput::Break { event, allow_any }
2587 }
2588 DeserializerArtifact::Deserializer(deserializer) => {
2589 *self.state__ =
2590 SchemaContentDeserializerState::Notation(values, Some(deserializer));
2591 ElementHandlerOutput::from_event_end(event, allow_any)
2592 }
2593 })
2594 }
2595 }
2596 impl<'de> Deserializer<'de, super::SchemaContent> for Box<SchemaContentDeserializer> {
2597 fn init(
2598 helper: &mut DeserializeHelper,
2599 event: Event<'de>,
2600 ) -> DeserializerResult<'de, super::SchemaContent> {
2601 let deserializer = Box::new(SchemaContentDeserializer {
2602 state__: Box::new(SchemaContentDeserializerState::Init__),
2603 });
2604 let mut output = deserializer.next(helper, event)?;
2605 output.artifact = match output.artifact {
2606 DeserializerArtifact::Deserializer(x)
2607 if matches!(&*x.state__, SchemaContentDeserializerState::Init__) =>
2608 {
2609 DeserializerArtifact::None
2610 }
2611 artifact => artifact,
2612 };
2613 Ok(output)
2614 }
2615 fn next(
2616 mut self,
2617 helper: &mut DeserializeHelper,
2618 event: Event<'de>,
2619 ) -> DeserializerResult<'de, super::SchemaContent> {
2620 use SchemaContentDeserializerState as S;
2621 let mut event = event;
2622 let mut fallback = None;
2623 let (event, allow_any) = loop {
2624 let state = replace(&mut *self.state__, S::Unknown__);
2625 event = match (state, event) {
2626 (S::Unknown__, _) => unreachable!(),
2627 (S::Include(values, Some(deserializer)), event) => {
2628 let output = deserializer.next(helper, event)?;
2629 match self.handle_include(helper, values, output, &mut fallback)? {
2630 ElementHandlerOutput::Break { event, allow_any } => {
2631 break (event, allow_any)
2632 }
2633 ElementHandlerOutput::Continue { event, .. } => event,
2634 }
2635 }
2636 (S::Import(values, Some(deserializer)), event) => {
2637 let output = deserializer.next(helper, event)?;
2638 match self.handle_import(helper, values, output, &mut fallback)? {
2639 ElementHandlerOutput::Break { event, allow_any } => {
2640 break (event, allow_any)
2641 }
2642 ElementHandlerOutput::Continue { event, .. } => event,
2643 }
2644 }
2645 (S::Redefine(values, Some(deserializer)), event) => {
2646 let output = deserializer.next(helper, event)?;
2647 match self.handle_redefine(helper, values, output, &mut fallback)? {
2648 ElementHandlerOutput::Break { event, allow_any } => {
2649 break (event, allow_any)
2650 }
2651 ElementHandlerOutput::Continue { event, .. } => event,
2652 }
2653 }
2654 (S::Override(values, Some(deserializer)), event) => {
2655 let output = deserializer.next(helper, event)?;
2656 match self.handle_override_(helper, values, output, &mut fallback)? {
2657 ElementHandlerOutput::Break { event, allow_any } => {
2658 break (event, allow_any)
2659 }
2660 ElementHandlerOutput::Continue { event, .. } => event,
2661 }
2662 }
2663 (S::Annotation(values, Some(deserializer)), event) => {
2664 let output = deserializer.next(helper, event)?;
2665 match self.handle_annotation(helper, values, output, &mut fallback)? {
2666 ElementHandlerOutput::Break { event, allow_any } => {
2667 break (event, allow_any)
2668 }
2669 ElementHandlerOutput::Continue { event, .. } => event,
2670 }
2671 }
2672 (S::DefaultOpenContent(values, Some(deserializer)), event) => {
2673 let output = deserializer.next(helper, event)?;
2674 match self.handle_default_open_content(
2675 helper,
2676 values,
2677 output,
2678 &mut fallback,
2679 )? {
2680 ElementHandlerOutput::Break { event, allow_any } => {
2681 break (event, allow_any)
2682 }
2683 ElementHandlerOutput::Continue { event, .. } => event,
2684 }
2685 }
2686 (S::SimpleType(values, Some(deserializer)), event) => {
2687 let output = deserializer.next(helper, event)?;
2688 match self.handle_simple_type(helper, values, output, &mut fallback)? {
2689 ElementHandlerOutput::Break { event, allow_any } => {
2690 break (event, allow_any)
2691 }
2692 ElementHandlerOutput::Continue { event, .. } => event,
2693 }
2694 }
2695 (S::ComplexType(values, Some(deserializer)), event) => {
2696 let output = deserializer.next(helper, event)?;
2697 match self.handle_complex_type(helper, values, output, &mut fallback)? {
2698 ElementHandlerOutput::Break { event, allow_any } => {
2699 break (event, allow_any)
2700 }
2701 ElementHandlerOutput::Continue { event, .. } => event,
2702 }
2703 }
2704 (S::Group(values, Some(deserializer)), event) => {
2705 let output = deserializer.next(helper, event)?;
2706 match self.handle_group(helper, values, output, &mut fallback)? {
2707 ElementHandlerOutput::Break { event, allow_any } => {
2708 break (event, allow_any)
2709 }
2710 ElementHandlerOutput::Continue { event, .. } => event,
2711 }
2712 }
2713 (S::AttributeGroup(values, Some(deserializer)), event) => {
2714 let output = deserializer.next(helper, event)?;
2715 match self.handle_attribute_group(helper, values, output, &mut fallback)? {
2716 ElementHandlerOutput::Break { event, allow_any } => {
2717 break (event, allow_any)
2718 }
2719 ElementHandlerOutput::Continue { event, .. } => event,
2720 }
2721 }
2722 (S::Element(values, Some(deserializer)), event) => {
2723 let output = deserializer.next(helper, event)?;
2724 match self.handle_element(helper, values, output, &mut fallback)? {
2725 ElementHandlerOutput::Break { event, allow_any } => {
2726 break (event, allow_any)
2727 }
2728 ElementHandlerOutput::Continue { event, .. } => event,
2729 }
2730 }
2731 (S::Attribute(values, Some(deserializer)), event) => {
2732 let output = deserializer.next(helper, event)?;
2733 match self.handle_attribute(helper, values, output, &mut fallback)? {
2734 ElementHandlerOutput::Break { event, allow_any } => {
2735 break (event, allow_any)
2736 }
2737 ElementHandlerOutput::Continue { event, .. } => event,
2738 }
2739 }
2740 (S::Notation(values, Some(deserializer)), event) => {
2741 let output = deserializer.next(helper, event)?;
2742 match self.handle_notation(helper, values, output, &mut fallback)? {
2743 ElementHandlerOutput::Break { event, allow_any } => {
2744 break (event, allow_any)
2745 }
2746 ElementHandlerOutput::Continue { event, .. } => event,
2747 }
2748 }
2749 (state, event @ Event::End(_)) => {
2750 return Ok(DeserializerOutput {
2751 artifact: DeserializerArtifact::Data(
2752 SchemaContentDeserializer::finish_state(helper, state)?,
2753 ),
2754 event: DeserializerEvent::Continue(event),
2755 allow_any: false,
2756 });
2757 }
2758 (S::Init__, event) => match self.find_suitable(helper, event, &mut fallback)? {
2759 ElementHandlerOutput::Break { event, allow_any } => {
2760 break (event, allow_any)
2761 }
2762 ElementHandlerOutput::Continue { event, .. } => event,
2763 },
2764 (S::Include(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
2765 let output = helper.init_start_tag_deserializer(
2766 event,
2767 Some(&super::NS_XS),
2768 b"include",
2769 false,
2770 )?;
2771 match self.handle_include(helper, values, output, &mut fallback)? {
2772 ElementHandlerOutput::Break { event, allow_any } => {
2773 break (event, allow_any)
2774 }
2775 ElementHandlerOutput::Continue { event, .. } => event,
2776 }
2777 }
2778 (S::Import(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
2779 let output = helper.init_start_tag_deserializer(
2780 event,
2781 Some(&super::NS_XS),
2782 b"import",
2783 false,
2784 )?;
2785 match self.handle_import(helper, values, output, &mut fallback)? {
2786 ElementHandlerOutput::Break { event, allow_any } => {
2787 break (event, allow_any)
2788 }
2789 ElementHandlerOutput::Continue { event, .. } => event,
2790 }
2791 }
2792 (S::Redefine(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
2793 let output = helper.init_start_tag_deserializer(
2794 event,
2795 Some(&super::NS_XS),
2796 b"redefine",
2797 true,
2798 )?;
2799 match self.handle_redefine(helper, values, output, &mut fallback)? {
2800 ElementHandlerOutput::Break { event, allow_any } => {
2801 break (event, allow_any)
2802 }
2803 ElementHandlerOutput::Continue { event, .. } => event,
2804 }
2805 }
2806 (S::Override(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
2807 let output = helper.init_start_tag_deserializer(
2808 event,
2809 Some(&super::NS_XS),
2810 b"override",
2811 true,
2812 )?;
2813 match self.handle_override_(helper, values, output, &mut fallback)? {
2814 ElementHandlerOutput::Break { event, allow_any } => {
2815 break (event, allow_any)
2816 }
2817 ElementHandlerOutput::Continue { event, .. } => event,
2818 }
2819 }
2820 (S::Annotation(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
2821 let output = helper.init_start_tag_deserializer(
2822 event,
2823 Some(&super::NS_XS),
2824 b"annotation",
2825 false,
2826 )?;
2827 match self.handle_annotation(helper, values, output, &mut fallback)? {
2828 ElementHandlerOutput::Break { event, allow_any } => {
2829 break (event, allow_any)
2830 }
2831 ElementHandlerOutput::Continue { event, .. } => event,
2832 }
2833 }
2834 (
2835 S::DefaultOpenContent(values, None),
2836 event @ (Event::Start(_) | Event::Empty(_)),
2837 ) => {
2838 let output = helper.init_start_tag_deserializer(
2839 event,
2840 Some(&super::NS_XS),
2841 b"defaultOpenContent",
2842 false,
2843 )?;
2844 match self.handle_default_open_content(
2845 helper,
2846 values,
2847 output,
2848 &mut fallback,
2849 )? {
2850 ElementHandlerOutput::Break { event, allow_any } => {
2851 break (event, allow_any)
2852 }
2853 ElementHandlerOutput::Continue { event, .. } => event,
2854 }
2855 }
2856 (S::SimpleType(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
2857 let output = helper.init_start_tag_deserializer(
2858 event,
2859 Some(&super::NS_XS),
2860 b"simpleType",
2861 true,
2862 )?;
2863 match self.handle_simple_type(helper, values, output, &mut fallback)? {
2864 ElementHandlerOutput::Break { event, allow_any } => {
2865 break (event, allow_any)
2866 }
2867 ElementHandlerOutput::Continue { event, .. } => event,
2868 }
2869 }
2870 (S::ComplexType(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
2871 let output = helper.init_start_tag_deserializer(
2872 event,
2873 Some(&super::NS_XS),
2874 b"complexType",
2875 true,
2876 )?;
2877 match self.handle_complex_type(helper, values, output, &mut fallback)? {
2878 ElementHandlerOutput::Break { event, allow_any } => {
2879 break (event, allow_any)
2880 }
2881 ElementHandlerOutput::Continue { event, .. } => event,
2882 }
2883 }
2884 (S::Group(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
2885 let output = helper.init_start_tag_deserializer(
2886 event,
2887 Some(&super::NS_XS),
2888 b"group",
2889 true,
2890 )?;
2891 match self.handle_group(helper, values, output, &mut fallback)? {
2892 ElementHandlerOutput::Break { event, allow_any } => {
2893 break (event, allow_any)
2894 }
2895 ElementHandlerOutput::Continue { event, .. } => event,
2896 }
2897 }
2898 (
2899 S::AttributeGroup(values, None),
2900 event @ (Event::Start(_) | Event::Empty(_)),
2901 ) => {
2902 let output = helper.init_start_tag_deserializer(
2903 event,
2904 Some(&super::NS_XS),
2905 b"attributeGroup",
2906 false,
2907 )?;
2908 match self.handle_attribute_group(helper, values, output, &mut fallback)? {
2909 ElementHandlerOutput::Break { event, allow_any } => {
2910 break (event, allow_any)
2911 }
2912 ElementHandlerOutput::Continue { event, .. } => event,
2913 }
2914 }
2915 (S::Element(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
2916 let output = helper.init_start_tag_deserializer(
2917 event,
2918 Some(&super::NS_XS),
2919 b"element",
2920 true,
2921 )?;
2922 match self.handle_element(helper, values, output, &mut fallback)? {
2923 ElementHandlerOutput::Break { event, allow_any } => {
2924 break (event, allow_any)
2925 }
2926 ElementHandlerOutput::Continue { event, .. } => event,
2927 }
2928 }
2929 (S::Attribute(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
2930 let output = helper.init_start_tag_deserializer(
2931 event,
2932 Some(&super::NS_XS),
2933 b"attribute",
2934 false,
2935 )?;
2936 match self.handle_attribute(helper, values, output, &mut fallback)? {
2937 ElementHandlerOutput::Break { event, allow_any } => {
2938 break (event, allow_any)
2939 }
2940 ElementHandlerOutput::Continue { event, .. } => event,
2941 }
2942 }
2943 (S::Notation(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
2944 let output = helper.init_start_tag_deserializer(
2945 event,
2946 Some(&super::NS_XS),
2947 b"notation",
2948 false,
2949 )?;
2950 match self.handle_notation(helper, values, output, &mut fallback)? {
2951 ElementHandlerOutput::Break { event, allow_any } => {
2952 break (event, allow_any)
2953 }
2954 ElementHandlerOutput::Continue { event, .. } => event,
2955 }
2956 }
2957 (s @ S::Done__(_), event) => {
2958 *self.state__ = s;
2959 break (DeserializerEvent::Continue(event), false);
2960 }
2961 (state, event) => {
2962 *self.state__ = state;
2963 break (DeserializerEvent::Break(event), false);
2964 }
2965 }
2966 };
2967 let artifact = if matches!(&*self.state__, S::Done__(_)) {
2968 DeserializerArtifact::Data(self.finish(helper)?)
2969 } else {
2970 DeserializerArtifact::Deserializer(self)
2971 };
2972 Ok(DeserializerOutput {
2973 artifact,
2974 event,
2975 allow_any,
2976 })
2977 }
2978 fn finish(self, helper: &mut DeserializeHelper) -> Result<super::SchemaContent, Error> {
2979 SchemaContentDeserializer::finish_state(helper, *self.state__)
2980 }
2981 }
2982 #[derive(Debug)]
2983 pub struct IncludeDeserializer {
2984 id: Option<String>,
2985 schema_location: String,
2986 annotation: Option<super::Annotation>,
2987 state__: Box<IncludeDeserializerState>,
2988 }
2989 #[derive(Debug)]
2990 enum IncludeDeserializerState {
2991 Init__,
2992 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
2993 Done__,
2994 Unknown__,
2995 }
2996 impl IncludeDeserializer {
2997 fn from_bytes_start(
2998 helper: &mut DeserializeHelper,
2999 bytes_start: &BytesStart<'_>,
3000 ) -> Result<Box<Self>, Error> {
3001 let mut id: Option<String> = None;
3002 let mut schema_location: Option<String> = None;
3003 for attrib in helper.filter_xmlns_attributes(bytes_start) {
3004 let attrib = attrib?;
3005 if matches!(
3006 helper.resolve_local_name(attrib.key, &super::NS_XS),
3007 Some(b"id")
3008 ) {
3009 helper.read_attrib(&mut id, b"id", &attrib.value)?;
3010 } else if matches!(
3011 helper.resolve_local_name(attrib.key, &super::NS_XS),
3012 Some(b"schemaLocation")
3013 ) {
3014 helper.read_attrib(&mut schema_location, b"schemaLocation", &attrib.value)?;
3015 }
3016 }
3017 Ok(Box::new(Self {
3018 id: id,
3019 schema_location: schema_location
3020 .ok_or_else(|| ErrorKind::MissingAttribute("schemaLocation".into()))?,
3021 annotation: None,
3022 state__: Box::new(IncludeDeserializerState::Init__),
3023 }))
3024 }
3025 fn finish_state(
3026 &mut self,
3027 helper: &mut DeserializeHelper,
3028 state: IncludeDeserializerState,
3029 ) -> Result<(), Error> {
3030 use IncludeDeserializerState as S;
3031 match state {
3032 S::Annotation(Some(deserializer)) => {
3033 self.store_annotation(deserializer.finish(helper)?)?
3034 }
3035 _ => (),
3036 }
3037 Ok(())
3038 }
3039 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
3040 if self.annotation.is_some() {
3041 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3042 b"annotation",
3043 )))?;
3044 }
3045 self.annotation = Some(value);
3046 Ok(())
3047 }
3048 fn handle_annotation<'de>(
3049 &mut self,
3050 helper: &mut DeserializeHelper,
3051 output: DeserializerOutput<'de, super::Annotation>,
3052 fallback: &mut Option<IncludeDeserializerState>,
3053 ) -> Result<ElementHandlerOutput<'de>, Error> {
3054 let DeserializerOutput {
3055 artifact,
3056 event,
3057 allow_any,
3058 } = output;
3059 if artifact.is_none() {
3060 fallback.get_or_insert(IncludeDeserializerState::Annotation(None));
3061 *self.state__ = IncludeDeserializerState::Done__;
3062 return Ok(ElementHandlerOutput::from_event(event, allow_any));
3063 }
3064 if let Some(fallback) = fallback.take() {
3065 self.finish_state(helper, fallback)?;
3066 }
3067 Ok(match artifact {
3068 DeserializerArtifact::None => unreachable!(),
3069 DeserializerArtifact::Data(data) => {
3070 self.store_annotation(data)?;
3071 *self.state__ = IncludeDeserializerState::Done__;
3072 ElementHandlerOutput::from_event(event, allow_any)
3073 }
3074 DeserializerArtifact::Deserializer(deserializer) => {
3075 let ret = ElementHandlerOutput::from_event(event, allow_any);
3076 match &ret {
3077 ElementHandlerOutput::Continue { .. } => {
3078 fallback.get_or_insert(IncludeDeserializerState::Annotation(Some(
3079 deserializer,
3080 )));
3081 *self.state__ = IncludeDeserializerState::Done__;
3082 }
3083 ElementHandlerOutput::Break { .. } => {
3084 *self.state__ =
3085 IncludeDeserializerState::Annotation(Some(deserializer));
3086 }
3087 }
3088 ret
3089 }
3090 })
3091 }
3092 }
3093 impl<'de> Deserializer<'de, super::Include> for Box<IncludeDeserializer> {
3094 fn init(
3095 helper: &mut DeserializeHelper,
3096 event: Event<'de>,
3097 ) -> DeserializerResult<'de, super::Include> {
3098 helper.init_deserializer_from_start_event(event, IncludeDeserializer::from_bytes_start)
3099 }
3100 fn next(
3101 mut self,
3102 helper: &mut DeserializeHelper,
3103 event: Event<'de>,
3104 ) -> DeserializerResult<'de, super::Include> {
3105 use IncludeDeserializerState as S;
3106 let mut event = event;
3107 let mut fallback = None;
3108 let mut allow_any_element = false;
3109 let (event, allow_any) = loop {
3110 let state = replace(&mut *self.state__, S::Unknown__);
3111 event = match (state, event) {
3112 (S::Unknown__, _) => unreachable!(),
3113 (S::Annotation(Some(deserializer)), event) => {
3114 let output = deserializer.next(helper, event)?;
3115 match self.handle_annotation(helper, output, &mut fallback)? {
3116 ElementHandlerOutput::Continue { event, allow_any } => {
3117 allow_any_element = allow_any_element || allow_any;
3118 event
3119 }
3120 ElementHandlerOutput::Break { event, allow_any } => {
3121 break (event, allow_any)
3122 }
3123 }
3124 }
3125 (_, Event::End(_)) => {
3126 if let Some(fallback) = fallback.take() {
3127 self.finish_state(helper, fallback)?;
3128 }
3129 return Ok(DeserializerOutput {
3130 artifact: DeserializerArtifact::Data(self.finish(helper)?),
3131 event: DeserializerEvent::None,
3132 allow_any: false,
3133 });
3134 }
3135 (S::Init__, event) => {
3136 fallback.get_or_insert(S::Init__);
3137 *self.state__ = IncludeDeserializerState::Annotation(None);
3138 event
3139 }
3140 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
3141 let output = helper.init_start_tag_deserializer(
3142 event,
3143 Some(&super::NS_XS),
3144 b"annotation",
3145 false,
3146 )?;
3147 match self.handle_annotation(helper, output, &mut fallback)? {
3148 ElementHandlerOutput::Continue { event, allow_any } => {
3149 allow_any_element = allow_any_element || allow_any;
3150 event
3151 }
3152 ElementHandlerOutput::Break { event, allow_any } => {
3153 break (event, allow_any)
3154 }
3155 }
3156 }
3157 (S::Done__, event) => {
3158 fallback.get_or_insert(S::Done__);
3159 break (DeserializerEvent::Continue(event), allow_any_element);
3160 }
3161 (state, event) => {
3162 *self.state__ = state;
3163 break (DeserializerEvent::Break(event), false);
3164 }
3165 }
3166 };
3167 if let Some(fallback) = fallback {
3168 *self.state__ = fallback;
3169 }
3170 Ok(DeserializerOutput {
3171 artifact: DeserializerArtifact::Deserializer(self),
3172 event,
3173 allow_any,
3174 })
3175 }
3176 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::Include, Error> {
3177 let state = replace(&mut *self.state__, IncludeDeserializerState::Unknown__);
3178 self.finish_state(helper, state)?;
3179 Ok(super::Include {
3180 id: self.id,
3181 schema_location: self.schema_location,
3182 annotation: self.annotation,
3183 })
3184 }
3185 }
3186 #[derive(Debug)]
3187 pub struct ImportDeserializer {
3188 id: Option<String>,
3189 namespace: Option<String>,
3190 schema_location: Option<String>,
3191 annotation: Option<super::Annotation>,
3192 state__: Box<ImportDeserializerState>,
3193 }
3194 #[derive(Debug)]
3195 enum ImportDeserializerState {
3196 Init__,
3197 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
3198 Done__,
3199 Unknown__,
3200 }
3201 impl ImportDeserializer {
3202 fn from_bytes_start(
3203 helper: &mut DeserializeHelper,
3204 bytes_start: &BytesStart<'_>,
3205 ) -> Result<Box<Self>, Error> {
3206 let mut id: Option<String> = None;
3207 let mut namespace: Option<String> = None;
3208 let mut schema_location: Option<String> = None;
3209 for attrib in helper.filter_xmlns_attributes(bytes_start) {
3210 let attrib = attrib?;
3211 if matches!(
3212 helper.resolve_local_name(attrib.key, &super::NS_XS),
3213 Some(b"id")
3214 ) {
3215 helper.read_attrib(&mut id, b"id", &attrib.value)?;
3216 } else if matches!(
3217 helper.resolve_local_name(attrib.key, &super::NS_XS),
3218 Some(b"namespace")
3219 ) {
3220 helper.read_attrib(&mut namespace, b"namespace", &attrib.value)?;
3221 } else if matches!(
3222 helper.resolve_local_name(attrib.key, &super::NS_XS),
3223 Some(b"schemaLocation")
3224 ) {
3225 helper.read_attrib(&mut schema_location, b"schemaLocation", &attrib.value)?;
3226 }
3227 }
3228 Ok(Box::new(Self {
3229 id: id,
3230 namespace: namespace,
3231 schema_location: schema_location,
3232 annotation: None,
3233 state__: Box::new(ImportDeserializerState::Init__),
3234 }))
3235 }
3236 fn finish_state(
3237 &mut self,
3238 helper: &mut DeserializeHelper,
3239 state: ImportDeserializerState,
3240 ) -> Result<(), Error> {
3241 use ImportDeserializerState as S;
3242 match state {
3243 S::Annotation(Some(deserializer)) => {
3244 self.store_annotation(deserializer.finish(helper)?)?
3245 }
3246 _ => (),
3247 }
3248 Ok(())
3249 }
3250 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
3251 if self.annotation.is_some() {
3252 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3253 b"annotation",
3254 )))?;
3255 }
3256 self.annotation = Some(value);
3257 Ok(())
3258 }
3259 fn handle_annotation<'de>(
3260 &mut self,
3261 helper: &mut DeserializeHelper,
3262 output: DeserializerOutput<'de, super::Annotation>,
3263 fallback: &mut Option<ImportDeserializerState>,
3264 ) -> Result<ElementHandlerOutput<'de>, Error> {
3265 let DeserializerOutput {
3266 artifact,
3267 event,
3268 allow_any,
3269 } = output;
3270 if artifact.is_none() {
3271 fallback.get_or_insert(ImportDeserializerState::Annotation(None));
3272 *self.state__ = ImportDeserializerState::Done__;
3273 return Ok(ElementHandlerOutput::from_event(event, allow_any));
3274 }
3275 if let Some(fallback) = fallback.take() {
3276 self.finish_state(helper, fallback)?;
3277 }
3278 Ok(match artifact {
3279 DeserializerArtifact::None => unreachable!(),
3280 DeserializerArtifact::Data(data) => {
3281 self.store_annotation(data)?;
3282 *self.state__ = ImportDeserializerState::Done__;
3283 ElementHandlerOutput::from_event(event, allow_any)
3284 }
3285 DeserializerArtifact::Deserializer(deserializer) => {
3286 let ret = ElementHandlerOutput::from_event(event, allow_any);
3287 match &ret {
3288 ElementHandlerOutput::Continue { .. } => {
3289 fallback.get_or_insert(ImportDeserializerState::Annotation(Some(
3290 deserializer,
3291 )));
3292 *self.state__ = ImportDeserializerState::Done__;
3293 }
3294 ElementHandlerOutput::Break { .. } => {
3295 *self.state__ = ImportDeserializerState::Annotation(Some(deserializer));
3296 }
3297 }
3298 ret
3299 }
3300 })
3301 }
3302 }
3303 impl<'de> Deserializer<'de, super::Import> for Box<ImportDeserializer> {
3304 fn init(
3305 helper: &mut DeserializeHelper,
3306 event: Event<'de>,
3307 ) -> DeserializerResult<'de, super::Import> {
3308 helper.init_deserializer_from_start_event(event, ImportDeserializer::from_bytes_start)
3309 }
3310 fn next(
3311 mut self,
3312 helper: &mut DeserializeHelper,
3313 event: Event<'de>,
3314 ) -> DeserializerResult<'de, super::Import> {
3315 use ImportDeserializerState as S;
3316 let mut event = event;
3317 let mut fallback = None;
3318 let mut allow_any_element = false;
3319 let (event, allow_any) = loop {
3320 let state = replace(&mut *self.state__, S::Unknown__);
3321 event = match (state, event) {
3322 (S::Unknown__, _) => unreachable!(),
3323 (S::Annotation(Some(deserializer)), event) => {
3324 let output = deserializer.next(helper, event)?;
3325 match self.handle_annotation(helper, output, &mut fallback)? {
3326 ElementHandlerOutput::Continue { event, allow_any } => {
3327 allow_any_element = allow_any_element || allow_any;
3328 event
3329 }
3330 ElementHandlerOutput::Break { event, allow_any } => {
3331 break (event, allow_any)
3332 }
3333 }
3334 }
3335 (_, Event::End(_)) => {
3336 if let Some(fallback) = fallback.take() {
3337 self.finish_state(helper, fallback)?;
3338 }
3339 return Ok(DeserializerOutput {
3340 artifact: DeserializerArtifact::Data(self.finish(helper)?),
3341 event: DeserializerEvent::None,
3342 allow_any: false,
3343 });
3344 }
3345 (S::Init__, event) => {
3346 fallback.get_or_insert(S::Init__);
3347 *self.state__ = ImportDeserializerState::Annotation(None);
3348 event
3349 }
3350 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
3351 let output = helper.init_start_tag_deserializer(
3352 event,
3353 Some(&super::NS_XS),
3354 b"annotation",
3355 false,
3356 )?;
3357 match self.handle_annotation(helper, output, &mut fallback)? {
3358 ElementHandlerOutput::Continue { event, allow_any } => {
3359 allow_any_element = allow_any_element || allow_any;
3360 event
3361 }
3362 ElementHandlerOutput::Break { event, allow_any } => {
3363 break (event, allow_any)
3364 }
3365 }
3366 }
3367 (S::Done__, event) => {
3368 fallback.get_or_insert(S::Done__);
3369 break (DeserializerEvent::Continue(event), allow_any_element);
3370 }
3371 (state, event) => {
3372 *self.state__ = state;
3373 break (DeserializerEvent::Break(event), false);
3374 }
3375 }
3376 };
3377 if let Some(fallback) = fallback {
3378 *self.state__ = fallback;
3379 }
3380 Ok(DeserializerOutput {
3381 artifact: DeserializerArtifact::Deserializer(self),
3382 event,
3383 allow_any,
3384 })
3385 }
3386 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::Import, Error> {
3387 let state = replace(&mut *self.state__, ImportDeserializerState::Unknown__);
3388 self.finish_state(helper, state)?;
3389 Ok(super::Import {
3390 id: self.id,
3391 namespace: self.namespace,
3392 schema_location: self.schema_location,
3393 annotation: self.annotation,
3394 })
3395 }
3396 }
3397 #[derive(Debug)]
3398 pub struct RedefineDeserializer {
3399 schema_location: String,
3400 id: Option<String>,
3401 content: Vec<super::RedefineContent>,
3402 state__: Box<RedefineDeserializerState>,
3403 }
3404 #[derive(Debug)]
3405 enum RedefineDeserializerState {
3406 Init__,
3407 Next__,
3408 Content__(<super::RedefineContent as WithDeserializer>::Deserializer),
3409 Unknown__,
3410 }
3411 impl RedefineDeserializer {
3412 fn from_bytes_start(
3413 helper: &mut DeserializeHelper,
3414 bytes_start: &BytesStart<'_>,
3415 ) -> Result<Box<Self>, Error> {
3416 let mut schema_location: Option<String> = None;
3417 let mut id: Option<String> = None;
3418 for attrib in helper.filter_xmlns_attributes(bytes_start) {
3419 let attrib = attrib?;
3420 if matches!(
3421 helper.resolve_local_name(attrib.key, &super::NS_XS),
3422 Some(b"schemaLocation")
3423 ) {
3424 helper.read_attrib(&mut schema_location, b"schemaLocation", &attrib.value)?;
3425 } else if matches!(
3426 helper.resolve_local_name(attrib.key, &super::NS_XS),
3427 Some(b"id")
3428 ) {
3429 helper.read_attrib(&mut id, b"id", &attrib.value)?;
3430 }
3431 }
3432 Ok(Box::new(Self {
3433 schema_location: schema_location
3434 .ok_or_else(|| ErrorKind::MissingAttribute("schemaLocation".into()))?,
3435 id: id,
3436 content: Vec::new(),
3437 state__: Box::new(RedefineDeserializerState::Init__),
3438 }))
3439 }
3440 fn finish_state(
3441 &mut self,
3442 helper: &mut DeserializeHelper,
3443 state: RedefineDeserializerState,
3444 ) -> Result<(), Error> {
3445 if let RedefineDeserializerState::Content__(deserializer) = state {
3446 self.store_content(deserializer.finish(helper)?)?;
3447 }
3448 Ok(())
3449 }
3450 fn store_content(&mut self, value: super::RedefineContent) -> Result<(), Error> {
3451 self.content.push(value);
3452 Ok(())
3453 }
3454 fn handle_content<'de>(
3455 &mut self,
3456 helper: &mut DeserializeHelper,
3457 output: DeserializerOutput<'de, super::RedefineContent>,
3458 fallback: &mut Option<RedefineDeserializerState>,
3459 ) -> Result<ElementHandlerOutput<'de>, Error> {
3460 let DeserializerOutput {
3461 artifact,
3462 event,
3463 allow_any,
3464 } = output;
3465 if artifact.is_none() {
3466 *self.state__ = fallback.take().unwrap_or(RedefineDeserializerState::Next__);
3467 return Ok(ElementHandlerOutput::break_(event, allow_any));
3468 }
3469 if let Some(fallback) = fallback.take() {
3470 self.finish_state(helper, fallback)?;
3471 }
3472 Ok(match artifact {
3473 DeserializerArtifact::None => unreachable!(),
3474 DeserializerArtifact::Data(data) => {
3475 self.store_content(data)?;
3476 *self.state__ = RedefineDeserializerState::Next__;
3477 ElementHandlerOutput::from_event(event, allow_any)
3478 }
3479 DeserializerArtifact::Deserializer(deserializer) => {
3480 let ret = ElementHandlerOutput::from_event(event, allow_any);
3481 match &ret {
3482 ElementHandlerOutput::Break { .. } => {
3483 *self.state__ = RedefineDeserializerState::Content__(deserializer);
3484 }
3485 ElementHandlerOutput::Continue { .. } => {
3486 fallback
3487 .get_or_insert(RedefineDeserializerState::Content__(deserializer));
3488 *self.state__ = RedefineDeserializerState::Next__;
3489 }
3490 }
3491 ret
3492 }
3493 })
3494 }
3495 }
3496 impl<'de> Deserializer<'de, super::Redefine> for Box<RedefineDeserializer> {
3497 fn init(
3498 helper: &mut DeserializeHelper,
3499 event: Event<'de>,
3500 ) -> DeserializerResult<'de, super::Redefine> {
3501 helper.init_deserializer_from_start_event(event, RedefineDeserializer::from_bytes_start)
3502 }
3503 fn next(
3504 mut self,
3505 helper: &mut DeserializeHelper,
3506 event: Event<'de>,
3507 ) -> DeserializerResult<'de, super::Redefine> {
3508 use RedefineDeserializerState as S;
3509 let mut event = event;
3510 let mut fallback = None;
3511 let (event, allow_any) = loop {
3512 let state = replace(&mut *self.state__, S::Unknown__);
3513 event = match (state, event) {
3514 (S::Unknown__, _) => unreachable!(),
3515 (S::Content__(deserializer), event) => {
3516 let output = deserializer.next(helper, event)?;
3517 match self.handle_content(helper, output, &mut fallback)? {
3518 ElementHandlerOutput::Break { event, allow_any } => {
3519 break (event, allow_any)
3520 }
3521 ElementHandlerOutput::Continue { event, .. } => event,
3522 }
3523 }
3524 (_, Event::End(_)) => {
3525 return Ok(DeserializerOutput {
3526 artifact: DeserializerArtifact::Data(self.finish(helper)?),
3527 event: DeserializerEvent::None,
3528 allow_any: false,
3529 });
3530 }
3531 (state @ (S::Init__ | S::Next__), event) => {
3532 fallback.get_or_insert(state);
3533 let output =
3534 <super::RedefineContent as WithDeserializer>::Deserializer::init(
3535 helper, event,
3536 )?;
3537 match self.handle_content(helper, output, &mut fallback)? {
3538 ElementHandlerOutput::Break { event, allow_any } => {
3539 break (event, allow_any)
3540 }
3541 ElementHandlerOutput::Continue { event, .. } => event,
3542 }
3543 }
3544 }
3545 };
3546 let artifact = DeserializerArtifact::Deserializer(self);
3547 Ok(DeserializerOutput {
3548 artifact,
3549 event,
3550 allow_any,
3551 })
3552 }
3553 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::Redefine, Error> {
3554 let state = replace(&mut *self.state__, RedefineDeserializerState::Unknown__);
3555 self.finish_state(helper, state)?;
3556 Ok(super::Redefine {
3557 schema_location: self.schema_location,
3558 id: self.id,
3559 content: self.content,
3560 })
3561 }
3562 }
3563 #[derive(Debug)]
3564 pub struct RedefineContentDeserializer {
3565 state__: Box<RedefineContentDeserializerState>,
3566 }
3567 #[derive(Debug)]
3568 pub enum RedefineContentDeserializerState {
3569 Init__,
3570 Annotation(
3571 Option<super::Annotation>,
3572 Option<<super::Annotation as WithDeserializer>::Deserializer>,
3573 ),
3574 SimpleType(
3575 Option<super::SimpleBaseType>,
3576 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
3577 ),
3578 ComplexType(
3579 Option<super::ComplexBaseType>,
3580 Option<<super::ComplexBaseType as WithDeserializer>::Deserializer>,
3581 ),
3582 Group(
3583 Option<super::GroupType>,
3584 Option<<super::GroupType as WithDeserializer>::Deserializer>,
3585 ),
3586 AttributeGroup(
3587 Option<super::AttributeGroupType>,
3588 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
3589 ),
3590 Done__(super::RedefineContent),
3591 Unknown__,
3592 }
3593 impl RedefineContentDeserializer {
3594 fn find_suitable<'de>(
3595 &mut self,
3596 helper: &mut DeserializeHelper,
3597 event: Event<'de>,
3598 fallback: &mut Option<RedefineContentDeserializerState>,
3599 ) -> Result<ElementHandlerOutput<'de>, Error> {
3600 if let Event::Start(x) | Event::Empty(x) = &event {
3601 if matches!(
3602 helper.resolve_local_name(x.name(), &super::NS_XS),
3603 Some(b"annotation")
3604 ) {
3605 let output =
3606 <super::Annotation as WithDeserializer>::Deserializer::init(helper, event)?;
3607 return self.handle_annotation(
3608 helper,
3609 Default::default(),
3610 output,
3611 &mut *fallback,
3612 );
3613 }
3614 if matches!(
3615 helper.resolve_local_name(x.name(), &super::NS_XS),
3616 Some(b"simpleType")
3617 ) {
3618 let output = <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
3619 helper, event,
3620 )?;
3621 return self.handle_simple_type(
3622 helper,
3623 Default::default(),
3624 output,
3625 &mut *fallback,
3626 );
3627 }
3628 if matches!(
3629 helper.resolve_local_name(x.name(), &super::NS_XS),
3630 Some(b"complexType")
3631 ) {
3632 let output = <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
3633 helper, event,
3634 )?;
3635 return self.handle_complex_type(
3636 helper,
3637 Default::default(),
3638 output,
3639 &mut *fallback,
3640 );
3641 }
3642 if matches!(
3643 helper.resolve_local_name(x.name(), &super::NS_XS),
3644 Some(b"group")
3645 ) {
3646 let output =
3647 <super::GroupType as WithDeserializer>::Deserializer::init(helper, event)?;
3648 return self.handle_group(helper, Default::default(), output, &mut *fallback);
3649 }
3650 if matches!(
3651 helper.resolve_local_name(x.name(), &super::NS_XS),
3652 Some(b"attributeGroup")
3653 ) {
3654 let output =
3655 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
3656 helper, event,
3657 )?;
3658 return self.handle_attribute_group(
3659 helper,
3660 Default::default(),
3661 output,
3662 &mut *fallback,
3663 );
3664 }
3665 }
3666 *self.state__ = fallback
3667 .take()
3668 .unwrap_or(RedefineContentDeserializerState::Init__);
3669 Ok(ElementHandlerOutput::return_to_parent(event, false))
3670 }
3671 fn finish_state(
3672 helper: &mut DeserializeHelper,
3673 state: RedefineContentDeserializerState,
3674 ) -> Result<super::RedefineContent, Error> {
3675 use RedefineContentDeserializerState as S;
3676 match state {
3677 S::Unknown__ => unreachable!(),
3678 S::Init__ => Err(ErrorKind::MissingContent.into()),
3679 S::Annotation(mut values, deserializer) => {
3680 if let Some(deserializer) = deserializer {
3681 let value = deserializer.finish(helper)?;
3682 RedefineContentDeserializer::store_annotation(&mut values, value)?;
3683 }
3684 Ok(super::RedefineContent::Annotation(values.ok_or_else(
3685 || ErrorKind::MissingElement("annotation".into()),
3686 )?))
3687 }
3688 S::SimpleType(mut values, deserializer) => {
3689 if let Some(deserializer) = deserializer {
3690 let value = deserializer.finish(helper)?;
3691 RedefineContentDeserializer::store_simple_type(&mut values, value)?;
3692 }
3693 Ok(super::RedefineContent::SimpleType(values.ok_or_else(
3694 || ErrorKind::MissingElement("simpleType".into()),
3695 )?))
3696 }
3697 S::ComplexType(mut values, deserializer) => {
3698 if let Some(deserializer) = deserializer {
3699 let value = deserializer.finish(helper)?;
3700 RedefineContentDeserializer::store_complex_type(&mut values, value)?;
3701 }
3702 Ok(super::RedefineContent::ComplexType(values.ok_or_else(
3703 || ErrorKind::MissingElement("complexType".into()),
3704 )?))
3705 }
3706 S::Group(mut values, deserializer) => {
3707 if let Some(deserializer) = deserializer {
3708 let value = deserializer.finish(helper)?;
3709 RedefineContentDeserializer::store_group(&mut values, value)?;
3710 }
3711 Ok(super::RedefineContent::Group(values.ok_or_else(|| {
3712 ErrorKind::MissingElement("group".into())
3713 })?))
3714 }
3715 S::AttributeGroup(mut values, deserializer) => {
3716 if let Some(deserializer) = deserializer {
3717 let value = deserializer.finish(helper)?;
3718 RedefineContentDeserializer::store_attribute_group(&mut values, value)?;
3719 }
3720 Ok(super::RedefineContent::AttributeGroup(values.ok_or_else(
3721 || ErrorKind::MissingElement("attributeGroup".into()),
3722 )?))
3723 }
3724 S::Done__(data) => Ok(data),
3725 }
3726 }
3727 fn store_annotation(
3728 values: &mut Option<super::Annotation>,
3729 value: super::Annotation,
3730 ) -> Result<(), Error> {
3731 if values.is_some() {
3732 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3733 b"annotation",
3734 )))?;
3735 }
3736 *values = Some(value);
3737 Ok(())
3738 }
3739 fn store_simple_type(
3740 values: &mut Option<super::SimpleBaseType>,
3741 value: super::SimpleBaseType,
3742 ) -> Result<(), Error> {
3743 if values.is_some() {
3744 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3745 b"simpleType",
3746 )))?;
3747 }
3748 *values = Some(value);
3749 Ok(())
3750 }
3751 fn store_complex_type(
3752 values: &mut Option<super::ComplexBaseType>,
3753 value: super::ComplexBaseType,
3754 ) -> Result<(), Error> {
3755 if values.is_some() {
3756 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3757 b"complexType",
3758 )))?;
3759 }
3760 *values = Some(value);
3761 Ok(())
3762 }
3763 fn store_group(
3764 values: &mut Option<super::GroupType>,
3765 value: super::GroupType,
3766 ) -> Result<(), Error> {
3767 if values.is_some() {
3768 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3769 b"group",
3770 )))?;
3771 }
3772 *values = Some(value);
3773 Ok(())
3774 }
3775 fn store_attribute_group(
3776 values: &mut Option<super::AttributeGroupType>,
3777 value: super::AttributeGroupType,
3778 ) -> Result<(), Error> {
3779 if values.is_some() {
3780 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3781 b"attributeGroup",
3782 )))?;
3783 }
3784 *values = Some(value);
3785 Ok(())
3786 }
3787 fn handle_annotation<'de>(
3788 &mut self,
3789 helper: &mut DeserializeHelper,
3790 mut values: Option<super::Annotation>,
3791 output: DeserializerOutput<'de, super::Annotation>,
3792 fallback: &mut Option<RedefineContentDeserializerState>,
3793 ) -> Result<ElementHandlerOutput<'de>, Error> {
3794 let DeserializerOutput {
3795 artifact,
3796 event,
3797 allow_any,
3798 } = output;
3799 if artifact.is_none() {
3800 *self.state__ = match fallback.take() {
3801 None if values.is_none() => {
3802 *self.state__ = RedefineContentDeserializerState::Init__;
3803 return Ok(ElementHandlerOutput::from_event(event, allow_any));
3804 }
3805 None => RedefineContentDeserializerState::Annotation(values, None),
3806 Some(RedefineContentDeserializerState::Annotation(_, Some(deserializer))) => {
3807 RedefineContentDeserializerState::Annotation(values, Some(deserializer))
3808 }
3809 _ => unreachable!(),
3810 };
3811 return Ok(ElementHandlerOutput::break_(event, allow_any));
3812 }
3813 match fallback.take() {
3814 None => (),
3815 Some(RedefineContentDeserializerState::Annotation(_, Some(deserializer))) => {
3816 let data = deserializer.finish(helper)?;
3817 RedefineContentDeserializer::store_annotation(&mut values, data)?;
3818 }
3819 Some(_) => unreachable!(),
3820 }
3821 Ok(match artifact {
3822 DeserializerArtifact::None => unreachable!(),
3823 DeserializerArtifact::Data(data) => {
3824 RedefineContentDeserializer::store_annotation(&mut values, data)?;
3825 let data = RedefineContentDeserializer::finish_state(
3826 helper,
3827 RedefineContentDeserializerState::Annotation(values, None),
3828 )?;
3829 *self.state__ = RedefineContentDeserializerState::Done__(data);
3830 ElementHandlerOutput::Break { event, allow_any }
3831 }
3832 DeserializerArtifact::Deserializer(deserializer) => {
3833 *self.state__ =
3834 RedefineContentDeserializerState::Annotation(values, Some(deserializer));
3835 ElementHandlerOutput::from_event_end(event, allow_any)
3836 }
3837 })
3838 }
3839 fn handle_simple_type<'de>(
3840 &mut self,
3841 helper: &mut DeserializeHelper,
3842 mut values: Option<super::SimpleBaseType>,
3843 output: DeserializerOutput<'de, super::SimpleBaseType>,
3844 fallback: &mut Option<RedefineContentDeserializerState>,
3845 ) -> Result<ElementHandlerOutput<'de>, Error> {
3846 let DeserializerOutput {
3847 artifact,
3848 event,
3849 allow_any,
3850 } = output;
3851 if artifact.is_none() {
3852 *self.state__ = match fallback.take() {
3853 None if values.is_none() => {
3854 *self.state__ = RedefineContentDeserializerState::Init__;
3855 return Ok(ElementHandlerOutput::from_event(event, allow_any));
3856 }
3857 None => RedefineContentDeserializerState::SimpleType(values, None),
3858 Some(RedefineContentDeserializerState::SimpleType(_, Some(deserializer))) => {
3859 RedefineContentDeserializerState::SimpleType(values, Some(deserializer))
3860 }
3861 _ => unreachable!(),
3862 };
3863 return Ok(ElementHandlerOutput::break_(event, allow_any));
3864 }
3865 match fallback.take() {
3866 None => (),
3867 Some(RedefineContentDeserializerState::SimpleType(_, Some(deserializer))) => {
3868 let data = deserializer.finish(helper)?;
3869 RedefineContentDeserializer::store_simple_type(&mut values, data)?;
3870 }
3871 Some(_) => unreachable!(),
3872 }
3873 Ok(match artifact {
3874 DeserializerArtifact::None => unreachable!(),
3875 DeserializerArtifact::Data(data) => {
3876 RedefineContentDeserializer::store_simple_type(&mut values, data)?;
3877 let data = RedefineContentDeserializer::finish_state(
3878 helper,
3879 RedefineContentDeserializerState::SimpleType(values, None),
3880 )?;
3881 *self.state__ = RedefineContentDeserializerState::Done__(data);
3882 ElementHandlerOutput::Break { event, allow_any }
3883 }
3884 DeserializerArtifact::Deserializer(deserializer) => {
3885 *self.state__ =
3886 RedefineContentDeserializerState::SimpleType(values, Some(deserializer));
3887 ElementHandlerOutput::from_event_end(event, allow_any)
3888 }
3889 })
3890 }
3891 fn handle_complex_type<'de>(
3892 &mut self,
3893 helper: &mut DeserializeHelper,
3894 mut values: Option<super::ComplexBaseType>,
3895 output: DeserializerOutput<'de, super::ComplexBaseType>,
3896 fallback: &mut Option<RedefineContentDeserializerState>,
3897 ) -> Result<ElementHandlerOutput<'de>, Error> {
3898 let DeserializerOutput {
3899 artifact,
3900 event,
3901 allow_any,
3902 } = output;
3903 if artifact.is_none() {
3904 *self.state__ = match fallback.take() {
3905 None if values.is_none() => {
3906 *self.state__ = RedefineContentDeserializerState::Init__;
3907 return Ok(ElementHandlerOutput::from_event(event, allow_any));
3908 }
3909 None => RedefineContentDeserializerState::ComplexType(values, None),
3910 Some(RedefineContentDeserializerState::ComplexType(_, Some(deserializer))) => {
3911 RedefineContentDeserializerState::ComplexType(values, Some(deserializer))
3912 }
3913 _ => unreachable!(),
3914 };
3915 return Ok(ElementHandlerOutput::break_(event, allow_any));
3916 }
3917 match fallback.take() {
3918 None => (),
3919 Some(RedefineContentDeserializerState::ComplexType(_, Some(deserializer))) => {
3920 let data = deserializer.finish(helper)?;
3921 RedefineContentDeserializer::store_complex_type(&mut values, data)?;
3922 }
3923 Some(_) => unreachable!(),
3924 }
3925 Ok(match artifact {
3926 DeserializerArtifact::None => unreachable!(),
3927 DeserializerArtifact::Data(data) => {
3928 RedefineContentDeserializer::store_complex_type(&mut values, data)?;
3929 let data = RedefineContentDeserializer::finish_state(
3930 helper,
3931 RedefineContentDeserializerState::ComplexType(values, None),
3932 )?;
3933 *self.state__ = RedefineContentDeserializerState::Done__(data);
3934 ElementHandlerOutput::Break { event, allow_any }
3935 }
3936 DeserializerArtifact::Deserializer(deserializer) => {
3937 *self.state__ =
3938 RedefineContentDeserializerState::ComplexType(values, Some(deserializer));
3939 ElementHandlerOutput::from_event_end(event, allow_any)
3940 }
3941 })
3942 }
3943 fn handle_group<'de>(
3944 &mut self,
3945 helper: &mut DeserializeHelper,
3946 mut values: Option<super::GroupType>,
3947 output: DeserializerOutput<'de, super::GroupType>,
3948 fallback: &mut Option<RedefineContentDeserializerState>,
3949 ) -> Result<ElementHandlerOutput<'de>, Error> {
3950 let DeserializerOutput {
3951 artifact,
3952 event,
3953 allow_any,
3954 } = output;
3955 if artifact.is_none() {
3956 *self.state__ = match fallback.take() {
3957 None if values.is_none() => {
3958 *self.state__ = RedefineContentDeserializerState::Init__;
3959 return Ok(ElementHandlerOutput::from_event(event, allow_any));
3960 }
3961 None => RedefineContentDeserializerState::Group(values, None),
3962 Some(RedefineContentDeserializerState::Group(_, Some(deserializer))) => {
3963 RedefineContentDeserializerState::Group(values, Some(deserializer))
3964 }
3965 _ => unreachable!(),
3966 };
3967 return Ok(ElementHandlerOutput::break_(event, allow_any));
3968 }
3969 match fallback.take() {
3970 None => (),
3971 Some(RedefineContentDeserializerState::Group(_, Some(deserializer))) => {
3972 let data = deserializer.finish(helper)?;
3973 RedefineContentDeserializer::store_group(&mut values, data)?;
3974 }
3975 Some(_) => unreachable!(),
3976 }
3977 Ok(match artifact {
3978 DeserializerArtifact::None => unreachable!(),
3979 DeserializerArtifact::Data(data) => {
3980 RedefineContentDeserializer::store_group(&mut values, data)?;
3981 let data = RedefineContentDeserializer::finish_state(
3982 helper,
3983 RedefineContentDeserializerState::Group(values, None),
3984 )?;
3985 *self.state__ = RedefineContentDeserializerState::Done__(data);
3986 ElementHandlerOutput::Break { event, allow_any }
3987 }
3988 DeserializerArtifact::Deserializer(deserializer) => {
3989 *self.state__ =
3990 RedefineContentDeserializerState::Group(values, Some(deserializer));
3991 ElementHandlerOutput::from_event_end(event, allow_any)
3992 }
3993 })
3994 }
3995 fn handle_attribute_group<'de>(
3996 &mut self,
3997 helper: &mut DeserializeHelper,
3998 mut values: Option<super::AttributeGroupType>,
3999 output: DeserializerOutput<'de, super::AttributeGroupType>,
4000 fallback: &mut Option<RedefineContentDeserializerState>,
4001 ) -> Result<ElementHandlerOutput<'de>, Error> {
4002 let DeserializerOutput {
4003 artifact,
4004 event,
4005 allow_any,
4006 } = output;
4007 if artifact.is_none() {
4008 *self.state__ = match fallback.take() {
4009 None if values.is_none() => {
4010 *self.state__ = RedefineContentDeserializerState::Init__;
4011 return Ok(ElementHandlerOutput::from_event(event, allow_any));
4012 }
4013 None => RedefineContentDeserializerState::AttributeGroup(values, None),
4014 Some(RedefineContentDeserializerState::AttributeGroup(
4015 _,
4016 Some(deserializer),
4017 )) => {
4018 RedefineContentDeserializerState::AttributeGroup(values, Some(deserializer))
4019 }
4020 _ => unreachable!(),
4021 };
4022 return Ok(ElementHandlerOutput::break_(event, allow_any));
4023 }
4024 match fallback.take() {
4025 None => (),
4026 Some(RedefineContentDeserializerState::AttributeGroup(_, Some(deserializer))) => {
4027 let data = deserializer.finish(helper)?;
4028 RedefineContentDeserializer::store_attribute_group(&mut values, data)?;
4029 }
4030 Some(_) => unreachable!(),
4031 }
4032 Ok(match artifact {
4033 DeserializerArtifact::None => unreachable!(),
4034 DeserializerArtifact::Data(data) => {
4035 RedefineContentDeserializer::store_attribute_group(&mut values, data)?;
4036 let data = RedefineContentDeserializer::finish_state(
4037 helper,
4038 RedefineContentDeserializerState::AttributeGroup(values, None),
4039 )?;
4040 *self.state__ = RedefineContentDeserializerState::Done__(data);
4041 ElementHandlerOutput::Break { event, allow_any }
4042 }
4043 DeserializerArtifact::Deserializer(deserializer) => {
4044 *self.state__ = RedefineContentDeserializerState::AttributeGroup(
4045 values,
4046 Some(deserializer),
4047 );
4048 ElementHandlerOutput::from_event_end(event, allow_any)
4049 }
4050 })
4051 }
4052 }
4053 impl<'de> Deserializer<'de, super::RedefineContent> for Box<RedefineContentDeserializer> {
4054 fn init(
4055 helper: &mut DeserializeHelper,
4056 event: Event<'de>,
4057 ) -> DeserializerResult<'de, super::RedefineContent> {
4058 let deserializer = Box::new(RedefineContentDeserializer {
4059 state__: Box::new(RedefineContentDeserializerState::Init__),
4060 });
4061 let mut output = deserializer.next(helper, event)?;
4062 output.artifact = match output.artifact {
4063 DeserializerArtifact::Deserializer(x)
4064 if matches!(&*x.state__, RedefineContentDeserializerState::Init__) =>
4065 {
4066 DeserializerArtifact::None
4067 }
4068 artifact => artifact,
4069 };
4070 Ok(output)
4071 }
4072 fn next(
4073 mut self,
4074 helper: &mut DeserializeHelper,
4075 event: Event<'de>,
4076 ) -> DeserializerResult<'de, super::RedefineContent> {
4077 use RedefineContentDeserializerState as S;
4078 let mut event = event;
4079 let mut fallback = None;
4080 let (event, allow_any) = loop {
4081 let state = replace(&mut *self.state__, S::Unknown__);
4082 event = match (state, event) {
4083 (S::Unknown__, _) => unreachable!(),
4084 (S::Annotation(values, Some(deserializer)), event) => {
4085 let output = deserializer.next(helper, event)?;
4086 match self.handle_annotation(helper, values, output, &mut fallback)? {
4087 ElementHandlerOutput::Break { event, allow_any } => {
4088 break (event, allow_any)
4089 }
4090 ElementHandlerOutput::Continue { event, .. } => event,
4091 }
4092 }
4093 (S::SimpleType(values, Some(deserializer)), event) => {
4094 let output = deserializer.next(helper, event)?;
4095 match self.handle_simple_type(helper, values, output, &mut fallback)? {
4096 ElementHandlerOutput::Break { event, allow_any } => {
4097 break (event, allow_any)
4098 }
4099 ElementHandlerOutput::Continue { event, .. } => event,
4100 }
4101 }
4102 (S::ComplexType(values, Some(deserializer)), event) => {
4103 let output = deserializer.next(helper, event)?;
4104 match self.handle_complex_type(helper, values, output, &mut fallback)? {
4105 ElementHandlerOutput::Break { event, allow_any } => {
4106 break (event, allow_any)
4107 }
4108 ElementHandlerOutput::Continue { event, .. } => event,
4109 }
4110 }
4111 (S::Group(values, Some(deserializer)), event) => {
4112 let output = deserializer.next(helper, event)?;
4113 match self.handle_group(helper, values, output, &mut fallback)? {
4114 ElementHandlerOutput::Break { event, allow_any } => {
4115 break (event, allow_any)
4116 }
4117 ElementHandlerOutput::Continue { event, .. } => event,
4118 }
4119 }
4120 (S::AttributeGroup(values, Some(deserializer)), event) => {
4121 let output = deserializer.next(helper, event)?;
4122 match self.handle_attribute_group(helper, values, output, &mut fallback)? {
4123 ElementHandlerOutput::Break { event, allow_any } => {
4124 break (event, allow_any)
4125 }
4126 ElementHandlerOutput::Continue { event, .. } => event,
4127 }
4128 }
4129 (state, event @ Event::End(_)) => {
4130 return Ok(DeserializerOutput {
4131 artifact: DeserializerArtifact::Data(
4132 RedefineContentDeserializer::finish_state(helper, state)?,
4133 ),
4134 event: DeserializerEvent::Continue(event),
4135 allow_any: false,
4136 });
4137 }
4138 (S::Init__, event) => match self.find_suitable(helper, event, &mut fallback)? {
4139 ElementHandlerOutput::Break { event, allow_any } => {
4140 break (event, allow_any)
4141 }
4142 ElementHandlerOutput::Continue { event, .. } => event,
4143 },
4144 (S::Annotation(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
4145 let output = helper.init_start_tag_deserializer(
4146 event,
4147 Some(&super::NS_XS),
4148 b"annotation",
4149 false,
4150 )?;
4151 match self.handle_annotation(helper, values, output, &mut fallback)? {
4152 ElementHandlerOutput::Break { event, allow_any } => {
4153 break (event, allow_any)
4154 }
4155 ElementHandlerOutput::Continue { event, .. } => event,
4156 }
4157 }
4158 (S::SimpleType(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
4159 let output = helper.init_start_tag_deserializer(
4160 event,
4161 Some(&super::NS_XS),
4162 b"simpleType",
4163 true,
4164 )?;
4165 match self.handle_simple_type(helper, values, output, &mut fallback)? {
4166 ElementHandlerOutput::Break { event, allow_any } => {
4167 break (event, allow_any)
4168 }
4169 ElementHandlerOutput::Continue { event, .. } => event,
4170 }
4171 }
4172 (S::ComplexType(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
4173 let output = helper.init_start_tag_deserializer(
4174 event,
4175 Some(&super::NS_XS),
4176 b"complexType",
4177 true,
4178 )?;
4179 match self.handle_complex_type(helper, values, output, &mut fallback)? {
4180 ElementHandlerOutput::Break { event, allow_any } => {
4181 break (event, allow_any)
4182 }
4183 ElementHandlerOutput::Continue { event, .. } => event,
4184 }
4185 }
4186 (S::Group(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
4187 let output = helper.init_start_tag_deserializer(
4188 event,
4189 Some(&super::NS_XS),
4190 b"group",
4191 true,
4192 )?;
4193 match self.handle_group(helper, values, output, &mut fallback)? {
4194 ElementHandlerOutput::Break { event, allow_any } => {
4195 break (event, allow_any)
4196 }
4197 ElementHandlerOutput::Continue { event, .. } => event,
4198 }
4199 }
4200 (
4201 S::AttributeGroup(values, None),
4202 event @ (Event::Start(_) | Event::Empty(_)),
4203 ) => {
4204 let output = helper.init_start_tag_deserializer(
4205 event,
4206 Some(&super::NS_XS),
4207 b"attributeGroup",
4208 false,
4209 )?;
4210 match self.handle_attribute_group(helper, values, output, &mut fallback)? {
4211 ElementHandlerOutput::Break { event, allow_any } => {
4212 break (event, allow_any)
4213 }
4214 ElementHandlerOutput::Continue { event, .. } => event,
4215 }
4216 }
4217 (s @ S::Done__(_), event) => {
4218 *self.state__ = s;
4219 break (DeserializerEvent::Continue(event), false);
4220 }
4221 (state, event) => {
4222 *self.state__ = state;
4223 break (DeserializerEvent::Break(event), false);
4224 }
4225 }
4226 };
4227 let artifact = if matches!(&*self.state__, S::Done__(_)) {
4228 DeserializerArtifact::Data(self.finish(helper)?)
4229 } else {
4230 DeserializerArtifact::Deserializer(self)
4231 };
4232 Ok(DeserializerOutput {
4233 artifact,
4234 event,
4235 allow_any,
4236 })
4237 }
4238 fn finish(self, helper: &mut DeserializeHelper) -> Result<super::RedefineContent, Error> {
4239 RedefineContentDeserializer::finish_state(helper, *self.state__)
4240 }
4241 }
4242 #[derive(Debug)]
4243 pub struct OverrideDeserializer {
4244 schema_location: String,
4245 id: Option<String>,
4246 content: Vec<super::OverrideContent>,
4247 state__: Box<OverrideDeserializerState>,
4248 }
4249 #[derive(Debug)]
4250 enum OverrideDeserializerState {
4251 Init__,
4252 Next__,
4253 Content__(<super::OverrideContent as WithDeserializer>::Deserializer),
4254 Unknown__,
4255 }
4256 impl OverrideDeserializer {
4257 fn from_bytes_start(
4258 helper: &mut DeserializeHelper,
4259 bytes_start: &BytesStart<'_>,
4260 ) -> Result<Box<Self>, Error> {
4261 let mut schema_location: Option<String> = None;
4262 let mut id: Option<String> = None;
4263 for attrib in helper.filter_xmlns_attributes(bytes_start) {
4264 let attrib = attrib?;
4265 if matches!(
4266 helper.resolve_local_name(attrib.key, &super::NS_XS),
4267 Some(b"schemaLocation")
4268 ) {
4269 helper.read_attrib(&mut schema_location, b"schemaLocation", &attrib.value)?;
4270 } else if matches!(
4271 helper.resolve_local_name(attrib.key, &super::NS_XS),
4272 Some(b"id")
4273 ) {
4274 helper.read_attrib(&mut id, b"id", &attrib.value)?;
4275 }
4276 }
4277 Ok(Box::new(Self {
4278 schema_location: schema_location
4279 .ok_or_else(|| ErrorKind::MissingAttribute("schemaLocation".into()))?,
4280 id: id,
4281 content: Vec::new(),
4282 state__: Box::new(OverrideDeserializerState::Init__),
4283 }))
4284 }
4285 fn finish_state(
4286 &mut self,
4287 helper: &mut DeserializeHelper,
4288 state: OverrideDeserializerState,
4289 ) -> Result<(), Error> {
4290 if let OverrideDeserializerState::Content__(deserializer) = state {
4291 self.store_content(deserializer.finish(helper)?)?;
4292 }
4293 Ok(())
4294 }
4295 fn store_content(&mut self, value: super::OverrideContent) -> Result<(), Error> {
4296 self.content.push(value);
4297 Ok(())
4298 }
4299 fn handle_content<'de>(
4300 &mut self,
4301 helper: &mut DeserializeHelper,
4302 output: DeserializerOutput<'de, super::OverrideContent>,
4303 fallback: &mut Option<OverrideDeserializerState>,
4304 ) -> Result<ElementHandlerOutput<'de>, Error> {
4305 let DeserializerOutput {
4306 artifact,
4307 event,
4308 allow_any,
4309 } = output;
4310 if artifact.is_none() {
4311 *self.state__ = fallback.take().unwrap_or(OverrideDeserializerState::Next__);
4312 return Ok(ElementHandlerOutput::break_(event, allow_any));
4313 }
4314 if let Some(fallback) = fallback.take() {
4315 self.finish_state(helper, fallback)?;
4316 }
4317 Ok(match artifact {
4318 DeserializerArtifact::None => unreachable!(),
4319 DeserializerArtifact::Data(data) => {
4320 self.store_content(data)?;
4321 *self.state__ = OverrideDeserializerState::Next__;
4322 ElementHandlerOutput::from_event(event, allow_any)
4323 }
4324 DeserializerArtifact::Deserializer(deserializer) => {
4325 let ret = ElementHandlerOutput::from_event(event, allow_any);
4326 match &ret {
4327 ElementHandlerOutput::Break { .. } => {
4328 *self.state__ = OverrideDeserializerState::Content__(deserializer);
4329 }
4330 ElementHandlerOutput::Continue { .. } => {
4331 fallback
4332 .get_or_insert(OverrideDeserializerState::Content__(deserializer));
4333 *self.state__ = OverrideDeserializerState::Next__;
4334 }
4335 }
4336 ret
4337 }
4338 })
4339 }
4340 }
4341 impl<'de> Deserializer<'de, super::Override> for Box<OverrideDeserializer> {
4342 fn init(
4343 helper: &mut DeserializeHelper,
4344 event: Event<'de>,
4345 ) -> DeserializerResult<'de, super::Override> {
4346 helper.init_deserializer_from_start_event(event, OverrideDeserializer::from_bytes_start)
4347 }
4348 fn next(
4349 mut self,
4350 helper: &mut DeserializeHelper,
4351 event: Event<'de>,
4352 ) -> DeserializerResult<'de, super::Override> {
4353 use OverrideDeserializerState as S;
4354 let mut event = event;
4355 let mut fallback = None;
4356 let (event, allow_any) = loop {
4357 let state = replace(&mut *self.state__, S::Unknown__);
4358 event = match (state, event) {
4359 (S::Unknown__, _) => unreachable!(),
4360 (S::Content__(deserializer), event) => {
4361 let output = deserializer.next(helper, event)?;
4362 match self.handle_content(helper, output, &mut fallback)? {
4363 ElementHandlerOutput::Break { event, allow_any } => {
4364 break (event, allow_any)
4365 }
4366 ElementHandlerOutput::Continue { event, .. } => event,
4367 }
4368 }
4369 (_, Event::End(_)) => {
4370 return Ok(DeserializerOutput {
4371 artifact: DeserializerArtifact::Data(self.finish(helper)?),
4372 event: DeserializerEvent::None,
4373 allow_any: false,
4374 });
4375 }
4376 (state @ (S::Init__ | S::Next__), event) => {
4377 fallback.get_or_insert(state);
4378 let output =
4379 <super::OverrideContent as WithDeserializer>::Deserializer::init(
4380 helper, event,
4381 )?;
4382 match self.handle_content(helper, output, &mut fallback)? {
4383 ElementHandlerOutput::Break { event, allow_any } => {
4384 break (event, allow_any)
4385 }
4386 ElementHandlerOutput::Continue { event, .. } => event,
4387 }
4388 }
4389 }
4390 };
4391 let artifact = DeserializerArtifact::Deserializer(self);
4392 Ok(DeserializerOutput {
4393 artifact,
4394 event,
4395 allow_any,
4396 })
4397 }
4398 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::Override, Error> {
4399 let state = replace(&mut *self.state__, OverrideDeserializerState::Unknown__);
4400 self.finish_state(helper, state)?;
4401 Ok(super::Override {
4402 schema_location: self.schema_location,
4403 id: self.id,
4404 content: self.content,
4405 })
4406 }
4407 }
4408 #[derive(Debug)]
4409 pub struct OverrideContentDeserializer {
4410 state__: Box<OverrideContentDeserializerState>,
4411 }
4412 #[derive(Debug)]
4413 pub enum OverrideContentDeserializerState {
4414 Init__,
4415 Annotation(
4416 Option<super::Annotation>,
4417 Option<<super::Annotation as WithDeserializer>::Deserializer>,
4418 ),
4419 SimpleType(
4420 Option<super::SimpleBaseType>,
4421 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
4422 ),
4423 ComplexType(
4424 Option<super::ComplexBaseType>,
4425 Option<<super::ComplexBaseType as WithDeserializer>::Deserializer>,
4426 ),
4427 Group(
4428 Option<super::GroupType>,
4429 Option<<super::GroupType as WithDeserializer>::Deserializer>,
4430 ),
4431 AttributeGroup(
4432 Option<super::AttributeGroupType>,
4433 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
4434 ),
4435 Element(
4436 Option<super::ElementType>,
4437 Option<<super::ElementType as WithDeserializer>::Deserializer>,
4438 ),
4439 Attribute(
4440 Option<super::AttributeType>,
4441 Option<<super::AttributeType as WithDeserializer>::Deserializer>,
4442 ),
4443 Notation(
4444 Option<super::Notation>,
4445 Option<<super::Notation as WithDeserializer>::Deserializer>,
4446 ),
4447 Done__(super::OverrideContent),
4448 Unknown__,
4449 }
4450 impl OverrideContentDeserializer {
4451 fn find_suitable<'de>(
4452 &mut self,
4453 helper: &mut DeserializeHelper,
4454 event: Event<'de>,
4455 fallback: &mut Option<OverrideContentDeserializerState>,
4456 ) -> Result<ElementHandlerOutput<'de>, Error> {
4457 if let Event::Start(x) | Event::Empty(x) = &event {
4458 if matches!(
4459 helper.resolve_local_name(x.name(), &super::NS_XS),
4460 Some(b"annotation")
4461 ) {
4462 let output =
4463 <super::Annotation as WithDeserializer>::Deserializer::init(helper, event)?;
4464 return self.handle_annotation(
4465 helper,
4466 Default::default(),
4467 output,
4468 &mut *fallback,
4469 );
4470 }
4471 if matches!(
4472 helper.resolve_local_name(x.name(), &super::NS_XS),
4473 Some(b"simpleType")
4474 ) {
4475 let output = <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
4476 helper, event,
4477 )?;
4478 return self.handle_simple_type(
4479 helper,
4480 Default::default(),
4481 output,
4482 &mut *fallback,
4483 );
4484 }
4485 if matches!(
4486 helper.resolve_local_name(x.name(), &super::NS_XS),
4487 Some(b"complexType")
4488 ) {
4489 let output = <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
4490 helper, event,
4491 )?;
4492 return self.handle_complex_type(
4493 helper,
4494 Default::default(),
4495 output,
4496 &mut *fallback,
4497 );
4498 }
4499 if matches!(
4500 helper.resolve_local_name(x.name(), &super::NS_XS),
4501 Some(b"group")
4502 ) {
4503 let output =
4504 <super::GroupType as WithDeserializer>::Deserializer::init(helper, event)?;
4505 return self.handle_group(helper, Default::default(), output, &mut *fallback);
4506 }
4507 if matches!(
4508 helper.resolve_local_name(x.name(), &super::NS_XS),
4509 Some(b"attributeGroup")
4510 ) {
4511 let output =
4512 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
4513 helper, event,
4514 )?;
4515 return self.handle_attribute_group(
4516 helper,
4517 Default::default(),
4518 output,
4519 &mut *fallback,
4520 );
4521 }
4522 if matches!(
4523 helper.resolve_local_name(x.name(), &super::NS_XS),
4524 Some(b"element")
4525 ) {
4526 let output = <super::ElementType as WithDeserializer>::Deserializer::init(
4527 helper, event,
4528 )?;
4529 return self.handle_element(helper, Default::default(), output, &mut *fallback);
4530 }
4531 if matches!(
4532 helper.resolve_local_name(x.name(), &super::NS_XS),
4533 Some(b"attribute")
4534 ) {
4535 let output = <super::AttributeType as WithDeserializer>::Deserializer::init(
4536 helper, event,
4537 )?;
4538 return self.handle_attribute(
4539 helper,
4540 Default::default(),
4541 output,
4542 &mut *fallback,
4543 );
4544 }
4545 if matches!(
4546 helper.resolve_local_name(x.name(), &super::NS_XS),
4547 Some(b"notation")
4548 ) {
4549 let output =
4550 <super::Notation as WithDeserializer>::Deserializer::init(helper, event)?;
4551 return self.handle_notation(
4552 helper,
4553 Default::default(),
4554 output,
4555 &mut *fallback,
4556 );
4557 }
4558 }
4559 *self.state__ = fallback
4560 .take()
4561 .unwrap_or(OverrideContentDeserializerState::Init__);
4562 Ok(ElementHandlerOutput::return_to_parent(event, false))
4563 }
4564 fn finish_state(
4565 helper: &mut DeserializeHelper,
4566 state: OverrideContentDeserializerState,
4567 ) -> Result<super::OverrideContent, Error> {
4568 use OverrideContentDeserializerState as S;
4569 match state {
4570 S::Unknown__ => unreachable!(),
4571 S::Init__ => Err(ErrorKind::MissingContent.into()),
4572 S::Annotation(mut values, deserializer) => {
4573 if let Some(deserializer) = deserializer {
4574 let value = deserializer.finish(helper)?;
4575 OverrideContentDeserializer::store_annotation(&mut values, value)?;
4576 }
4577 Ok(super::OverrideContent::Annotation(values.ok_or_else(
4578 || ErrorKind::MissingElement("annotation".into()),
4579 )?))
4580 }
4581 S::SimpleType(mut values, deserializer) => {
4582 if let Some(deserializer) = deserializer {
4583 let value = deserializer.finish(helper)?;
4584 OverrideContentDeserializer::store_simple_type(&mut values, value)?;
4585 }
4586 Ok(super::OverrideContent::SimpleType(values.ok_or_else(
4587 || ErrorKind::MissingElement("simpleType".into()),
4588 )?))
4589 }
4590 S::ComplexType(mut values, deserializer) => {
4591 if let Some(deserializer) = deserializer {
4592 let value = deserializer.finish(helper)?;
4593 OverrideContentDeserializer::store_complex_type(&mut values, value)?;
4594 }
4595 Ok(super::OverrideContent::ComplexType(values.ok_or_else(
4596 || ErrorKind::MissingElement("complexType".into()),
4597 )?))
4598 }
4599 S::Group(mut values, deserializer) => {
4600 if let Some(deserializer) = deserializer {
4601 let value = deserializer.finish(helper)?;
4602 OverrideContentDeserializer::store_group(&mut values, value)?;
4603 }
4604 Ok(super::OverrideContent::Group(values.ok_or_else(|| {
4605 ErrorKind::MissingElement("group".into())
4606 })?))
4607 }
4608 S::AttributeGroup(mut values, deserializer) => {
4609 if let Some(deserializer) = deserializer {
4610 let value = deserializer.finish(helper)?;
4611 OverrideContentDeserializer::store_attribute_group(&mut values, value)?;
4612 }
4613 Ok(super::OverrideContent::AttributeGroup(values.ok_or_else(
4614 || ErrorKind::MissingElement("attributeGroup".into()),
4615 )?))
4616 }
4617 S::Element(mut values, deserializer) => {
4618 if let Some(deserializer) = deserializer {
4619 let value = deserializer.finish(helper)?;
4620 OverrideContentDeserializer::store_element(&mut values, value)?;
4621 }
4622 Ok(super::OverrideContent::Element(values.ok_or_else(
4623 || ErrorKind::MissingElement("element".into()),
4624 )?))
4625 }
4626 S::Attribute(mut values, deserializer) => {
4627 if let Some(deserializer) = deserializer {
4628 let value = deserializer.finish(helper)?;
4629 OverrideContentDeserializer::store_attribute(&mut values, value)?;
4630 }
4631 Ok(super::OverrideContent::Attribute(values.ok_or_else(
4632 || ErrorKind::MissingElement("attribute".into()),
4633 )?))
4634 }
4635 S::Notation(mut values, deserializer) => {
4636 if let Some(deserializer) = deserializer {
4637 let value = deserializer.finish(helper)?;
4638 OverrideContentDeserializer::store_notation(&mut values, value)?;
4639 }
4640 Ok(super::OverrideContent::Notation(values.ok_or_else(
4641 || ErrorKind::MissingElement("notation".into()),
4642 )?))
4643 }
4644 S::Done__(data) => Ok(data),
4645 }
4646 }
4647 fn store_annotation(
4648 values: &mut Option<super::Annotation>,
4649 value: super::Annotation,
4650 ) -> Result<(), Error> {
4651 if values.is_some() {
4652 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4653 b"annotation",
4654 )))?;
4655 }
4656 *values = Some(value);
4657 Ok(())
4658 }
4659 fn store_simple_type(
4660 values: &mut Option<super::SimpleBaseType>,
4661 value: super::SimpleBaseType,
4662 ) -> Result<(), Error> {
4663 if values.is_some() {
4664 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4665 b"simpleType",
4666 )))?;
4667 }
4668 *values = Some(value);
4669 Ok(())
4670 }
4671 fn store_complex_type(
4672 values: &mut Option<super::ComplexBaseType>,
4673 value: super::ComplexBaseType,
4674 ) -> Result<(), Error> {
4675 if values.is_some() {
4676 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4677 b"complexType",
4678 )))?;
4679 }
4680 *values = Some(value);
4681 Ok(())
4682 }
4683 fn store_group(
4684 values: &mut Option<super::GroupType>,
4685 value: super::GroupType,
4686 ) -> Result<(), Error> {
4687 if values.is_some() {
4688 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4689 b"group",
4690 )))?;
4691 }
4692 *values = Some(value);
4693 Ok(())
4694 }
4695 fn store_attribute_group(
4696 values: &mut Option<super::AttributeGroupType>,
4697 value: super::AttributeGroupType,
4698 ) -> Result<(), Error> {
4699 if values.is_some() {
4700 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4701 b"attributeGroup",
4702 )))?;
4703 }
4704 *values = Some(value);
4705 Ok(())
4706 }
4707 fn store_element(
4708 values: &mut Option<super::ElementType>,
4709 value: super::ElementType,
4710 ) -> Result<(), Error> {
4711 if values.is_some() {
4712 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4713 b"element",
4714 )))?;
4715 }
4716 *values = Some(value);
4717 Ok(())
4718 }
4719 fn store_attribute(
4720 values: &mut Option<super::AttributeType>,
4721 value: super::AttributeType,
4722 ) -> Result<(), Error> {
4723 if values.is_some() {
4724 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4725 b"attribute",
4726 )))?;
4727 }
4728 *values = Some(value);
4729 Ok(())
4730 }
4731 fn store_notation(
4732 values: &mut Option<super::Notation>,
4733 value: super::Notation,
4734 ) -> Result<(), Error> {
4735 if values.is_some() {
4736 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4737 b"notation",
4738 )))?;
4739 }
4740 *values = Some(value);
4741 Ok(())
4742 }
4743 fn handle_annotation<'de>(
4744 &mut self,
4745 helper: &mut DeserializeHelper,
4746 mut values: Option<super::Annotation>,
4747 output: DeserializerOutput<'de, super::Annotation>,
4748 fallback: &mut Option<OverrideContentDeserializerState>,
4749 ) -> Result<ElementHandlerOutput<'de>, Error> {
4750 let DeserializerOutput {
4751 artifact,
4752 event,
4753 allow_any,
4754 } = output;
4755 if artifact.is_none() {
4756 *self.state__ = match fallback.take() {
4757 None if values.is_none() => {
4758 *self.state__ = OverrideContentDeserializerState::Init__;
4759 return Ok(ElementHandlerOutput::from_event(event, allow_any));
4760 }
4761 None => OverrideContentDeserializerState::Annotation(values, None),
4762 Some(OverrideContentDeserializerState::Annotation(_, Some(deserializer))) => {
4763 OverrideContentDeserializerState::Annotation(values, Some(deserializer))
4764 }
4765 _ => unreachable!(),
4766 };
4767 return Ok(ElementHandlerOutput::break_(event, allow_any));
4768 }
4769 match fallback.take() {
4770 None => (),
4771 Some(OverrideContentDeserializerState::Annotation(_, Some(deserializer))) => {
4772 let data = deserializer.finish(helper)?;
4773 OverrideContentDeserializer::store_annotation(&mut values, data)?;
4774 }
4775 Some(_) => unreachable!(),
4776 }
4777 Ok(match artifact {
4778 DeserializerArtifact::None => unreachable!(),
4779 DeserializerArtifact::Data(data) => {
4780 OverrideContentDeserializer::store_annotation(&mut values, data)?;
4781 let data = OverrideContentDeserializer::finish_state(
4782 helper,
4783 OverrideContentDeserializerState::Annotation(values, None),
4784 )?;
4785 *self.state__ = OverrideContentDeserializerState::Done__(data);
4786 ElementHandlerOutput::Break { event, allow_any }
4787 }
4788 DeserializerArtifact::Deserializer(deserializer) => {
4789 *self.state__ =
4790 OverrideContentDeserializerState::Annotation(values, Some(deserializer));
4791 ElementHandlerOutput::from_event_end(event, allow_any)
4792 }
4793 })
4794 }
4795 fn handle_simple_type<'de>(
4796 &mut self,
4797 helper: &mut DeserializeHelper,
4798 mut values: Option<super::SimpleBaseType>,
4799 output: DeserializerOutput<'de, super::SimpleBaseType>,
4800 fallback: &mut Option<OverrideContentDeserializerState>,
4801 ) -> Result<ElementHandlerOutput<'de>, Error> {
4802 let DeserializerOutput {
4803 artifact,
4804 event,
4805 allow_any,
4806 } = output;
4807 if artifact.is_none() {
4808 *self.state__ = match fallback.take() {
4809 None if values.is_none() => {
4810 *self.state__ = OverrideContentDeserializerState::Init__;
4811 return Ok(ElementHandlerOutput::from_event(event, allow_any));
4812 }
4813 None => OverrideContentDeserializerState::SimpleType(values, None),
4814 Some(OverrideContentDeserializerState::SimpleType(_, Some(deserializer))) => {
4815 OverrideContentDeserializerState::SimpleType(values, Some(deserializer))
4816 }
4817 _ => unreachable!(),
4818 };
4819 return Ok(ElementHandlerOutput::break_(event, allow_any));
4820 }
4821 match fallback.take() {
4822 None => (),
4823 Some(OverrideContentDeserializerState::SimpleType(_, Some(deserializer))) => {
4824 let data = deserializer.finish(helper)?;
4825 OverrideContentDeserializer::store_simple_type(&mut values, data)?;
4826 }
4827 Some(_) => unreachable!(),
4828 }
4829 Ok(match artifact {
4830 DeserializerArtifact::None => unreachable!(),
4831 DeserializerArtifact::Data(data) => {
4832 OverrideContentDeserializer::store_simple_type(&mut values, data)?;
4833 let data = OverrideContentDeserializer::finish_state(
4834 helper,
4835 OverrideContentDeserializerState::SimpleType(values, None),
4836 )?;
4837 *self.state__ = OverrideContentDeserializerState::Done__(data);
4838 ElementHandlerOutput::Break { event, allow_any }
4839 }
4840 DeserializerArtifact::Deserializer(deserializer) => {
4841 *self.state__ =
4842 OverrideContentDeserializerState::SimpleType(values, Some(deserializer));
4843 ElementHandlerOutput::from_event_end(event, allow_any)
4844 }
4845 })
4846 }
4847 fn handle_complex_type<'de>(
4848 &mut self,
4849 helper: &mut DeserializeHelper,
4850 mut values: Option<super::ComplexBaseType>,
4851 output: DeserializerOutput<'de, super::ComplexBaseType>,
4852 fallback: &mut Option<OverrideContentDeserializerState>,
4853 ) -> Result<ElementHandlerOutput<'de>, Error> {
4854 let DeserializerOutput {
4855 artifact,
4856 event,
4857 allow_any,
4858 } = output;
4859 if artifact.is_none() {
4860 *self.state__ = match fallback.take() {
4861 None if values.is_none() => {
4862 *self.state__ = OverrideContentDeserializerState::Init__;
4863 return Ok(ElementHandlerOutput::from_event(event, allow_any));
4864 }
4865 None => OverrideContentDeserializerState::ComplexType(values, None),
4866 Some(OverrideContentDeserializerState::ComplexType(_, Some(deserializer))) => {
4867 OverrideContentDeserializerState::ComplexType(values, Some(deserializer))
4868 }
4869 _ => unreachable!(),
4870 };
4871 return Ok(ElementHandlerOutput::break_(event, allow_any));
4872 }
4873 match fallback.take() {
4874 None => (),
4875 Some(OverrideContentDeserializerState::ComplexType(_, Some(deserializer))) => {
4876 let data = deserializer.finish(helper)?;
4877 OverrideContentDeserializer::store_complex_type(&mut values, data)?;
4878 }
4879 Some(_) => unreachable!(),
4880 }
4881 Ok(match artifact {
4882 DeserializerArtifact::None => unreachable!(),
4883 DeserializerArtifact::Data(data) => {
4884 OverrideContentDeserializer::store_complex_type(&mut values, data)?;
4885 let data = OverrideContentDeserializer::finish_state(
4886 helper,
4887 OverrideContentDeserializerState::ComplexType(values, None),
4888 )?;
4889 *self.state__ = OverrideContentDeserializerState::Done__(data);
4890 ElementHandlerOutput::Break { event, allow_any }
4891 }
4892 DeserializerArtifact::Deserializer(deserializer) => {
4893 *self.state__ =
4894 OverrideContentDeserializerState::ComplexType(values, Some(deserializer));
4895 ElementHandlerOutput::from_event_end(event, allow_any)
4896 }
4897 })
4898 }
4899 fn handle_group<'de>(
4900 &mut self,
4901 helper: &mut DeserializeHelper,
4902 mut values: Option<super::GroupType>,
4903 output: DeserializerOutput<'de, super::GroupType>,
4904 fallback: &mut Option<OverrideContentDeserializerState>,
4905 ) -> Result<ElementHandlerOutput<'de>, Error> {
4906 let DeserializerOutput {
4907 artifact,
4908 event,
4909 allow_any,
4910 } = output;
4911 if artifact.is_none() {
4912 *self.state__ = match fallback.take() {
4913 None if values.is_none() => {
4914 *self.state__ = OverrideContentDeserializerState::Init__;
4915 return Ok(ElementHandlerOutput::from_event(event, allow_any));
4916 }
4917 None => OverrideContentDeserializerState::Group(values, None),
4918 Some(OverrideContentDeserializerState::Group(_, Some(deserializer))) => {
4919 OverrideContentDeserializerState::Group(values, Some(deserializer))
4920 }
4921 _ => unreachable!(),
4922 };
4923 return Ok(ElementHandlerOutput::break_(event, allow_any));
4924 }
4925 match fallback.take() {
4926 None => (),
4927 Some(OverrideContentDeserializerState::Group(_, Some(deserializer))) => {
4928 let data = deserializer.finish(helper)?;
4929 OverrideContentDeserializer::store_group(&mut values, data)?;
4930 }
4931 Some(_) => unreachable!(),
4932 }
4933 Ok(match artifact {
4934 DeserializerArtifact::None => unreachable!(),
4935 DeserializerArtifact::Data(data) => {
4936 OverrideContentDeserializer::store_group(&mut values, data)?;
4937 let data = OverrideContentDeserializer::finish_state(
4938 helper,
4939 OverrideContentDeserializerState::Group(values, None),
4940 )?;
4941 *self.state__ = OverrideContentDeserializerState::Done__(data);
4942 ElementHandlerOutput::Break { event, allow_any }
4943 }
4944 DeserializerArtifact::Deserializer(deserializer) => {
4945 *self.state__ =
4946 OverrideContentDeserializerState::Group(values, Some(deserializer));
4947 ElementHandlerOutput::from_event_end(event, allow_any)
4948 }
4949 })
4950 }
4951 fn handle_attribute_group<'de>(
4952 &mut self,
4953 helper: &mut DeserializeHelper,
4954 mut values: Option<super::AttributeGroupType>,
4955 output: DeserializerOutput<'de, super::AttributeGroupType>,
4956 fallback: &mut Option<OverrideContentDeserializerState>,
4957 ) -> Result<ElementHandlerOutput<'de>, Error> {
4958 let DeserializerOutput {
4959 artifact,
4960 event,
4961 allow_any,
4962 } = output;
4963 if artifact.is_none() {
4964 *self.state__ = match fallback.take() {
4965 None if values.is_none() => {
4966 *self.state__ = OverrideContentDeserializerState::Init__;
4967 return Ok(ElementHandlerOutput::from_event(event, allow_any));
4968 }
4969 None => OverrideContentDeserializerState::AttributeGroup(values, None),
4970 Some(OverrideContentDeserializerState::AttributeGroup(
4971 _,
4972 Some(deserializer),
4973 )) => {
4974 OverrideContentDeserializerState::AttributeGroup(values, Some(deserializer))
4975 }
4976 _ => unreachable!(),
4977 };
4978 return Ok(ElementHandlerOutput::break_(event, allow_any));
4979 }
4980 match fallback.take() {
4981 None => (),
4982 Some(OverrideContentDeserializerState::AttributeGroup(_, Some(deserializer))) => {
4983 let data = deserializer.finish(helper)?;
4984 OverrideContentDeserializer::store_attribute_group(&mut values, data)?;
4985 }
4986 Some(_) => unreachable!(),
4987 }
4988 Ok(match artifact {
4989 DeserializerArtifact::None => unreachable!(),
4990 DeserializerArtifact::Data(data) => {
4991 OverrideContentDeserializer::store_attribute_group(&mut values, data)?;
4992 let data = OverrideContentDeserializer::finish_state(
4993 helper,
4994 OverrideContentDeserializerState::AttributeGroup(values, None),
4995 )?;
4996 *self.state__ = OverrideContentDeserializerState::Done__(data);
4997 ElementHandlerOutput::Break { event, allow_any }
4998 }
4999 DeserializerArtifact::Deserializer(deserializer) => {
5000 *self.state__ = OverrideContentDeserializerState::AttributeGroup(
5001 values,
5002 Some(deserializer),
5003 );
5004 ElementHandlerOutput::from_event_end(event, allow_any)
5005 }
5006 })
5007 }
5008 fn handle_element<'de>(
5009 &mut self,
5010 helper: &mut DeserializeHelper,
5011 mut values: Option<super::ElementType>,
5012 output: DeserializerOutput<'de, super::ElementType>,
5013 fallback: &mut Option<OverrideContentDeserializerState>,
5014 ) -> Result<ElementHandlerOutput<'de>, Error> {
5015 let DeserializerOutput {
5016 artifact,
5017 event,
5018 allow_any,
5019 } = output;
5020 if artifact.is_none() {
5021 *self.state__ = match fallback.take() {
5022 None if values.is_none() => {
5023 *self.state__ = OverrideContentDeserializerState::Init__;
5024 return Ok(ElementHandlerOutput::from_event(event, allow_any));
5025 }
5026 None => OverrideContentDeserializerState::Element(values, None),
5027 Some(OverrideContentDeserializerState::Element(_, Some(deserializer))) => {
5028 OverrideContentDeserializerState::Element(values, Some(deserializer))
5029 }
5030 _ => unreachable!(),
5031 };
5032 return Ok(ElementHandlerOutput::break_(event, allow_any));
5033 }
5034 match fallback.take() {
5035 None => (),
5036 Some(OverrideContentDeserializerState::Element(_, Some(deserializer))) => {
5037 let data = deserializer.finish(helper)?;
5038 OverrideContentDeserializer::store_element(&mut values, data)?;
5039 }
5040 Some(_) => unreachable!(),
5041 }
5042 Ok(match artifact {
5043 DeserializerArtifact::None => unreachable!(),
5044 DeserializerArtifact::Data(data) => {
5045 OverrideContentDeserializer::store_element(&mut values, data)?;
5046 let data = OverrideContentDeserializer::finish_state(
5047 helper,
5048 OverrideContentDeserializerState::Element(values, None),
5049 )?;
5050 *self.state__ = OverrideContentDeserializerState::Done__(data);
5051 ElementHandlerOutput::Break { event, allow_any }
5052 }
5053 DeserializerArtifact::Deserializer(deserializer) => {
5054 *self.state__ =
5055 OverrideContentDeserializerState::Element(values, Some(deserializer));
5056 ElementHandlerOutput::from_event_end(event, allow_any)
5057 }
5058 })
5059 }
5060 fn handle_attribute<'de>(
5061 &mut self,
5062 helper: &mut DeserializeHelper,
5063 mut values: Option<super::AttributeType>,
5064 output: DeserializerOutput<'de, super::AttributeType>,
5065 fallback: &mut Option<OverrideContentDeserializerState>,
5066 ) -> Result<ElementHandlerOutput<'de>, Error> {
5067 let DeserializerOutput {
5068 artifact,
5069 event,
5070 allow_any,
5071 } = output;
5072 if artifact.is_none() {
5073 *self.state__ = match fallback.take() {
5074 None if values.is_none() => {
5075 *self.state__ = OverrideContentDeserializerState::Init__;
5076 return Ok(ElementHandlerOutput::from_event(event, allow_any));
5077 }
5078 None => OverrideContentDeserializerState::Attribute(values, None),
5079 Some(OverrideContentDeserializerState::Attribute(_, Some(deserializer))) => {
5080 OverrideContentDeserializerState::Attribute(values, Some(deserializer))
5081 }
5082 _ => unreachable!(),
5083 };
5084 return Ok(ElementHandlerOutput::break_(event, allow_any));
5085 }
5086 match fallback.take() {
5087 None => (),
5088 Some(OverrideContentDeserializerState::Attribute(_, Some(deserializer))) => {
5089 let data = deserializer.finish(helper)?;
5090 OverrideContentDeserializer::store_attribute(&mut values, data)?;
5091 }
5092 Some(_) => unreachable!(),
5093 }
5094 Ok(match artifact {
5095 DeserializerArtifact::None => unreachable!(),
5096 DeserializerArtifact::Data(data) => {
5097 OverrideContentDeserializer::store_attribute(&mut values, data)?;
5098 let data = OverrideContentDeserializer::finish_state(
5099 helper,
5100 OverrideContentDeserializerState::Attribute(values, None),
5101 )?;
5102 *self.state__ = OverrideContentDeserializerState::Done__(data);
5103 ElementHandlerOutput::Break { event, allow_any }
5104 }
5105 DeserializerArtifact::Deserializer(deserializer) => {
5106 *self.state__ =
5107 OverrideContentDeserializerState::Attribute(values, Some(deserializer));
5108 ElementHandlerOutput::from_event_end(event, allow_any)
5109 }
5110 })
5111 }
5112 fn handle_notation<'de>(
5113 &mut self,
5114 helper: &mut DeserializeHelper,
5115 mut values: Option<super::Notation>,
5116 output: DeserializerOutput<'de, super::Notation>,
5117 fallback: &mut Option<OverrideContentDeserializerState>,
5118 ) -> Result<ElementHandlerOutput<'de>, Error> {
5119 let DeserializerOutput {
5120 artifact,
5121 event,
5122 allow_any,
5123 } = output;
5124 if artifact.is_none() {
5125 *self.state__ = match fallback.take() {
5126 None if values.is_none() => {
5127 *self.state__ = OverrideContentDeserializerState::Init__;
5128 return Ok(ElementHandlerOutput::from_event(event, allow_any));
5129 }
5130 None => OverrideContentDeserializerState::Notation(values, None),
5131 Some(OverrideContentDeserializerState::Notation(_, Some(deserializer))) => {
5132 OverrideContentDeserializerState::Notation(values, Some(deserializer))
5133 }
5134 _ => unreachable!(),
5135 };
5136 return Ok(ElementHandlerOutput::break_(event, allow_any));
5137 }
5138 match fallback.take() {
5139 None => (),
5140 Some(OverrideContentDeserializerState::Notation(_, Some(deserializer))) => {
5141 let data = deserializer.finish(helper)?;
5142 OverrideContentDeserializer::store_notation(&mut values, data)?;
5143 }
5144 Some(_) => unreachable!(),
5145 }
5146 Ok(match artifact {
5147 DeserializerArtifact::None => unreachable!(),
5148 DeserializerArtifact::Data(data) => {
5149 OverrideContentDeserializer::store_notation(&mut values, data)?;
5150 let data = OverrideContentDeserializer::finish_state(
5151 helper,
5152 OverrideContentDeserializerState::Notation(values, None),
5153 )?;
5154 *self.state__ = OverrideContentDeserializerState::Done__(data);
5155 ElementHandlerOutput::Break { event, allow_any }
5156 }
5157 DeserializerArtifact::Deserializer(deserializer) => {
5158 *self.state__ =
5159 OverrideContentDeserializerState::Notation(values, Some(deserializer));
5160 ElementHandlerOutput::from_event_end(event, allow_any)
5161 }
5162 })
5163 }
5164 }
5165 impl<'de> Deserializer<'de, super::OverrideContent> for Box<OverrideContentDeserializer> {
5166 fn init(
5167 helper: &mut DeserializeHelper,
5168 event: Event<'de>,
5169 ) -> DeserializerResult<'de, super::OverrideContent> {
5170 let deserializer = Box::new(OverrideContentDeserializer {
5171 state__: Box::new(OverrideContentDeserializerState::Init__),
5172 });
5173 let mut output = deserializer.next(helper, event)?;
5174 output.artifact = match output.artifact {
5175 DeserializerArtifact::Deserializer(x)
5176 if matches!(&*x.state__, OverrideContentDeserializerState::Init__) =>
5177 {
5178 DeserializerArtifact::None
5179 }
5180 artifact => artifact,
5181 };
5182 Ok(output)
5183 }
5184 fn next(
5185 mut self,
5186 helper: &mut DeserializeHelper,
5187 event: Event<'de>,
5188 ) -> DeserializerResult<'de, super::OverrideContent> {
5189 use OverrideContentDeserializerState as S;
5190 let mut event = event;
5191 let mut fallback = None;
5192 let (event, allow_any) = loop {
5193 let state = replace(&mut *self.state__, S::Unknown__);
5194 event = match (state, event) {
5195 (S::Unknown__, _) => unreachable!(),
5196 (S::Annotation(values, Some(deserializer)), event) => {
5197 let output = deserializer.next(helper, event)?;
5198 match self.handle_annotation(helper, values, output, &mut fallback)? {
5199 ElementHandlerOutput::Break { event, allow_any } => {
5200 break (event, allow_any)
5201 }
5202 ElementHandlerOutput::Continue { event, .. } => event,
5203 }
5204 }
5205 (S::SimpleType(values, Some(deserializer)), event) => {
5206 let output = deserializer.next(helper, event)?;
5207 match self.handle_simple_type(helper, values, output, &mut fallback)? {
5208 ElementHandlerOutput::Break { event, allow_any } => {
5209 break (event, allow_any)
5210 }
5211 ElementHandlerOutput::Continue { event, .. } => event,
5212 }
5213 }
5214 (S::ComplexType(values, Some(deserializer)), event) => {
5215 let output = deserializer.next(helper, event)?;
5216 match self.handle_complex_type(helper, values, output, &mut fallback)? {
5217 ElementHandlerOutput::Break { event, allow_any } => {
5218 break (event, allow_any)
5219 }
5220 ElementHandlerOutput::Continue { event, .. } => event,
5221 }
5222 }
5223 (S::Group(values, Some(deserializer)), event) => {
5224 let output = deserializer.next(helper, event)?;
5225 match self.handle_group(helper, values, output, &mut fallback)? {
5226 ElementHandlerOutput::Break { event, allow_any } => {
5227 break (event, allow_any)
5228 }
5229 ElementHandlerOutput::Continue { event, .. } => event,
5230 }
5231 }
5232 (S::AttributeGroup(values, Some(deserializer)), event) => {
5233 let output = deserializer.next(helper, event)?;
5234 match self.handle_attribute_group(helper, values, output, &mut fallback)? {
5235 ElementHandlerOutput::Break { event, allow_any } => {
5236 break (event, allow_any)
5237 }
5238 ElementHandlerOutput::Continue { event, .. } => event,
5239 }
5240 }
5241 (S::Element(values, Some(deserializer)), event) => {
5242 let output = deserializer.next(helper, event)?;
5243 match self.handle_element(helper, values, output, &mut fallback)? {
5244 ElementHandlerOutput::Break { event, allow_any } => {
5245 break (event, allow_any)
5246 }
5247 ElementHandlerOutput::Continue { event, .. } => event,
5248 }
5249 }
5250 (S::Attribute(values, Some(deserializer)), event) => {
5251 let output = deserializer.next(helper, event)?;
5252 match self.handle_attribute(helper, values, output, &mut fallback)? {
5253 ElementHandlerOutput::Break { event, allow_any } => {
5254 break (event, allow_any)
5255 }
5256 ElementHandlerOutput::Continue { event, .. } => event,
5257 }
5258 }
5259 (S::Notation(values, Some(deserializer)), event) => {
5260 let output = deserializer.next(helper, event)?;
5261 match self.handle_notation(helper, values, output, &mut fallback)? {
5262 ElementHandlerOutput::Break { event, allow_any } => {
5263 break (event, allow_any)
5264 }
5265 ElementHandlerOutput::Continue { event, .. } => event,
5266 }
5267 }
5268 (state, event @ Event::End(_)) => {
5269 return Ok(DeserializerOutput {
5270 artifact: DeserializerArtifact::Data(
5271 OverrideContentDeserializer::finish_state(helper, state)?,
5272 ),
5273 event: DeserializerEvent::Continue(event),
5274 allow_any: false,
5275 });
5276 }
5277 (S::Init__, event) => match self.find_suitable(helper, event, &mut fallback)? {
5278 ElementHandlerOutput::Break { event, allow_any } => {
5279 break (event, allow_any)
5280 }
5281 ElementHandlerOutput::Continue { event, .. } => event,
5282 },
5283 (S::Annotation(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
5284 let output = helper.init_start_tag_deserializer(
5285 event,
5286 Some(&super::NS_XS),
5287 b"annotation",
5288 false,
5289 )?;
5290 match self.handle_annotation(helper, values, output, &mut fallback)? {
5291 ElementHandlerOutput::Break { event, allow_any } => {
5292 break (event, allow_any)
5293 }
5294 ElementHandlerOutput::Continue { event, .. } => event,
5295 }
5296 }
5297 (S::SimpleType(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
5298 let output = helper.init_start_tag_deserializer(
5299 event,
5300 Some(&super::NS_XS),
5301 b"simpleType",
5302 true,
5303 )?;
5304 match self.handle_simple_type(helper, values, output, &mut fallback)? {
5305 ElementHandlerOutput::Break { event, allow_any } => {
5306 break (event, allow_any)
5307 }
5308 ElementHandlerOutput::Continue { event, .. } => event,
5309 }
5310 }
5311 (S::ComplexType(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
5312 let output = helper.init_start_tag_deserializer(
5313 event,
5314 Some(&super::NS_XS),
5315 b"complexType",
5316 true,
5317 )?;
5318 match self.handle_complex_type(helper, values, output, &mut fallback)? {
5319 ElementHandlerOutput::Break { event, allow_any } => {
5320 break (event, allow_any)
5321 }
5322 ElementHandlerOutput::Continue { event, .. } => event,
5323 }
5324 }
5325 (S::Group(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
5326 let output = helper.init_start_tag_deserializer(
5327 event,
5328 Some(&super::NS_XS),
5329 b"group",
5330 true,
5331 )?;
5332 match self.handle_group(helper, values, output, &mut fallback)? {
5333 ElementHandlerOutput::Break { event, allow_any } => {
5334 break (event, allow_any)
5335 }
5336 ElementHandlerOutput::Continue { event, .. } => event,
5337 }
5338 }
5339 (
5340 S::AttributeGroup(values, None),
5341 event @ (Event::Start(_) | Event::Empty(_)),
5342 ) => {
5343 let output = helper.init_start_tag_deserializer(
5344 event,
5345 Some(&super::NS_XS),
5346 b"attributeGroup",
5347 false,
5348 )?;
5349 match self.handle_attribute_group(helper, values, output, &mut fallback)? {
5350 ElementHandlerOutput::Break { event, allow_any } => {
5351 break (event, allow_any)
5352 }
5353 ElementHandlerOutput::Continue { event, .. } => event,
5354 }
5355 }
5356 (S::Element(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
5357 let output = helper.init_start_tag_deserializer(
5358 event,
5359 Some(&super::NS_XS),
5360 b"element",
5361 true,
5362 )?;
5363 match self.handle_element(helper, values, output, &mut fallback)? {
5364 ElementHandlerOutput::Break { event, allow_any } => {
5365 break (event, allow_any)
5366 }
5367 ElementHandlerOutput::Continue { event, .. } => event,
5368 }
5369 }
5370 (S::Attribute(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
5371 let output = helper.init_start_tag_deserializer(
5372 event,
5373 Some(&super::NS_XS),
5374 b"attribute",
5375 false,
5376 )?;
5377 match self.handle_attribute(helper, values, output, &mut fallback)? {
5378 ElementHandlerOutput::Break { event, allow_any } => {
5379 break (event, allow_any)
5380 }
5381 ElementHandlerOutput::Continue { event, .. } => event,
5382 }
5383 }
5384 (S::Notation(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
5385 let output = helper.init_start_tag_deserializer(
5386 event,
5387 Some(&super::NS_XS),
5388 b"notation",
5389 false,
5390 )?;
5391 match self.handle_notation(helper, values, output, &mut fallback)? {
5392 ElementHandlerOutput::Break { event, allow_any } => {
5393 break (event, allow_any)
5394 }
5395 ElementHandlerOutput::Continue { event, .. } => event,
5396 }
5397 }
5398 (s @ S::Done__(_), event) => {
5399 *self.state__ = s;
5400 break (DeserializerEvent::Continue(event), false);
5401 }
5402 (state, event) => {
5403 *self.state__ = state;
5404 break (DeserializerEvent::Break(event), false);
5405 }
5406 }
5407 };
5408 let artifact = if matches!(&*self.state__, S::Done__(_)) {
5409 DeserializerArtifact::Data(self.finish(helper)?)
5410 } else {
5411 DeserializerArtifact::Deserializer(self)
5412 };
5413 Ok(DeserializerOutput {
5414 artifact,
5415 event,
5416 allow_any,
5417 })
5418 }
5419 fn finish(self, helper: &mut DeserializeHelper) -> Result<super::OverrideContent, Error> {
5420 OverrideContentDeserializer::finish_state(helper, *self.state__)
5421 }
5422 }
5423 #[derive(Debug)]
5424 pub struct AnnotationDeserializer {
5425 id: Option<String>,
5426 content: Vec<super::AnnotationContent>,
5427 state__: Box<AnnotationDeserializerState>,
5428 }
5429 #[derive(Debug)]
5430 enum AnnotationDeserializerState {
5431 Init__,
5432 Next__,
5433 Content__(<super::AnnotationContent as WithDeserializer>::Deserializer),
5434 Unknown__,
5435 }
5436 impl AnnotationDeserializer {
5437 fn from_bytes_start(
5438 helper: &mut DeserializeHelper,
5439 bytes_start: &BytesStart<'_>,
5440 ) -> Result<Box<Self>, Error> {
5441 let mut id: Option<String> = None;
5442 for attrib in helper.filter_xmlns_attributes(bytes_start) {
5443 let attrib = attrib?;
5444 if matches!(
5445 helper.resolve_local_name(attrib.key, &super::NS_XS),
5446 Some(b"id")
5447 ) {
5448 helper.read_attrib(&mut id, b"id", &attrib.value)?;
5449 }
5450 }
5451 Ok(Box::new(Self {
5452 id: id,
5453 content: Vec::new(),
5454 state__: Box::new(AnnotationDeserializerState::Init__),
5455 }))
5456 }
5457 fn finish_state(
5458 &mut self,
5459 helper: &mut DeserializeHelper,
5460 state: AnnotationDeserializerState,
5461 ) -> Result<(), Error> {
5462 if let AnnotationDeserializerState::Content__(deserializer) = state {
5463 self.store_content(deserializer.finish(helper)?)?;
5464 }
5465 Ok(())
5466 }
5467 fn store_content(&mut self, value: super::AnnotationContent) -> Result<(), Error> {
5468 self.content.push(value);
5469 Ok(())
5470 }
5471 fn handle_content<'de>(
5472 &mut self,
5473 helper: &mut DeserializeHelper,
5474 output: DeserializerOutput<'de, super::AnnotationContent>,
5475 fallback: &mut Option<AnnotationDeserializerState>,
5476 ) -> Result<ElementHandlerOutput<'de>, Error> {
5477 let DeserializerOutput {
5478 artifact,
5479 event,
5480 allow_any,
5481 } = output;
5482 if artifact.is_none() {
5483 *self.state__ = fallback
5484 .take()
5485 .unwrap_or(AnnotationDeserializerState::Next__);
5486 return Ok(ElementHandlerOutput::break_(event, allow_any));
5487 }
5488 if let Some(fallback) = fallback.take() {
5489 self.finish_state(helper, fallback)?;
5490 }
5491 Ok(match artifact {
5492 DeserializerArtifact::None => unreachable!(),
5493 DeserializerArtifact::Data(data) => {
5494 self.store_content(data)?;
5495 *self.state__ = AnnotationDeserializerState::Next__;
5496 ElementHandlerOutput::from_event(event, allow_any)
5497 }
5498 DeserializerArtifact::Deserializer(deserializer) => {
5499 let ret = ElementHandlerOutput::from_event(event, allow_any);
5500 match &ret {
5501 ElementHandlerOutput::Break { .. } => {
5502 *self.state__ = AnnotationDeserializerState::Content__(deserializer);
5503 }
5504 ElementHandlerOutput::Continue { .. } => {
5505 fallback.get_or_insert(AnnotationDeserializerState::Content__(
5506 deserializer,
5507 ));
5508 *self.state__ = AnnotationDeserializerState::Next__;
5509 }
5510 }
5511 ret
5512 }
5513 })
5514 }
5515 }
5516 impl<'de> Deserializer<'de, super::Annotation> for Box<AnnotationDeserializer> {
5517 fn init(
5518 helper: &mut DeserializeHelper,
5519 event: Event<'de>,
5520 ) -> DeserializerResult<'de, super::Annotation> {
5521 helper
5522 .init_deserializer_from_start_event(event, AnnotationDeserializer::from_bytes_start)
5523 }
5524 fn next(
5525 mut self,
5526 helper: &mut DeserializeHelper,
5527 event: Event<'de>,
5528 ) -> DeserializerResult<'de, super::Annotation> {
5529 use AnnotationDeserializerState as S;
5530 let mut event = event;
5531 let mut fallback = None;
5532 let (event, allow_any) = loop {
5533 let state = replace(&mut *self.state__, S::Unknown__);
5534 event = match (state, event) {
5535 (S::Unknown__, _) => unreachable!(),
5536 (S::Content__(deserializer), event) => {
5537 let output = deserializer.next(helper, event)?;
5538 match self.handle_content(helper, output, &mut fallback)? {
5539 ElementHandlerOutput::Break { event, allow_any } => {
5540 break (event, allow_any)
5541 }
5542 ElementHandlerOutput::Continue { event, .. } => event,
5543 }
5544 }
5545 (_, Event::End(_)) => {
5546 return Ok(DeserializerOutput {
5547 artifact: DeserializerArtifact::Data(self.finish(helper)?),
5548 event: DeserializerEvent::None,
5549 allow_any: false,
5550 });
5551 }
5552 (state @ (S::Init__ | S::Next__), event) => {
5553 fallback.get_or_insert(state);
5554 let output =
5555 <super::AnnotationContent as WithDeserializer>::Deserializer::init(
5556 helper, event,
5557 )?;
5558 match self.handle_content(helper, output, &mut fallback)? {
5559 ElementHandlerOutput::Break { event, allow_any } => {
5560 break (event, allow_any)
5561 }
5562 ElementHandlerOutput::Continue { event, .. } => event,
5563 }
5564 }
5565 }
5566 };
5567 let artifact = DeserializerArtifact::Deserializer(self);
5568 Ok(DeserializerOutput {
5569 artifact,
5570 event,
5571 allow_any,
5572 })
5573 }
5574 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::Annotation, Error> {
5575 let state = replace(&mut *self.state__, AnnotationDeserializerState::Unknown__);
5576 self.finish_state(helper, state)?;
5577 Ok(super::Annotation {
5578 id: self.id,
5579 content: self.content,
5580 })
5581 }
5582 }
5583 #[derive(Debug)]
5584 pub struct AnnotationContentDeserializer {
5585 state__: Box<AnnotationContentDeserializerState>,
5586 }
5587 #[derive(Debug)]
5588 pub enum AnnotationContentDeserializerState {
5589 Init__,
5590 Appinfo(
5591 Option<AnyElement>,
5592 Option<<AnyElement as WithDeserializer>::Deserializer>,
5593 ),
5594 Documentation(
5595 Option<AnyElement>,
5596 Option<<AnyElement as WithDeserializer>::Deserializer>,
5597 ),
5598 Done__(super::AnnotationContent),
5599 Unknown__,
5600 }
5601 impl AnnotationContentDeserializer {
5602 fn find_suitable<'de>(
5603 &mut self,
5604 helper: &mut DeserializeHelper,
5605 event: Event<'de>,
5606 fallback: &mut Option<AnnotationContentDeserializerState>,
5607 ) -> Result<ElementHandlerOutput<'de>, Error> {
5608 if let Event::Start(x) | Event::Empty(x) = &event {
5609 if matches!(
5610 helper.resolve_local_name(x.name(), &super::NS_XS),
5611 Some(b"appinfo")
5612 ) {
5613 let output =
5614 <AnyElement as WithDeserializer>::Deserializer::init(helper, event)?;
5615 return self.handle_appinfo(helper, Default::default(), output, &mut *fallback);
5616 }
5617 if matches!(
5618 helper.resolve_local_name(x.name(), &super::NS_XS),
5619 Some(b"documentation")
5620 ) {
5621 let output =
5622 <AnyElement as WithDeserializer>::Deserializer::init(helper, event)?;
5623 return self.handle_documentation(
5624 helper,
5625 Default::default(),
5626 output,
5627 &mut *fallback,
5628 );
5629 }
5630 }
5631 *self.state__ = fallback
5632 .take()
5633 .unwrap_or(AnnotationContentDeserializerState::Init__);
5634 Ok(ElementHandlerOutput::return_to_parent(event, false))
5635 }
5636 fn finish_state(
5637 helper: &mut DeserializeHelper,
5638 state: AnnotationContentDeserializerState,
5639 ) -> Result<super::AnnotationContent, Error> {
5640 use AnnotationContentDeserializerState as S;
5641 match state {
5642 S::Unknown__ => unreachable!(),
5643 S::Init__ => Err(ErrorKind::MissingContent.into()),
5644 S::Appinfo(mut values, deserializer) => {
5645 if let Some(deserializer) = deserializer {
5646 let value = deserializer.finish(helper)?;
5647 AnnotationContentDeserializer::store_appinfo(&mut values, value)?;
5648 }
5649 Ok(super::AnnotationContent::Appinfo(values.ok_or_else(
5650 || ErrorKind::MissingElement("appinfo".into()),
5651 )?))
5652 }
5653 S::Documentation(mut values, deserializer) => {
5654 if let Some(deserializer) = deserializer {
5655 let value = deserializer.finish(helper)?;
5656 AnnotationContentDeserializer::store_documentation(&mut values, value)?;
5657 }
5658 Ok(super::AnnotationContent::Documentation(values.ok_or_else(
5659 || ErrorKind::MissingElement("documentation".into()),
5660 )?))
5661 }
5662 S::Done__(data) => Ok(data),
5663 }
5664 }
5665 fn store_appinfo(values: &mut Option<AnyElement>, value: AnyElement) -> Result<(), Error> {
5666 if values.is_some() {
5667 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
5668 b"appinfo",
5669 )))?;
5670 }
5671 *values = Some(value);
5672 Ok(())
5673 }
5674 fn store_documentation(
5675 values: &mut Option<AnyElement>,
5676 value: AnyElement,
5677 ) -> Result<(), Error> {
5678 if values.is_some() {
5679 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
5680 b"documentation",
5681 )))?;
5682 }
5683 *values = Some(value);
5684 Ok(())
5685 }
5686 fn handle_appinfo<'de>(
5687 &mut self,
5688 helper: &mut DeserializeHelper,
5689 mut values: Option<AnyElement>,
5690 output: DeserializerOutput<'de, AnyElement>,
5691 fallback: &mut Option<AnnotationContentDeserializerState>,
5692 ) -> Result<ElementHandlerOutput<'de>, Error> {
5693 let DeserializerOutput {
5694 artifact,
5695 event,
5696 allow_any,
5697 } = output;
5698 if artifact.is_none() {
5699 *self.state__ = match fallback.take() {
5700 None if values.is_none() => {
5701 *self.state__ = AnnotationContentDeserializerState::Init__;
5702 return Ok(ElementHandlerOutput::from_event(event, allow_any));
5703 }
5704 None => AnnotationContentDeserializerState::Appinfo(values, None),
5705 Some(AnnotationContentDeserializerState::Appinfo(_, Some(deserializer))) => {
5706 AnnotationContentDeserializerState::Appinfo(values, Some(deserializer))
5707 }
5708 _ => unreachable!(),
5709 };
5710 return Ok(ElementHandlerOutput::break_(event, allow_any));
5711 }
5712 match fallback.take() {
5713 None => (),
5714 Some(AnnotationContentDeserializerState::Appinfo(_, Some(deserializer))) => {
5715 let data = deserializer.finish(helper)?;
5716 AnnotationContentDeserializer::store_appinfo(&mut values, data)?;
5717 }
5718 Some(_) => unreachable!(),
5719 }
5720 Ok(match artifact {
5721 DeserializerArtifact::None => unreachable!(),
5722 DeserializerArtifact::Data(data) => {
5723 AnnotationContentDeserializer::store_appinfo(&mut values, data)?;
5724 let data = AnnotationContentDeserializer::finish_state(
5725 helper,
5726 AnnotationContentDeserializerState::Appinfo(values, None),
5727 )?;
5728 *self.state__ = AnnotationContentDeserializerState::Done__(data);
5729 ElementHandlerOutput::Break { event, allow_any }
5730 }
5731 DeserializerArtifact::Deserializer(deserializer) => {
5732 *self.state__ =
5733 AnnotationContentDeserializerState::Appinfo(values, Some(deserializer));
5734 ElementHandlerOutput::from_event_end(event, allow_any)
5735 }
5736 })
5737 }
5738 fn handle_documentation<'de>(
5739 &mut self,
5740 helper: &mut DeserializeHelper,
5741 mut values: Option<AnyElement>,
5742 output: DeserializerOutput<'de, AnyElement>,
5743 fallback: &mut Option<AnnotationContentDeserializerState>,
5744 ) -> Result<ElementHandlerOutput<'de>, Error> {
5745 let DeserializerOutput {
5746 artifact,
5747 event,
5748 allow_any,
5749 } = output;
5750 if artifact.is_none() {
5751 *self.state__ = match fallback.take() {
5752 None if values.is_none() => {
5753 *self.state__ = AnnotationContentDeserializerState::Init__;
5754 return Ok(ElementHandlerOutput::from_event(event, allow_any));
5755 }
5756 None => AnnotationContentDeserializerState::Documentation(values, None),
5757 Some(AnnotationContentDeserializerState::Documentation(
5758 _,
5759 Some(deserializer),
5760 )) => AnnotationContentDeserializerState::Documentation(
5761 values,
5762 Some(deserializer),
5763 ),
5764 _ => unreachable!(),
5765 };
5766 return Ok(ElementHandlerOutput::break_(event, allow_any));
5767 }
5768 match fallback.take() {
5769 None => (),
5770 Some(AnnotationContentDeserializerState::Documentation(_, Some(deserializer))) => {
5771 let data = deserializer.finish(helper)?;
5772 AnnotationContentDeserializer::store_documentation(&mut values, data)?;
5773 }
5774 Some(_) => unreachable!(),
5775 }
5776 Ok(match artifact {
5777 DeserializerArtifact::None => unreachable!(),
5778 DeserializerArtifact::Data(data) => {
5779 AnnotationContentDeserializer::store_documentation(&mut values, data)?;
5780 let data = AnnotationContentDeserializer::finish_state(
5781 helper,
5782 AnnotationContentDeserializerState::Documentation(values, None),
5783 )?;
5784 *self.state__ = AnnotationContentDeserializerState::Done__(data);
5785 ElementHandlerOutput::Break { event, allow_any }
5786 }
5787 DeserializerArtifact::Deserializer(deserializer) => {
5788 *self.state__ = AnnotationContentDeserializerState::Documentation(
5789 values,
5790 Some(deserializer),
5791 );
5792 ElementHandlerOutput::from_event_end(event, allow_any)
5793 }
5794 })
5795 }
5796 }
5797 impl<'de> Deserializer<'de, super::AnnotationContent> for Box<AnnotationContentDeserializer> {
5798 fn init(
5799 helper: &mut DeserializeHelper,
5800 event: Event<'de>,
5801 ) -> DeserializerResult<'de, super::AnnotationContent> {
5802 let deserializer = Box::new(AnnotationContentDeserializer {
5803 state__: Box::new(AnnotationContentDeserializerState::Init__),
5804 });
5805 let mut output = deserializer.next(helper, event)?;
5806 output.artifact = match output.artifact {
5807 DeserializerArtifact::Deserializer(x)
5808 if matches!(&*x.state__, AnnotationContentDeserializerState::Init__) =>
5809 {
5810 DeserializerArtifact::None
5811 }
5812 artifact => artifact,
5813 };
5814 Ok(output)
5815 }
5816 fn next(
5817 mut self,
5818 helper: &mut DeserializeHelper,
5819 event: Event<'de>,
5820 ) -> DeserializerResult<'de, super::AnnotationContent> {
5821 use AnnotationContentDeserializerState as S;
5822 let mut event = event;
5823 let mut fallback = None;
5824 let (event, allow_any) = loop {
5825 let state = replace(&mut *self.state__, S::Unknown__);
5826 event = match (state, event) {
5827 (S::Unknown__, _) => unreachable!(),
5828 (S::Appinfo(values, Some(deserializer)), event) => {
5829 let output = deserializer.next(helper, event)?;
5830 match self.handle_appinfo(helper, values, output, &mut fallback)? {
5831 ElementHandlerOutput::Break { event, allow_any } => {
5832 break (event, allow_any)
5833 }
5834 ElementHandlerOutput::Continue { event, .. } => event,
5835 }
5836 }
5837 (S::Documentation(values, Some(deserializer)), event) => {
5838 let output = deserializer.next(helper, event)?;
5839 match self.handle_documentation(helper, values, output, &mut fallback)? {
5840 ElementHandlerOutput::Break { event, allow_any } => {
5841 break (event, allow_any)
5842 }
5843 ElementHandlerOutput::Continue { event, .. } => event,
5844 }
5845 }
5846 (state, event @ Event::End(_)) => {
5847 return Ok(DeserializerOutput {
5848 artifact: DeserializerArtifact::Data(
5849 AnnotationContentDeserializer::finish_state(helper, state)?,
5850 ),
5851 event: DeserializerEvent::Continue(event),
5852 allow_any: false,
5853 });
5854 }
5855 (S::Init__, event) => match self.find_suitable(helper, event, &mut fallback)? {
5856 ElementHandlerOutput::Break { event, allow_any } => {
5857 break (event, allow_any)
5858 }
5859 ElementHandlerOutput::Continue { event, .. } => event,
5860 },
5861 (S::Appinfo(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
5862 let output = helper.init_start_tag_deserializer(
5863 event,
5864 Some(&super::NS_XS),
5865 b"appinfo",
5866 false,
5867 )?;
5868 match self.handle_appinfo(helper, values, output, &mut fallback)? {
5869 ElementHandlerOutput::Break { event, allow_any } => {
5870 break (event, allow_any)
5871 }
5872 ElementHandlerOutput::Continue { event, .. } => event,
5873 }
5874 }
5875 (
5876 S::Documentation(values, None),
5877 event @ (Event::Start(_) | Event::Empty(_)),
5878 ) => {
5879 let output = helper.init_start_tag_deserializer(
5880 event,
5881 Some(&super::NS_XS),
5882 b"documentation",
5883 false,
5884 )?;
5885 match self.handle_documentation(helper, values, output, &mut fallback)? {
5886 ElementHandlerOutput::Break { event, allow_any } => {
5887 break (event, allow_any)
5888 }
5889 ElementHandlerOutput::Continue { event, .. } => event,
5890 }
5891 }
5892 (s @ S::Done__(_), event) => {
5893 *self.state__ = s;
5894 break (DeserializerEvent::Continue(event), false);
5895 }
5896 (state, event) => {
5897 *self.state__ = state;
5898 break (DeserializerEvent::Break(event), false);
5899 }
5900 }
5901 };
5902 let artifact = if matches!(&*self.state__, S::Done__(_)) {
5903 DeserializerArtifact::Data(self.finish(helper)?)
5904 } else {
5905 DeserializerArtifact::Deserializer(self)
5906 };
5907 Ok(DeserializerOutput {
5908 artifact,
5909 event,
5910 allow_any,
5911 })
5912 }
5913 fn finish(self, helper: &mut DeserializeHelper) -> Result<super::AnnotationContent, Error> {
5914 AnnotationContentDeserializer::finish_state(helper, *self.state__)
5915 }
5916 }
5917 #[derive(Debug)]
5918 pub struct DefaultOpenContentDeserializer {
5919 id: Option<String>,
5920 applies_to_empty: bool,
5921 mode: super::DefaultOpenContentModeType,
5922 annotation: Option<super::Annotation>,
5923 any: Option<super::WildcardType>,
5924 state__: Box<DefaultOpenContentDeserializerState>,
5925 }
5926 #[derive(Debug)]
5927 enum DefaultOpenContentDeserializerState {
5928 Init__,
5929 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
5930 Any(Option<<super::WildcardType as WithDeserializer>::Deserializer>),
5931 Done__,
5932 Unknown__,
5933 }
5934 impl DefaultOpenContentDeserializer {
5935 fn from_bytes_start(
5936 helper: &mut DeserializeHelper,
5937 bytes_start: &BytesStart<'_>,
5938 ) -> Result<Box<Self>, Error> {
5939 let mut id: Option<String> = None;
5940 let mut applies_to_empty: Option<bool> = None;
5941 let mut mode: Option<super::DefaultOpenContentModeType> = None;
5942 for attrib in helper.filter_xmlns_attributes(bytes_start) {
5943 let attrib = attrib?;
5944 if matches!(
5945 helper.resolve_local_name(attrib.key, &super::NS_XS),
5946 Some(b"id")
5947 ) {
5948 helper.read_attrib(&mut id, b"id", &attrib.value)?;
5949 } else if matches!(
5950 helper.resolve_local_name(attrib.key, &super::NS_XS),
5951 Some(b"appliesToEmpty")
5952 ) {
5953 helper.read_attrib(&mut applies_to_empty, b"appliesToEmpty", &attrib.value)?;
5954 } else if matches!(
5955 helper.resolve_local_name(attrib.key, &super::NS_XS),
5956 Some(b"mode")
5957 ) {
5958 helper.read_attrib(&mut mode, b"mode", &attrib.value)?;
5959 }
5960 }
5961 Ok(Box::new(Self {
5962 id: id,
5963 applies_to_empty: applies_to_empty
5964 .unwrap_or_else(super::DefaultOpenContent::default_applies_to_empty),
5965 mode: mode.unwrap_or_else(super::DefaultOpenContent::default_mode),
5966 annotation: None,
5967 any: None,
5968 state__: Box::new(DefaultOpenContentDeserializerState::Init__),
5969 }))
5970 }
5971 fn finish_state(
5972 &mut self,
5973 helper: &mut DeserializeHelper,
5974 state: DefaultOpenContentDeserializerState,
5975 ) -> Result<(), Error> {
5976 use DefaultOpenContentDeserializerState as S;
5977 match state {
5978 S::Annotation(Some(deserializer)) => {
5979 self.store_annotation(deserializer.finish(helper)?)?
5980 }
5981 S::Any(Some(deserializer)) => self.store_any(deserializer.finish(helper)?)?,
5982 _ => (),
5983 }
5984 Ok(())
5985 }
5986 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
5987 if self.annotation.is_some() {
5988 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
5989 b"annotation",
5990 )))?;
5991 }
5992 self.annotation = Some(value);
5993 Ok(())
5994 }
5995 fn store_any(&mut self, value: super::WildcardType) -> Result<(), Error> {
5996 if self.any.is_some() {
5997 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"any")))?;
5998 }
5999 self.any = Some(value);
6000 Ok(())
6001 }
6002 fn handle_annotation<'de>(
6003 &mut self,
6004 helper: &mut DeserializeHelper,
6005 output: DeserializerOutput<'de, super::Annotation>,
6006 fallback: &mut Option<DefaultOpenContentDeserializerState>,
6007 ) -> Result<ElementHandlerOutput<'de>, Error> {
6008 let DeserializerOutput {
6009 artifact,
6010 event,
6011 allow_any,
6012 } = output;
6013 if artifact.is_none() {
6014 fallback.get_or_insert(DefaultOpenContentDeserializerState::Annotation(None));
6015 *self.state__ = DefaultOpenContentDeserializerState::Any(None);
6016 return Ok(ElementHandlerOutput::from_event(event, allow_any));
6017 }
6018 if let Some(fallback) = fallback.take() {
6019 self.finish_state(helper, fallback)?;
6020 }
6021 Ok(match artifact {
6022 DeserializerArtifact::None => unreachable!(),
6023 DeserializerArtifact::Data(data) => {
6024 self.store_annotation(data)?;
6025 *self.state__ = DefaultOpenContentDeserializerState::Any(None);
6026 ElementHandlerOutput::from_event(event, allow_any)
6027 }
6028 DeserializerArtifact::Deserializer(deserializer) => {
6029 let ret = ElementHandlerOutput::from_event(event, allow_any);
6030 match &ret {
6031 ElementHandlerOutput::Continue { .. } => {
6032 fallback.get_or_insert(
6033 DefaultOpenContentDeserializerState::Annotation(Some(deserializer)),
6034 );
6035 *self.state__ = DefaultOpenContentDeserializerState::Any(None);
6036 }
6037 ElementHandlerOutput::Break { .. } => {
6038 *self.state__ =
6039 DefaultOpenContentDeserializerState::Annotation(Some(deserializer));
6040 }
6041 }
6042 ret
6043 }
6044 })
6045 }
6046 fn handle_any<'de>(
6047 &mut self,
6048 helper: &mut DeserializeHelper,
6049 output: DeserializerOutput<'de, super::WildcardType>,
6050 fallback: &mut Option<DefaultOpenContentDeserializerState>,
6051 ) -> Result<ElementHandlerOutput<'de>, Error> {
6052 let DeserializerOutput {
6053 artifact,
6054 event,
6055 allow_any,
6056 } = output;
6057 if artifact.is_none() {
6058 if self.any.is_some() {
6059 fallback.get_or_insert(DefaultOpenContentDeserializerState::Any(None));
6060 *self.state__ = DefaultOpenContentDeserializerState::Done__;
6061 return Ok(ElementHandlerOutput::from_event(event, allow_any));
6062 } else {
6063 *self.state__ = DefaultOpenContentDeserializerState::Any(None);
6064 return Ok(ElementHandlerOutput::break_(event, allow_any));
6065 }
6066 }
6067 if let Some(fallback) = fallback.take() {
6068 self.finish_state(helper, fallback)?;
6069 }
6070 Ok(match artifact {
6071 DeserializerArtifact::None => unreachable!(),
6072 DeserializerArtifact::Data(data) => {
6073 self.store_any(data)?;
6074 *self.state__ = DefaultOpenContentDeserializerState::Done__;
6075 ElementHandlerOutput::from_event(event, allow_any)
6076 }
6077 DeserializerArtifact::Deserializer(deserializer) => {
6078 let ret = ElementHandlerOutput::from_event(event, allow_any);
6079 match &ret {
6080 ElementHandlerOutput::Continue { .. } => {
6081 fallback.get_or_insert(DefaultOpenContentDeserializerState::Any(Some(
6082 deserializer,
6083 )));
6084 *self.state__ = DefaultOpenContentDeserializerState::Done__;
6085 }
6086 ElementHandlerOutput::Break { .. } => {
6087 *self.state__ =
6088 DefaultOpenContentDeserializerState::Any(Some(deserializer));
6089 }
6090 }
6091 ret
6092 }
6093 })
6094 }
6095 }
6096 impl<'de> Deserializer<'de, super::DefaultOpenContent> for Box<DefaultOpenContentDeserializer> {
6097 fn init(
6098 helper: &mut DeserializeHelper,
6099 event: Event<'de>,
6100 ) -> DeserializerResult<'de, super::DefaultOpenContent> {
6101 helper.init_deserializer_from_start_event(
6102 event,
6103 DefaultOpenContentDeserializer::from_bytes_start,
6104 )
6105 }
6106 fn next(
6107 mut self,
6108 helper: &mut DeserializeHelper,
6109 event: Event<'de>,
6110 ) -> DeserializerResult<'de, super::DefaultOpenContent> {
6111 use DefaultOpenContentDeserializerState as S;
6112 let mut event = event;
6113 let mut fallback = None;
6114 let mut allow_any_element = false;
6115 let (event, allow_any) = loop {
6116 let state = replace(&mut *self.state__, S::Unknown__);
6117 event = match (state, event) {
6118 (S::Unknown__, _) => unreachable!(),
6119 (S::Annotation(Some(deserializer)), event) => {
6120 let output = deserializer.next(helper, event)?;
6121 match self.handle_annotation(helper, output, &mut fallback)? {
6122 ElementHandlerOutput::Continue { event, allow_any } => {
6123 allow_any_element = allow_any_element || allow_any;
6124 event
6125 }
6126 ElementHandlerOutput::Break { event, allow_any } => {
6127 break (event, allow_any)
6128 }
6129 }
6130 }
6131 (S::Any(Some(deserializer)), event) => {
6132 let output = deserializer.next(helper, event)?;
6133 match self.handle_any(helper, output, &mut fallback)? {
6134 ElementHandlerOutput::Continue { event, allow_any } => {
6135 allow_any_element = allow_any_element || allow_any;
6136 event
6137 }
6138 ElementHandlerOutput::Break { event, allow_any } => {
6139 break (event, allow_any)
6140 }
6141 }
6142 }
6143 (_, Event::End(_)) => {
6144 if let Some(fallback) = fallback.take() {
6145 self.finish_state(helper, fallback)?;
6146 }
6147 return Ok(DeserializerOutput {
6148 artifact: DeserializerArtifact::Data(self.finish(helper)?),
6149 event: DeserializerEvent::None,
6150 allow_any: false,
6151 });
6152 }
6153 (S::Init__, event) => {
6154 fallback.get_or_insert(S::Init__);
6155 *self.state__ = DefaultOpenContentDeserializerState::Annotation(None);
6156 event
6157 }
6158 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
6159 let output = helper.init_start_tag_deserializer(
6160 event,
6161 Some(&super::NS_XS),
6162 b"annotation",
6163 false,
6164 )?;
6165 match self.handle_annotation(helper, output, &mut fallback)? {
6166 ElementHandlerOutput::Continue { event, allow_any } => {
6167 allow_any_element = allow_any_element || allow_any;
6168 event
6169 }
6170 ElementHandlerOutput::Break { event, allow_any } => {
6171 break (event, allow_any)
6172 }
6173 }
6174 }
6175 (S::Any(None), event @ (Event::Start(_) | Event::Empty(_))) => {
6176 let output = helper.init_start_tag_deserializer(
6177 event,
6178 Some(&super::NS_XS),
6179 b"any",
6180 false,
6181 )?;
6182 match self.handle_any(helper, output, &mut fallback)? {
6183 ElementHandlerOutput::Continue { event, allow_any } => {
6184 allow_any_element = allow_any_element || allow_any;
6185 event
6186 }
6187 ElementHandlerOutput::Break { event, allow_any } => {
6188 break (event, allow_any)
6189 }
6190 }
6191 }
6192 (S::Done__, event) => {
6193 fallback.get_or_insert(S::Done__);
6194 break (DeserializerEvent::Continue(event), allow_any_element);
6195 }
6196 (state, event) => {
6197 *self.state__ = state;
6198 break (DeserializerEvent::Break(event), false);
6199 }
6200 }
6201 };
6202 if let Some(fallback) = fallback {
6203 *self.state__ = fallback;
6204 }
6205 Ok(DeserializerOutput {
6206 artifact: DeserializerArtifact::Deserializer(self),
6207 event,
6208 allow_any,
6209 })
6210 }
6211 fn finish(
6212 mut self,
6213 helper: &mut DeserializeHelper,
6214 ) -> Result<super::DefaultOpenContent, Error> {
6215 let state = replace(
6216 &mut *self.state__,
6217 DefaultOpenContentDeserializerState::Unknown__,
6218 );
6219 self.finish_state(helper, state)?;
6220 Ok(super::DefaultOpenContent {
6221 id: self.id,
6222 applies_to_empty: self.applies_to_empty,
6223 mode: self.mode,
6224 annotation: self.annotation,
6225 any: self
6226 .any
6227 .ok_or_else(|| ErrorKind::MissingElement("any".into()))?,
6228 })
6229 }
6230 }
6231 #[derive(Debug)]
6232 pub struct SimpleBaseTypeDeserializer {
6233 id: Option<String>,
6234 final_: Option<super::SimpleDerivationSetType>,
6235 name: Option<String>,
6236 content: Vec<super::SimpleBaseTypeContent>,
6237 state__: Box<SimpleBaseTypeDeserializerState>,
6238 }
6239 #[derive(Debug)]
6240 enum SimpleBaseTypeDeserializerState {
6241 Init__,
6242 Next__,
6243 Content__(<super::SimpleBaseTypeContent as WithDeserializer>::Deserializer),
6244 Unknown__,
6245 }
6246 impl SimpleBaseTypeDeserializer {
6247 fn from_bytes_start(
6248 helper: &mut DeserializeHelper,
6249 bytes_start: &BytesStart<'_>,
6250 ) -> Result<Box<Self>, Error> {
6251 let mut id: Option<String> = None;
6252 let mut final_: Option<super::SimpleDerivationSetType> = None;
6253 let mut name: Option<String> = None;
6254 for attrib in helper.filter_xmlns_attributes(bytes_start) {
6255 let attrib = attrib?;
6256 if matches!(
6257 helper.resolve_local_name(attrib.key, &super::NS_XS),
6258 Some(b"id")
6259 ) {
6260 helper.read_attrib(&mut id, b"id", &attrib.value)?;
6261 } else if matches!(
6262 helper.resolve_local_name(attrib.key, &super::NS_XS),
6263 Some(b"final")
6264 ) {
6265 helper.read_attrib(&mut final_, b"final", &attrib.value)?;
6266 } else if matches!(
6267 helper.resolve_local_name(attrib.key, &super::NS_XS),
6268 Some(b"name")
6269 ) {
6270 helper.read_attrib(&mut name, b"name", &attrib.value)?;
6271 }
6272 }
6273 Ok(Box::new(Self {
6274 id: id,
6275 final_: final_,
6276 name: name,
6277 content: Vec::new(),
6278 state__: Box::new(SimpleBaseTypeDeserializerState::Init__),
6279 }))
6280 }
6281 fn finish_state(
6282 &mut self,
6283 helper: &mut DeserializeHelper,
6284 state: SimpleBaseTypeDeserializerState,
6285 ) -> Result<(), Error> {
6286 if let SimpleBaseTypeDeserializerState::Content__(deserializer) = state {
6287 self.store_content(deserializer.finish(helper)?)?;
6288 }
6289 Ok(())
6290 }
6291 fn store_content(&mut self, value: super::SimpleBaseTypeContent) -> Result<(), Error> {
6292 self.content.push(value);
6293 Ok(())
6294 }
6295 fn handle_content<'de>(
6296 &mut self,
6297 helper: &mut DeserializeHelper,
6298 output: DeserializerOutput<'de, super::SimpleBaseTypeContent>,
6299 fallback: &mut Option<SimpleBaseTypeDeserializerState>,
6300 ) -> Result<ElementHandlerOutput<'de>, Error> {
6301 let DeserializerOutput {
6302 artifact,
6303 event,
6304 allow_any,
6305 } = output;
6306 if artifact.is_none() {
6307 *self.state__ = fallback
6308 .take()
6309 .unwrap_or(SimpleBaseTypeDeserializerState::Next__);
6310 return Ok(ElementHandlerOutput::break_(event, allow_any));
6311 }
6312 if let Some(fallback) = fallback.take() {
6313 self.finish_state(helper, fallback)?;
6314 }
6315 Ok(match artifact {
6316 DeserializerArtifact::None => unreachable!(),
6317 DeserializerArtifact::Data(data) => {
6318 self.store_content(data)?;
6319 *self.state__ = SimpleBaseTypeDeserializerState::Next__;
6320 ElementHandlerOutput::from_event(event, allow_any)
6321 }
6322 DeserializerArtifact::Deserializer(deserializer) => {
6323 let can_have_more = self.content.len().saturating_add(1) < 2usize;
6324 let ret = if can_have_more {
6325 ElementHandlerOutput::from_event(event, allow_any)
6326 } else {
6327 ElementHandlerOutput::from_event_end(event, allow_any)
6328 };
6329 match (can_have_more, &ret) {
6330 (true, ElementHandlerOutput::Continue { .. }) => {
6331 fallback.get_or_insert(SimpleBaseTypeDeserializerState::Content__(
6332 deserializer,
6333 ));
6334 *self.state__ = SimpleBaseTypeDeserializerState::Next__;
6335 }
6336 (false, _) | (_, ElementHandlerOutput::Break { .. }) => {
6337 *self.state__ =
6338 SimpleBaseTypeDeserializerState::Content__(deserializer);
6339 }
6340 }
6341 ret
6342 }
6343 })
6344 }
6345 }
6346 impl<'de> Deserializer<'de, super::SimpleBaseType> for Box<SimpleBaseTypeDeserializer> {
6347 fn init(
6348 helper: &mut DeserializeHelper,
6349 event: Event<'de>,
6350 ) -> DeserializerResult<'de, super::SimpleBaseType> {
6351 helper.init_deserializer_from_start_event(
6352 event,
6353 SimpleBaseTypeDeserializer::from_bytes_start,
6354 )
6355 }
6356 fn next(
6357 mut self,
6358 helper: &mut DeserializeHelper,
6359 event: Event<'de>,
6360 ) -> DeserializerResult<'de, super::SimpleBaseType> {
6361 use SimpleBaseTypeDeserializerState as S;
6362 let mut event = event;
6363 let mut fallback = None;
6364 let (event, allow_any) = loop {
6365 let state = replace(&mut *self.state__, S::Unknown__);
6366 event = match (state, event) {
6367 (S::Unknown__, _) => unreachable!(),
6368 (S::Content__(deserializer), event) => {
6369 let output = deserializer.next(helper, event)?;
6370 match self.handle_content(helper, output, &mut fallback)? {
6371 ElementHandlerOutput::Break { event, allow_any } => {
6372 break (event, allow_any)
6373 }
6374 ElementHandlerOutput::Continue { event, .. } => event,
6375 }
6376 }
6377 (_, Event::End(_)) => {
6378 return Ok(DeserializerOutput {
6379 artifact: DeserializerArtifact::Data(self.finish(helper)?),
6380 event: DeserializerEvent::None,
6381 allow_any: false,
6382 });
6383 }
6384 (state @ (S::Init__ | S::Next__), event) => {
6385 fallback.get_or_insert(state);
6386 let output =
6387 <super::SimpleBaseTypeContent as WithDeserializer>::Deserializer::init(
6388 helper, event,
6389 )?;
6390 match self.handle_content(helper, output, &mut fallback)? {
6391 ElementHandlerOutput::Break { event, allow_any } => {
6392 break (event, allow_any)
6393 }
6394 ElementHandlerOutput::Continue { event, .. } => event,
6395 }
6396 }
6397 }
6398 };
6399 let artifact = DeserializerArtifact::Deserializer(self);
6400 Ok(DeserializerOutput {
6401 artifact,
6402 event,
6403 allow_any,
6404 })
6405 }
6406 fn finish(
6407 mut self,
6408 helper: &mut DeserializeHelper,
6409 ) -> Result<super::SimpleBaseType, Error> {
6410 let state = replace(
6411 &mut *self.state__,
6412 SimpleBaseTypeDeserializerState::Unknown__,
6413 );
6414 self.finish_state(helper, state)?;
6415 Ok(super::SimpleBaseType {
6416 id: self.id,
6417 final_: self.final_,
6418 name: self.name,
6419 content: self.content,
6420 })
6421 }
6422 }
6423 #[derive(Debug)]
6424 pub struct SimpleBaseTypeContentDeserializer {
6425 state__: Box<SimpleBaseTypeContentDeserializerState>,
6426 }
6427 #[derive(Debug)]
6428 pub enum SimpleBaseTypeContentDeserializerState {
6429 Init__,
6430 Annotation(
6431 Option<super::Annotation>,
6432 Option<<super::Annotation as WithDeserializer>::Deserializer>,
6433 ),
6434 Restriction(
6435 Option<super::Restriction>,
6436 Option<<super::Restriction as WithDeserializer>::Deserializer>,
6437 ),
6438 List(
6439 Option<super::List>,
6440 Option<<super::List as WithDeserializer>::Deserializer>,
6441 ),
6442 Union(
6443 Option<super::Union>,
6444 Option<<super::Union as WithDeserializer>::Deserializer>,
6445 ),
6446 Done__(super::SimpleBaseTypeContent),
6447 Unknown__,
6448 }
6449 impl SimpleBaseTypeContentDeserializer {
6450 fn find_suitable<'de>(
6451 &mut self,
6452 helper: &mut DeserializeHelper,
6453 event: Event<'de>,
6454 fallback: &mut Option<SimpleBaseTypeContentDeserializerState>,
6455 ) -> Result<ElementHandlerOutput<'de>, Error> {
6456 if let Event::Start(x) | Event::Empty(x) = &event {
6457 if matches!(
6458 helper.resolve_local_name(x.name(), &super::NS_XS),
6459 Some(b"annotation")
6460 ) {
6461 let output =
6462 <super::Annotation as WithDeserializer>::Deserializer::init(helper, event)?;
6463 return self.handle_annotation(
6464 helper,
6465 Default::default(),
6466 output,
6467 &mut *fallback,
6468 );
6469 }
6470 if matches!(
6471 helper.resolve_local_name(x.name(), &super::NS_XS),
6472 Some(b"restriction")
6473 ) {
6474 let output = <super::Restriction as WithDeserializer>::Deserializer::init(
6475 helper, event,
6476 )?;
6477 return self.handle_restriction(
6478 helper,
6479 Default::default(),
6480 output,
6481 &mut *fallback,
6482 );
6483 }
6484 if matches!(
6485 helper.resolve_local_name(x.name(), &super::NS_XS),
6486 Some(b"list")
6487 ) {
6488 let output =
6489 <super::List as WithDeserializer>::Deserializer::init(helper, event)?;
6490 return self.handle_list(helper, Default::default(), output, &mut *fallback);
6491 }
6492 if matches!(
6493 helper.resolve_local_name(x.name(), &super::NS_XS),
6494 Some(b"union")
6495 ) {
6496 let output =
6497 <super::Union as WithDeserializer>::Deserializer::init(helper, event)?;
6498 return self.handle_union_(helper, Default::default(), output, &mut *fallback);
6499 }
6500 }
6501 *self.state__ = fallback
6502 .take()
6503 .unwrap_or(SimpleBaseTypeContentDeserializerState::Init__);
6504 Ok(ElementHandlerOutput::return_to_parent(event, false))
6505 }
6506 fn finish_state(
6507 helper: &mut DeserializeHelper,
6508 state: SimpleBaseTypeContentDeserializerState,
6509 ) -> Result<super::SimpleBaseTypeContent, Error> {
6510 use SimpleBaseTypeContentDeserializerState as S;
6511 match state {
6512 S::Unknown__ => unreachable!(),
6513 S::Init__ => Err(ErrorKind::MissingContent.into()),
6514 S::Annotation(mut values, deserializer) => {
6515 if let Some(deserializer) = deserializer {
6516 let value = deserializer.finish(helper)?;
6517 SimpleBaseTypeContentDeserializer::store_annotation(&mut values, value)?;
6518 }
6519 Ok(super::SimpleBaseTypeContent::Annotation(
6520 values.ok_or_else(|| ErrorKind::MissingElement("annotation".into()))?,
6521 ))
6522 }
6523 S::Restriction(mut values, deserializer) => {
6524 if let Some(deserializer) = deserializer {
6525 let value = deserializer.finish(helper)?;
6526 SimpleBaseTypeContentDeserializer::store_restriction(&mut values, value)?;
6527 }
6528 Ok(super::SimpleBaseTypeContent::Restriction(
6529 values.ok_or_else(|| ErrorKind::MissingElement("restriction".into()))?,
6530 ))
6531 }
6532 S::List(mut values, deserializer) => {
6533 if let Some(deserializer) = deserializer {
6534 let value = deserializer.finish(helper)?;
6535 SimpleBaseTypeContentDeserializer::store_list(&mut values, value)?;
6536 }
6537 Ok(super::SimpleBaseTypeContent::List(
6538 values.ok_or_else(|| ErrorKind::MissingElement("list".into()))?,
6539 ))
6540 }
6541 S::Union(mut values, deserializer) => {
6542 if let Some(deserializer) = deserializer {
6543 let value = deserializer.finish(helper)?;
6544 SimpleBaseTypeContentDeserializer::store_union_(&mut values, value)?;
6545 }
6546 Ok(super::SimpleBaseTypeContent::Union(values.ok_or_else(
6547 || ErrorKind::MissingElement("union".into()),
6548 )?))
6549 }
6550 S::Done__(data) => Ok(data),
6551 }
6552 }
6553 fn store_annotation(
6554 values: &mut Option<super::Annotation>,
6555 value: super::Annotation,
6556 ) -> Result<(), Error> {
6557 if values.is_some() {
6558 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
6559 b"annotation",
6560 )))?;
6561 }
6562 *values = Some(value);
6563 Ok(())
6564 }
6565 fn store_restriction(
6566 values: &mut Option<super::Restriction>,
6567 value: super::Restriction,
6568 ) -> Result<(), Error> {
6569 if values.is_some() {
6570 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
6571 b"restriction",
6572 )))?;
6573 }
6574 *values = Some(value);
6575 Ok(())
6576 }
6577 fn store_list(values: &mut Option<super::List>, value: super::List) -> Result<(), Error> {
6578 if values.is_some() {
6579 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"list")))?;
6580 }
6581 *values = Some(value);
6582 Ok(())
6583 }
6584 fn store_union_(
6585 values: &mut Option<super::Union>,
6586 value: super::Union,
6587 ) -> Result<(), Error> {
6588 if values.is_some() {
6589 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
6590 b"union",
6591 )))?;
6592 }
6593 *values = Some(value);
6594 Ok(())
6595 }
6596 fn handle_annotation<'de>(
6597 &mut self,
6598 helper: &mut DeserializeHelper,
6599 mut values: Option<super::Annotation>,
6600 output: DeserializerOutput<'de, super::Annotation>,
6601 fallback: &mut Option<SimpleBaseTypeContentDeserializerState>,
6602 ) -> Result<ElementHandlerOutput<'de>, Error> {
6603 let DeserializerOutput {
6604 artifact,
6605 event,
6606 allow_any,
6607 } = output;
6608 if artifact.is_none() {
6609 *self.state__ = match fallback.take() {
6610 None if values.is_none() => {
6611 *self.state__ = SimpleBaseTypeContentDeserializerState::Init__;
6612 return Ok(ElementHandlerOutput::from_event(event, allow_any));
6613 }
6614 None => SimpleBaseTypeContentDeserializerState::Annotation(values, None),
6615 Some(SimpleBaseTypeContentDeserializerState::Annotation(
6616 _,
6617 Some(deserializer),
6618 )) => SimpleBaseTypeContentDeserializerState::Annotation(
6619 values,
6620 Some(deserializer),
6621 ),
6622 _ => unreachable!(),
6623 };
6624 return Ok(ElementHandlerOutput::break_(event, allow_any));
6625 }
6626 match fallback.take() {
6627 None => (),
6628 Some(SimpleBaseTypeContentDeserializerState::Annotation(_, Some(deserializer))) => {
6629 let data = deserializer.finish(helper)?;
6630 SimpleBaseTypeContentDeserializer::store_annotation(&mut values, data)?;
6631 }
6632 Some(_) => unreachable!(),
6633 }
6634 Ok(match artifact {
6635 DeserializerArtifact::None => unreachable!(),
6636 DeserializerArtifact::Data(data) => {
6637 SimpleBaseTypeContentDeserializer::store_annotation(&mut values, data)?;
6638 let data = SimpleBaseTypeContentDeserializer::finish_state(
6639 helper,
6640 SimpleBaseTypeContentDeserializerState::Annotation(values, None),
6641 )?;
6642 *self.state__ = SimpleBaseTypeContentDeserializerState::Done__(data);
6643 ElementHandlerOutput::Break { event, allow_any }
6644 }
6645 DeserializerArtifact::Deserializer(deserializer) => {
6646 *self.state__ = SimpleBaseTypeContentDeserializerState::Annotation(
6647 values,
6648 Some(deserializer),
6649 );
6650 ElementHandlerOutput::from_event_end(event, allow_any)
6651 }
6652 })
6653 }
6654 fn handle_restriction<'de>(
6655 &mut self,
6656 helper: &mut DeserializeHelper,
6657 mut values: Option<super::Restriction>,
6658 output: DeserializerOutput<'de, super::Restriction>,
6659 fallback: &mut Option<SimpleBaseTypeContentDeserializerState>,
6660 ) -> Result<ElementHandlerOutput<'de>, Error> {
6661 let DeserializerOutput {
6662 artifact,
6663 event,
6664 allow_any,
6665 } = output;
6666 if artifact.is_none() {
6667 *self.state__ = match fallback.take() {
6668 None if values.is_none() => {
6669 *self.state__ = SimpleBaseTypeContentDeserializerState::Init__;
6670 return Ok(ElementHandlerOutput::from_event(event, allow_any));
6671 }
6672 None => SimpleBaseTypeContentDeserializerState::Restriction(values, None),
6673 Some(SimpleBaseTypeContentDeserializerState::Restriction(
6674 _,
6675 Some(deserializer),
6676 )) => SimpleBaseTypeContentDeserializerState::Restriction(
6677 values,
6678 Some(deserializer),
6679 ),
6680 _ => unreachable!(),
6681 };
6682 return Ok(ElementHandlerOutput::break_(event, allow_any));
6683 }
6684 match fallback.take() {
6685 None => (),
6686 Some(SimpleBaseTypeContentDeserializerState::Restriction(
6687 _,
6688 Some(deserializer),
6689 )) => {
6690 let data = deserializer.finish(helper)?;
6691 SimpleBaseTypeContentDeserializer::store_restriction(&mut values, data)?;
6692 }
6693 Some(_) => unreachable!(),
6694 }
6695 Ok(match artifact {
6696 DeserializerArtifact::None => unreachable!(),
6697 DeserializerArtifact::Data(data) => {
6698 SimpleBaseTypeContentDeserializer::store_restriction(&mut values, data)?;
6699 let data = SimpleBaseTypeContentDeserializer::finish_state(
6700 helper,
6701 SimpleBaseTypeContentDeserializerState::Restriction(values, None),
6702 )?;
6703 *self.state__ = SimpleBaseTypeContentDeserializerState::Done__(data);
6704 ElementHandlerOutput::Break { event, allow_any }
6705 }
6706 DeserializerArtifact::Deserializer(deserializer) => {
6707 *self.state__ = SimpleBaseTypeContentDeserializerState::Restriction(
6708 values,
6709 Some(deserializer),
6710 );
6711 ElementHandlerOutput::from_event_end(event, allow_any)
6712 }
6713 })
6714 }
6715 fn handle_list<'de>(
6716 &mut self,
6717 helper: &mut DeserializeHelper,
6718 mut values: Option<super::List>,
6719 output: DeserializerOutput<'de, super::List>,
6720 fallback: &mut Option<SimpleBaseTypeContentDeserializerState>,
6721 ) -> Result<ElementHandlerOutput<'de>, Error> {
6722 let DeserializerOutput {
6723 artifact,
6724 event,
6725 allow_any,
6726 } = output;
6727 if artifact.is_none() {
6728 *self.state__ = match fallback.take() {
6729 None if values.is_none() => {
6730 *self.state__ = SimpleBaseTypeContentDeserializerState::Init__;
6731 return Ok(ElementHandlerOutput::from_event(event, allow_any));
6732 }
6733 None => SimpleBaseTypeContentDeserializerState::List(values, None),
6734 Some(SimpleBaseTypeContentDeserializerState::List(_, Some(deserializer))) => {
6735 SimpleBaseTypeContentDeserializerState::List(values, Some(deserializer))
6736 }
6737 _ => unreachable!(),
6738 };
6739 return Ok(ElementHandlerOutput::break_(event, allow_any));
6740 }
6741 match fallback.take() {
6742 None => (),
6743 Some(SimpleBaseTypeContentDeserializerState::List(_, Some(deserializer))) => {
6744 let data = deserializer.finish(helper)?;
6745 SimpleBaseTypeContentDeserializer::store_list(&mut values, data)?;
6746 }
6747 Some(_) => unreachable!(),
6748 }
6749 Ok(match artifact {
6750 DeserializerArtifact::None => unreachable!(),
6751 DeserializerArtifact::Data(data) => {
6752 SimpleBaseTypeContentDeserializer::store_list(&mut values, data)?;
6753 let data = SimpleBaseTypeContentDeserializer::finish_state(
6754 helper,
6755 SimpleBaseTypeContentDeserializerState::List(values, None),
6756 )?;
6757 *self.state__ = SimpleBaseTypeContentDeserializerState::Done__(data);
6758 ElementHandlerOutput::Break { event, allow_any }
6759 }
6760 DeserializerArtifact::Deserializer(deserializer) => {
6761 *self.state__ =
6762 SimpleBaseTypeContentDeserializerState::List(values, Some(deserializer));
6763 ElementHandlerOutput::from_event_end(event, allow_any)
6764 }
6765 })
6766 }
6767 fn handle_union_<'de>(
6768 &mut self,
6769 helper: &mut DeserializeHelper,
6770 mut values: Option<super::Union>,
6771 output: DeserializerOutput<'de, super::Union>,
6772 fallback: &mut Option<SimpleBaseTypeContentDeserializerState>,
6773 ) -> Result<ElementHandlerOutput<'de>, Error> {
6774 let DeserializerOutput {
6775 artifact,
6776 event,
6777 allow_any,
6778 } = output;
6779 if artifact.is_none() {
6780 *self.state__ = match fallback.take() {
6781 None if values.is_none() => {
6782 *self.state__ = SimpleBaseTypeContentDeserializerState::Init__;
6783 return Ok(ElementHandlerOutput::from_event(event, allow_any));
6784 }
6785 None => SimpleBaseTypeContentDeserializerState::Union(values, None),
6786 Some(SimpleBaseTypeContentDeserializerState::Union(_, Some(deserializer))) => {
6787 SimpleBaseTypeContentDeserializerState::Union(values, Some(deserializer))
6788 }
6789 _ => unreachable!(),
6790 };
6791 return Ok(ElementHandlerOutput::break_(event, allow_any));
6792 }
6793 match fallback.take() {
6794 None => (),
6795 Some(SimpleBaseTypeContentDeserializerState::Union(_, Some(deserializer))) => {
6796 let data = deserializer.finish(helper)?;
6797 SimpleBaseTypeContentDeserializer::store_union_(&mut values, data)?;
6798 }
6799 Some(_) => unreachable!(),
6800 }
6801 Ok(match artifact {
6802 DeserializerArtifact::None => unreachable!(),
6803 DeserializerArtifact::Data(data) => {
6804 SimpleBaseTypeContentDeserializer::store_union_(&mut values, data)?;
6805 let data = SimpleBaseTypeContentDeserializer::finish_state(
6806 helper,
6807 SimpleBaseTypeContentDeserializerState::Union(values, None),
6808 )?;
6809 *self.state__ = SimpleBaseTypeContentDeserializerState::Done__(data);
6810 ElementHandlerOutput::Break { event, allow_any }
6811 }
6812 DeserializerArtifact::Deserializer(deserializer) => {
6813 *self.state__ =
6814 SimpleBaseTypeContentDeserializerState::Union(values, Some(deserializer));
6815 ElementHandlerOutput::from_event_end(event, allow_any)
6816 }
6817 })
6818 }
6819 }
6820 impl<'de> Deserializer<'de, super::SimpleBaseTypeContent>
6821 for Box<SimpleBaseTypeContentDeserializer>
6822 {
6823 fn init(
6824 helper: &mut DeserializeHelper,
6825 event: Event<'de>,
6826 ) -> DeserializerResult<'de, super::SimpleBaseTypeContent> {
6827 let deserializer = Box::new(SimpleBaseTypeContentDeserializer {
6828 state__: Box::new(SimpleBaseTypeContentDeserializerState::Init__),
6829 });
6830 let mut output = deserializer.next(helper, event)?;
6831 output.artifact = match output.artifact {
6832 DeserializerArtifact::Deserializer(x)
6833 if matches!(&*x.state__, SimpleBaseTypeContentDeserializerState::Init__) =>
6834 {
6835 DeserializerArtifact::None
6836 }
6837 artifact => artifact,
6838 };
6839 Ok(output)
6840 }
6841 fn next(
6842 mut self,
6843 helper: &mut DeserializeHelper,
6844 event: Event<'de>,
6845 ) -> DeserializerResult<'de, super::SimpleBaseTypeContent> {
6846 use SimpleBaseTypeContentDeserializerState as S;
6847 let mut event = event;
6848 let mut fallback = None;
6849 let (event, allow_any) = loop {
6850 let state = replace(&mut *self.state__, S::Unknown__);
6851 event = match (state, event) {
6852 (S::Unknown__, _) => unreachable!(),
6853 (S::Annotation(values, Some(deserializer)), event) => {
6854 let output = deserializer.next(helper, event)?;
6855 match self.handle_annotation(helper, values, output, &mut fallback)? {
6856 ElementHandlerOutput::Break { event, allow_any } => {
6857 break (event, allow_any)
6858 }
6859 ElementHandlerOutput::Continue { event, .. } => event,
6860 }
6861 }
6862 (S::Restriction(values, Some(deserializer)), event) => {
6863 let output = deserializer.next(helper, event)?;
6864 match self.handle_restriction(helper, values, output, &mut fallback)? {
6865 ElementHandlerOutput::Break { event, allow_any } => {
6866 break (event, allow_any)
6867 }
6868 ElementHandlerOutput::Continue { event, .. } => event,
6869 }
6870 }
6871 (S::List(values, Some(deserializer)), event) => {
6872 let output = deserializer.next(helper, event)?;
6873 match self.handle_list(helper, values, output, &mut fallback)? {
6874 ElementHandlerOutput::Break { event, allow_any } => {
6875 break (event, allow_any)
6876 }
6877 ElementHandlerOutput::Continue { event, .. } => event,
6878 }
6879 }
6880 (S::Union(values, Some(deserializer)), event) => {
6881 let output = deserializer.next(helper, event)?;
6882 match self.handle_union_(helper, values, output, &mut fallback)? {
6883 ElementHandlerOutput::Break { event, allow_any } => {
6884 break (event, allow_any)
6885 }
6886 ElementHandlerOutput::Continue { event, .. } => event,
6887 }
6888 }
6889 (state, event @ Event::End(_)) => {
6890 return Ok(DeserializerOutput {
6891 artifact: DeserializerArtifact::Data(
6892 SimpleBaseTypeContentDeserializer::finish_state(helper, state)?,
6893 ),
6894 event: DeserializerEvent::Continue(event),
6895 allow_any: false,
6896 });
6897 }
6898 (S::Init__, event) => match self.find_suitable(helper, event, &mut fallback)? {
6899 ElementHandlerOutput::Break { event, allow_any } => {
6900 break (event, allow_any)
6901 }
6902 ElementHandlerOutput::Continue { event, .. } => event,
6903 },
6904 (S::Annotation(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
6905 let output = helper.init_start_tag_deserializer(
6906 event,
6907 Some(&super::NS_XS),
6908 b"annotation",
6909 false,
6910 )?;
6911 match self.handle_annotation(helper, values, output, &mut fallback)? {
6912 ElementHandlerOutput::Break { event, allow_any } => {
6913 break (event, allow_any)
6914 }
6915 ElementHandlerOutput::Continue { event, .. } => event,
6916 }
6917 }
6918 (S::Restriction(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
6919 let output = helper.init_start_tag_deserializer(
6920 event,
6921 Some(&super::NS_XS),
6922 b"restriction",
6923 true,
6924 )?;
6925 match self.handle_restriction(helper, values, output, &mut fallback)? {
6926 ElementHandlerOutput::Break { event, allow_any } => {
6927 break (event, allow_any)
6928 }
6929 ElementHandlerOutput::Continue { event, .. } => event,
6930 }
6931 }
6932 (S::List(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
6933 let output = helper.init_start_tag_deserializer(
6934 event,
6935 Some(&super::NS_XS),
6936 b"list",
6937 false,
6938 )?;
6939 match self.handle_list(helper, values, output, &mut fallback)? {
6940 ElementHandlerOutput::Break { event, allow_any } => {
6941 break (event, allow_any)
6942 }
6943 ElementHandlerOutput::Continue { event, .. } => event,
6944 }
6945 }
6946 (S::Union(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
6947 let output = helper.init_start_tag_deserializer(
6948 event,
6949 Some(&super::NS_XS),
6950 b"union",
6951 false,
6952 )?;
6953 match self.handle_union_(helper, values, output, &mut fallback)? {
6954 ElementHandlerOutput::Break { event, allow_any } => {
6955 break (event, allow_any)
6956 }
6957 ElementHandlerOutput::Continue { event, .. } => event,
6958 }
6959 }
6960 (s @ S::Done__(_), event) => {
6961 *self.state__ = s;
6962 break (DeserializerEvent::Continue(event), false);
6963 }
6964 (state, event) => {
6965 *self.state__ = state;
6966 break (DeserializerEvent::Break(event), false);
6967 }
6968 }
6969 };
6970 let artifact = if matches!(&*self.state__, S::Done__(_)) {
6971 DeserializerArtifact::Data(self.finish(helper)?)
6972 } else {
6973 DeserializerArtifact::Deserializer(self)
6974 };
6975 Ok(DeserializerOutput {
6976 artifact,
6977 event,
6978 allow_any,
6979 })
6980 }
6981 fn finish(
6982 self,
6983 helper: &mut DeserializeHelper,
6984 ) -> Result<super::SimpleBaseTypeContent, Error> {
6985 SimpleBaseTypeContentDeserializer::finish_state(helper, *self.state__)
6986 }
6987 }
6988 #[derive(Debug)]
6989 pub struct ComplexBaseTypeDeserializer {
6990 id: Option<String>,
6991 name: Option<String>,
6992 mixed: Option<bool>,
6993 abstract_: bool,
6994 final_: Option<super::DerivationSetType>,
6995 block: Option<super::DerivationSetType>,
6996 default_attributes_apply: bool,
6997 content: Vec<super::ComplexBaseTypeContent>,
6998 state__: Box<ComplexBaseTypeDeserializerState>,
6999 }
7000 #[derive(Debug)]
7001 enum ComplexBaseTypeDeserializerState {
7002 Init__,
7003 Next__,
7004 Content__(<super::ComplexBaseTypeContent as WithDeserializer>::Deserializer),
7005 Unknown__,
7006 }
7007 impl ComplexBaseTypeDeserializer {
7008 fn from_bytes_start(
7009 helper: &mut DeserializeHelper,
7010 bytes_start: &BytesStart<'_>,
7011 ) -> Result<Box<Self>, Error> {
7012 let mut id: Option<String> = None;
7013 let mut name: Option<String> = None;
7014 let mut mixed: Option<bool> = None;
7015 let mut abstract_: Option<bool> = None;
7016 let mut final_: Option<super::DerivationSetType> = None;
7017 let mut block: Option<super::DerivationSetType> = None;
7018 let mut default_attributes_apply: Option<bool> = None;
7019 for attrib in helper.filter_xmlns_attributes(bytes_start) {
7020 let attrib = attrib?;
7021 if matches!(
7022 helper.resolve_local_name(attrib.key, &super::NS_XS),
7023 Some(b"id")
7024 ) {
7025 helper.read_attrib(&mut id, b"id", &attrib.value)?;
7026 } else if matches!(
7027 helper.resolve_local_name(attrib.key, &super::NS_XS),
7028 Some(b"name")
7029 ) {
7030 helper.read_attrib(&mut name, b"name", &attrib.value)?;
7031 } else if matches!(
7032 helper.resolve_local_name(attrib.key, &super::NS_XS),
7033 Some(b"mixed")
7034 ) {
7035 helper.read_attrib(&mut mixed, b"mixed", &attrib.value)?;
7036 } else if matches!(
7037 helper.resolve_local_name(attrib.key, &super::NS_XS),
7038 Some(b"abstract")
7039 ) {
7040 helper.read_attrib(&mut abstract_, b"abstract", &attrib.value)?;
7041 } else if matches!(
7042 helper.resolve_local_name(attrib.key, &super::NS_XS),
7043 Some(b"final")
7044 ) {
7045 helper.read_attrib(&mut final_, b"final", &attrib.value)?;
7046 } else if matches!(
7047 helper.resolve_local_name(attrib.key, &super::NS_XS),
7048 Some(b"block")
7049 ) {
7050 helper.read_attrib(&mut block, b"block", &attrib.value)?;
7051 } else if matches!(
7052 helper.resolve_local_name(attrib.key, &super::NS_XS),
7053 Some(b"defaultAttributesApply")
7054 ) {
7055 helper.read_attrib(
7056 &mut default_attributes_apply,
7057 b"defaultAttributesApply",
7058 &attrib.value,
7059 )?;
7060 }
7061 }
7062 Ok(Box::new(Self {
7063 id: id,
7064 name: name,
7065 mixed: mixed,
7066 abstract_: abstract_.unwrap_or_else(super::ComplexBaseType::default_abstract_),
7067 final_: final_,
7068 block: block,
7069 default_attributes_apply: default_attributes_apply
7070 .unwrap_or_else(super::ComplexBaseType::default_default_attributes_apply),
7071 content: Vec::new(),
7072 state__: Box::new(ComplexBaseTypeDeserializerState::Init__),
7073 }))
7074 }
7075 fn finish_state(
7076 &mut self,
7077 helper: &mut DeserializeHelper,
7078 state: ComplexBaseTypeDeserializerState,
7079 ) -> Result<(), Error> {
7080 if let ComplexBaseTypeDeserializerState::Content__(deserializer) = state {
7081 self.store_content(deserializer.finish(helper)?)?;
7082 }
7083 Ok(())
7084 }
7085 fn store_content(&mut self, value: super::ComplexBaseTypeContent) -> Result<(), Error> {
7086 self.content.push(value);
7087 Ok(())
7088 }
7089 fn handle_content<'de>(
7090 &mut self,
7091 helper: &mut DeserializeHelper,
7092 output: DeserializerOutput<'de, super::ComplexBaseTypeContent>,
7093 fallback: &mut Option<ComplexBaseTypeDeserializerState>,
7094 ) -> Result<ElementHandlerOutput<'de>, Error> {
7095 let DeserializerOutput {
7096 artifact,
7097 event,
7098 allow_any,
7099 } = output;
7100 if artifact.is_none() {
7101 *self.state__ = fallback
7102 .take()
7103 .unwrap_or(ComplexBaseTypeDeserializerState::Next__);
7104 return Ok(ElementHandlerOutput::break_(event, allow_any));
7105 }
7106 if let Some(fallback) = fallback.take() {
7107 self.finish_state(helper, fallback)?;
7108 }
7109 Ok(match artifact {
7110 DeserializerArtifact::None => unreachable!(),
7111 DeserializerArtifact::Data(data) => {
7112 self.store_content(data)?;
7113 *self.state__ = ComplexBaseTypeDeserializerState::Next__;
7114 ElementHandlerOutput::from_event(event, allow_any)
7115 }
7116 DeserializerArtifact::Deserializer(deserializer) => {
7117 let ret = ElementHandlerOutput::from_event(event, allow_any);
7118 match &ret {
7119 ElementHandlerOutput::Break { .. } => {
7120 *self.state__ =
7121 ComplexBaseTypeDeserializerState::Content__(deserializer);
7122 }
7123 ElementHandlerOutput::Continue { .. } => {
7124 fallback.get_or_insert(ComplexBaseTypeDeserializerState::Content__(
7125 deserializer,
7126 ));
7127 *self.state__ = ComplexBaseTypeDeserializerState::Next__;
7128 }
7129 }
7130 ret
7131 }
7132 })
7133 }
7134 }
7135 impl<'de> Deserializer<'de, super::ComplexBaseType> for Box<ComplexBaseTypeDeserializer> {
7136 fn init(
7137 helper: &mut DeserializeHelper,
7138 event: Event<'de>,
7139 ) -> DeserializerResult<'de, super::ComplexBaseType> {
7140 helper.init_deserializer_from_start_event(
7141 event,
7142 ComplexBaseTypeDeserializer::from_bytes_start,
7143 )
7144 }
7145 fn next(
7146 mut self,
7147 helper: &mut DeserializeHelper,
7148 event: Event<'de>,
7149 ) -> DeserializerResult<'de, super::ComplexBaseType> {
7150 use ComplexBaseTypeDeserializerState as S;
7151 let mut event = event;
7152 let mut fallback = None;
7153 let (event, allow_any) = loop {
7154 let state = replace(&mut *self.state__, S::Unknown__);
7155 event = match (state, event) {
7156 (S::Unknown__, _) => unreachable!(),
7157 (S::Content__(deserializer), event) => {
7158 let output = deserializer.next(helper, event)?;
7159 match self.handle_content(helper, output, &mut fallback)? {
7160 ElementHandlerOutput::Break { event, allow_any } => {
7161 break (event, allow_any)
7162 }
7163 ElementHandlerOutput::Continue { event, .. } => event,
7164 }
7165 }
7166 (_, Event::End(_)) => {
7167 return Ok(DeserializerOutput {
7168 artifact: DeserializerArtifact::Data(self.finish(helper)?),
7169 event: DeserializerEvent::None,
7170 allow_any: false,
7171 });
7172 }
7173 (state @ (S::Init__ | S::Next__), event) => {
7174 fallback.get_or_insert(state);
7175 let output = < super :: ComplexBaseTypeContent as WithDeserializer > :: Deserializer :: init (helper , event) ? ;
7176 match self.handle_content(helper, output, &mut fallback)? {
7177 ElementHandlerOutput::Break { event, allow_any } => {
7178 break (event, allow_any)
7179 }
7180 ElementHandlerOutput::Continue { event, .. } => event,
7181 }
7182 }
7183 }
7184 };
7185 let artifact = DeserializerArtifact::Deserializer(self);
7186 Ok(DeserializerOutput {
7187 artifact,
7188 event,
7189 allow_any,
7190 })
7191 }
7192 fn finish(
7193 mut self,
7194 helper: &mut DeserializeHelper,
7195 ) -> Result<super::ComplexBaseType, Error> {
7196 let state = replace(
7197 &mut *self.state__,
7198 ComplexBaseTypeDeserializerState::Unknown__,
7199 );
7200 self.finish_state(helper, state)?;
7201 Ok(super::ComplexBaseType {
7202 id: self.id,
7203 name: self.name,
7204 mixed: self.mixed,
7205 abstract_: self.abstract_,
7206 final_: self.final_,
7207 block: self.block,
7208 default_attributes_apply: self.default_attributes_apply,
7209 content: self.content,
7210 })
7211 }
7212 }
7213 #[derive(Debug)]
7214 pub struct ComplexBaseTypeContentDeserializer {
7215 state__: Box<ComplexBaseTypeContentDeserializerState>,
7216 }
7217 #[derive(Debug)]
7218 pub enum ComplexBaseTypeContentDeserializerState {
7219 Init__,
7220 Annotation(
7221 Option<super::Annotation>,
7222 Option<<super::Annotation as WithDeserializer>::Deserializer>,
7223 ),
7224 SimpleContent(
7225 Option<super::SimpleContent>,
7226 Option<<super::SimpleContent as WithDeserializer>::Deserializer>,
7227 ),
7228 ComplexContent(
7229 Option<super::ComplexContent>,
7230 Option<<super::ComplexContent as WithDeserializer>::Deserializer>,
7231 ),
7232 OpenContent(
7233 Option<super::OpenContent>,
7234 Option<<super::OpenContent as WithDeserializer>::Deserializer>,
7235 ),
7236 Group(
7237 Option<super::GroupType>,
7238 Option<<super::GroupType as WithDeserializer>::Deserializer>,
7239 ),
7240 All(
7241 Option<super::GroupType>,
7242 Option<<super::GroupType as WithDeserializer>::Deserializer>,
7243 ),
7244 Choice(
7245 Option<super::GroupType>,
7246 Option<<super::GroupType as WithDeserializer>::Deserializer>,
7247 ),
7248 Sequence(
7249 Option<super::GroupType>,
7250 Option<<super::GroupType as WithDeserializer>::Deserializer>,
7251 ),
7252 Attribute(
7253 Option<super::AttributeType>,
7254 Option<<super::AttributeType as WithDeserializer>::Deserializer>,
7255 ),
7256 AttributeGroup(
7257 Option<super::AttributeGroupType>,
7258 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
7259 ),
7260 AnyAttribute(
7261 Option<super::AnyAttribute>,
7262 Option<<super::AnyAttribute as WithDeserializer>::Deserializer>,
7263 ),
7264 Assert(
7265 Option<super::AssertionType>,
7266 Option<<super::AssertionType as WithDeserializer>::Deserializer>,
7267 ),
7268 Done__(super::ComplexBaseTypeContent),
7269 Unknown__,
7270 }
7271 impl ComplexBaseTypeContentDeserializer {
7272 fn find_suitable<'de>(
7273 &mut self,
7274 helper: &mut DeserializeHelper,
7275 event: Event<'de>,
7276 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
7277 ) -> Result<ElementHandlerOutput<'de>, Error> {
7278 if let Event::Start(x) | Event::Empty(x) = &event {
7279 if matches!(
7280 helper.resolve_local_name(x.name(), &super::NS_XS),
7281 Some(b"annotation")
7282 ) {
7283 let output =
7284 <super::Annotation as WithDeserializer>::Deserializer::init(helper, event)?;
7285 return self.handle_annotation(
7286 helper,
7287 Default::default(),
7288 output,
7289 &mut *fallback,
7290 );
7291 }
7292 if matches!(
7293 helper.resolve_local_name(x.name(), &super::NS_XS),
7294 Some(b"simpleContent")
7295 ) {
7296 let output = <super::SimpleContent as WithDeserializer>::Deserializer::init(
7297 helper, event,
7298 )?;
7299 return self.handle_simple_content(
7300 helper,
7301 Default::default(),
7302 output,
7303 &mut *fallback,
7304 );
7305 }
7306 if matches!(
7307 helper.resolve_local_name(x.name(), &super::NS_XS),
7308 Some(b"complexContent")
7309 ) {
7310 let output = <super::ComplexContent as WithDeserializer>::Deserializer::init(
7311 helper, event,
7312 )?;
7313 return self.handle_complex_content(
7314 helper,
7315 Default::default(),
7316 output,
7317 &mut *fallback,
7318 );
7319 }
7320 if matches!(
7321 helper.resolve_local_name(x.name(), &super::NS_XS),
7322 Some(b"openContent")
7323 ) {
7324 let output = <super::OpenContent as WithDeserializer>::Deserializer::init(
7325 helper, event,
7326 )?;
7327 return self.handle_open_content(
7328 helper,
7329 Default::default(),
7330 output,
7331 &mut *fallback,
7332 );
7333 }
7334 if matches!(
7335 helper.resolve_local_name(x.name(), &super::NS_XS),
7336 Some(b"group")
7337 ) {
7338 let output =
7339 <super::GroupType as WithDeserializer>::Deserializer::init(helper, event)?;
7340 return self.handle_group(helper, Default::default(), output, &mut *fallback);
7341 }
7342 if matches!(
7343 helper.resolve_local_name(x.name(), &super::NS_XS),
7344 Some(b"all")
7345 ) {
7346 let output =
7347 <super::GroupType as WithDeserializer>::Deserializer::init(helper, event)?;
7348 return self.handle_all(helper, Default::default(), output, &mut *fallback);
7349 }
7350 if matches!(
7351 helper.resolve_local_name(x.name(), &super::NS_XS),
7352 Some(b"choice")
7353 ) {
7354 let output =
7355 <super::GroupType as WithDeserializer>::Deserializer::init(helper, event)?;
7356 return self.handle_choice(helper, Default::default(), output, &mut *fallback);
7357 }
7358 if matches!(
7359 helper.resolve_local_name(x.name(), &super::NS_XS),
7360 Some(b"sequence")
7361 ) {
7362 let output =
7363 <super::GroupType as WithDeserializer>::Deserializer::init(helper, event)?;
7364 return self.handle_sequence(
7365 helper,
7366 Default::default(),
7367 output,
7368 &mut *fallback,
7369 );
7370 }
7371 if matches!(
7372 helper.resolve_local_name(x.name(), &super::NS_XS),
7373 Some(b"attribute")
7374 ) {
7375 let output = <super::AttributeType as WithDeserializer>::Deserializer::init(
7376 helper, event,
7377 )?;
7378 return self.handle_attribute(
7379 helper,
7380 Default::default(),
7381 output,
7382 &mut *fallback,
7383 );
7384 }
7385 if matches!(
7386 helper.resolve_local_name(x.name(), &super::NS_XS),
7387 Some(b"attributeGroup")
7388 ) {
7389 let output =
7390 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
7391 helper, event,
7392 )?;
7393 return self.handle_attribute_group(
7394 helper,
7395 Default::default(),
7396 output,
7397 &mut *fallback,
7398 );
7399 }
7400 if matches!(
7401 helper.resolve_local_name(x.name(), &super::NS_XS),
7402 Some(b"anyAttribute")
7403 ) {
7404 let output = <super::AnyAttribute as WithDeserializer>::Deserializer::init(
7405 helper, event,
7406 )?;
7407 return self.handle_any_attribute(
7408 helper,
7409 Default::default(),
7410 output,
7411 &mut *fallback,
7412 );
7413 }
7414 if matches!(
7415 helper.resolve_local_name(x.name(), &super::NS_XS),
7416 Some(b"assert")
7417 ) {
7418 let output = <super::AssertionType as WithDeserializer>::Deserializer::init(
7419 helper, event,
7420 )?;
7421 return self.handle_assert(helper, Default::default(), output, &mut *fallback);
7422 }
7423 }
7424 *self.state__ = fallback
7425 .take()
7426 .unwrap_or(ComplexBaseTypeContentDeserializerState::Init__);
7427 Ok(ElementHandlerOutput::return_to_parent(event, false))
7428 }
7429 fn finish_state(
7430 helper: &mut DeserializeHelper,
7431 state: ComplexBaseTypeContentDeserializerState,
7432 ) -> Result<super::ComplexBaseTypeContent, Error> {
7433 use ComplexBaseTypeContentDeserializerState as S;
7434 match state {
7435 S::Unknown__ => unreachable!(),
7436 S::Init__ => Err(ErrorKind::MissingContent.into()),
7437 S::Annotation(mut values, deserializer) => {
7438 if let Some(deserializer) = deserializer {
7439 let value = deserializer.finish(helper)?;
7440 ComplexBaseTypeContentDeserializer::store_annotation(&mut values, value)?;
7441 }
7442 Ok(super::ComplexBaseTypeContent::Annotation(
7443 values.ok_or_else(|| ErrorKind::MissingElement("annotation".into()))?,
7444 ))
7445 }
7446 S::SimpleContent(mut values, deserializer) => {
7447 if let Some(deserializer) = deserializer {
7448 let value = deserializer.finish(helper)?;
7449 ComplexBaseTypeContentDeserializer::store_simple_content(
7450 &mut values,
7451 value,
7452 )?;
7453 }
7454 Ok(super::ComplexBaseTypeContent::SimpleContent(
7455 values.ok_or_else(|| ErrorKind::MissingElement("simpleContent".into()))?,
7456 ))
7457 }
7458 S::ComplexContent(mut values, deserializer) => {
7459 if let Some(deserializer) = deserializer {
7460 let value = deserializer.finish(helper)?;
7461 ComplexBaseTypeContentDeserializer::store_complex_content(
7462 &mut values,
7463 value,
7464 )?;
7465 }
7466 Ok(super::ComplexBaseTypeContent::ComplexContent(
7467 values.ok_or_else(|| ErrorKind::MissingElement("complexContent".into()))?,
7468 ))
7469 }
7470 S::OpenContent(mut values, deserializer) => {
7471 if let Some(deserializer) = deserializer {
7472 let value = deserializer.finish(helper)?;
7473 ComplexBaseTypeContentDeserializer::store_open_content(&mut values, value)?;
7474 }
7475 Ok(super::ComplexBaseTypeContent::OpenContent(
7476 values.ok_or_else(|| ErrorKind::MissingElement("openContent".into()))?,
7477 ))
7478 }
7479 S::Group(mut values, deserializer) => {
7480 if let Some(deserializer) = deserializer {
7481 let value = deserializer.finish(helper)?;
7482 ComplexBaseTypeContentDeserializer::store_group(&mut values, value)?;
7483 }
7484 Ok(super::ComplexBaseTypeContent::Group(values.ok_or_else(
7485 || ErrorKind::MissingElement("group".into()),
7486 )?))
7487 }
7488 S::All(mut values, deserializer) => {
7489 if let Some(deserializer) = deserializer {
7490 let value = deserializer.finish(helper)?;
7491 ComplexBaseTypeContentDeserializer::store_all(&mut values, value)?;
7492 }
7493 Ok(super::ComplexBaseTypeContent::All(
7494 values.ok_or_else(|| ErrorKind::MissingElement("all".into()))?,
7495 ))
7496 }
7497 S::Choice(mut values, deserializer) => {
7498 if let Some(deserializer) = deserializer {
7499 let value = deserializer.finish(helper)?;
7500 ComplexBaseTypeContentDeserializer::store_choice(&mut values, value)?;
7501 }
7502 Ok(super::ComplexBaseTypeContent::Choice(values.ok_or_else(
7503 || ErrorKind::MissingElement("choice".into()),
7504 )?))
7505 }
7506 S::Sequence(mut values, deserializer) => {
7507 if let Some(deserializer) = deserializer {
7508 let value = deserializer.finish(helper)?;
7509 ComplexBaseTypeContentDeserializer::store_sequence(&mut values, value)?;
7510 }
7511 Ok(super::ComplexBaseTypeContent::Sequence(values.ok_or_else(
7512 || ErrorKind::MissingElement("sequence".into()),
7513 )?))
7514 }
7515 S::Attribute(mut values, deserializer) => {
7516 if let Some(deserializer) = deserializer {
7517 let value = deserializer.finish(helper)?;
7518 ComplexBaseTypeContentDeserializer::store_attribute(&mut values, value)?;
7519 }
7520 Ok(super::ComplexBaseTypeContent::Attribute(
7521 values.ok_or_else(|| ErrorKind::MissingElement("attribute".into()))?,
7522 ))
7523 }
7524 S::AttributeGroup(mut values, deserializer) => {
7525 if let Some(deserializer) = deserializer {
7526 let value = deserializer.finish(helper)?;
7527 ComplexBaseTypeContentDeserializer::store_attribute_group(
7528 &mut values,
7529 value,
7530 )?;
7531 }
7532 Ok(super::ComplexBaseTypeContent::AttributeGroup(
7533 values.ok_or_else(|| ErrorKind::MissingElement("attributeGroup".into()))?,
7534 ))
7535 }
7536 S::AnyAttribute(mut values, deserializer) => {
7537 if let Some(deserializer) = deserializer {
7538 let value = deserializer.finish(helper)?;
7539 ComplexBaseTypeContentDeserializer::store_any_attribute(
7540 &mut values,
7541 value,
7542 )?;
7543 }
7544 Ok(super::ComplexBaseTypeContent::AnyAttribute(
7545 values.ok_or_else(|| ErrorKind::MissingElement("anyAttribute".into()))?,
7546 ))
7547 }
7548 S::Assert(mut values, deserializer) => {
7549 if let Some(deserializer) = deserializer {
7550 let value = deserializer.finish(helper)?;
7551 ComplexBaseTypeContentDeserializer::store_assert(&mut values, value)?;
7552 }
7553 Ok(super::ComplexBaseTypeContent::Assert(values.ok_or_else(
7554 || ErrorKind::MissingElement("assert".into()),
7555 )?))
7556 }
7557 S::Done__(data) => Ok(data),
7558 }
7559 }
7560 fn store_annotation(
7561 values: &mut Option<super::Annotation>,
7562 value: super::Annotation,
7563 ) -> Result<(), Error> {
7564 if values.is_some() {
7565 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7566 b"annotation",
7567 )))?;
7568 }
7569 *values = Some(value);
7570 Ok(())
7571 }
7572 fn store_simple_content(
7573 values: &mut Option<super::SimpleContent>,
7574 value: super::SimpleContent,
7575 ) -> Result<(), Error> {
7576 if values.is_some() {
7577 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7578 b"simpleContent",
7579 )))?;
7580 }
7581 *values = Some(value);
7582 Ok(())
7583 }
7584 fn store_complex_content(
7585 values: &mut Option<super::ComplexContent>,
7586 value: super::ComplexContent,
7587 ) -> Result<(), Error> {
7588 if values.is_some() {
7589 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7590 b"complexContent",
7591 )))?;
7592 }
7593 *values = Some(value);
7594 Ok(())
7595 }
7596 fn store_open_content(
7597 values: &mut Option<super::OpenContent>,
7598 value: super::OpenContent,
7599 ) -> Result<(), Error> {
7600 if values.is_some() {
7601 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7602 b"openContent",
7603 )))?;
7604 }
7605 *values = Some(value);
7606 Ok(())
7607 }
7608 fn store_group(
7609 values: &mut Option<super::GroupType>,
7610 value: super::GroupType,
7611 ) -> Result<(), Error> {
7612 if values.is_some() {
7613 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7614 b"group",
7615 )))?;
7616 }
7617 *values = Some(value);
7618 Ok(())
7619 }
7620 fn store_all(
7621 values: &mut Option<super::GroupType>,
7622 value: super::GroupType,
7623 ) -> Result<(), Error> {
7624 if values.is_some() {
7625 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"all")))?;
7626 }
7627 *values = Some(value);
7628 Ok(())
7629 }
7630 fn store_choice(
7631 values: &mut Option<super::GroupType>,
7632 value: super::GroupType,
7633 ) -> Result<(), Error> {
7634 if values.is_some() {
7635 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7636 b"choice",
7637 )))?;
7638 }
7639 *values = Some(value);
7640 Ok(())
7641 }
7642 fn store_sequence(
7643 values: &mut Option<super::GroupType>,
7644 value: super::GroupType,
7645 ) -> Result<(), Error> {
7646 if values.is_some() {
7647 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7648 b"sequence",
7649 )))?;
7650 }
7651 *values = Some(value);
7652 Ok(())
7653 }
7654 fn store_attribute(
7655 values: &mut Option<super::AttributeType>,
7656 value: super::AttributeType,
7657 ) -> Result<(), Error> {
7658 if values.is_some() {
7659 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7660 b"attribute",
7661 )))?;
7662 }
7663 *values = Some(value);
7664 Ok(())
7665 }
7666 fn store_attribute_group(
7667 values: &mut Option<super::AttributeGroupType>,
7668 value: super::AttributeGroupType,
7669 ) -> Result<(), Error> {
7670 if values.is_some() {
7671 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7672 b"attributeGroup",
7673 )))?;
7674 }
7675 *values = Some(value);
7676 Ok(())
7677 }
7678 fn store_any_attribute(
7679 values: &mut Option<super::AnyAttribute>,
7680 value: super::AnyAttribute,
7681 ) -> Result<(), Error> {
7682 if values.is_some() {
7683 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7684 b"anyAttribute",
7685 )))?;
7686 }
7687 *values = Some(value);
7688 Ok(())
7689 }
7690 fn store_assert(
7691 values: &mut Option<super::AssertionType>,
7692 value: super::AssertionType,
7693 ) -> Result<(), Error> {
7694 if values.is_some() {
7695 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7696 b"assert",
7697 )))?;
7698 }
7699 *values = Some(value);
7700 Ok(())
7701 }
7702 fn handle_annotation<'de>(
7703 &mut self,
7704 helper: &mut DeserializeHelper,
7705 mut values: Option<super::Annotation>,
7706 output: DeserializerOutput<'de, super::Annotation>,
7707 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
7708 ) -> Result<ElementHandlerOutput<'de>, Error> {
7709 let DeserializerOutput {
7710 artifact,
7711 event,
7712 allow_any,
7713 } = output;
7714 if artifact.is_none() {
7715 *self.state__ = match fallback.take() {
7716 None if values.is_none() => {
7717 *self.state__ = ComplexBaseTypeContentDeserializerState::Init__;
7718 return Ok(ElementHandlerOutput::from_event(event, allow_any));
7719 }
7720 None => ComplexBaseTypeContentDeserializerState::Annotation(values, None),
7721 Some(ComplexBaseTypeContentDeserializerState::Annotation(
7722 _,
7723 Some(deserializer),
7724 )) => ComplexBaseTypeContentDeserializerState::Annotation(
7725 values,
7726 Some(deserializer),
7727 ),
7728 _ => unreachable!(),
7729 };
7730 return Ok(ElementHandlerOutput::break_(event, allow_any));
7731 }
7732 match fallback.take() {
7733 None => (),
7734 Some(ComplexBaseTypeContentDeserializerState::Annotation(
7735 _,
7736 Some(deserializer),
7737 )) => {
7738 let data = deserializer.finish(helper)?;
7739 ComplexBaseTypeContentDeserializer::store_annotation(&mut values, data)?;
7740 }
7741 Some(_) => unreachable!(),
7742 }
7743 Ok(match artifact {
7744 DeserializerArtifact::None => unreachable!(),
7745 DeserializerArtifact::Data(data) => {
7746 ComplexBaseTypeContentDeserializer::store_annotation(&mut values, data)?;
7747 let data = ComplexBaseTypeContentDeserializer::finish_state(
7748 helper,
7749 ComplexBaseTypeContentDeserializerState::Annotation(values, None),
7750 )?;
7751 *self.state__ = ComplexBaseTypeContentDeserializerState::Done__(data);
7752 ElementHandlerOutput::Break { event, allow_any }
7753 }
7754 DeserializerArtifact::Deserializer(deserializer) => {
7755 *self.state__ = ComplexBaseTypeContentDeserializerState::Annotation(
7756 values,
7757 Some(deserializer),
7758 );
7759 ElementHandlerOutput::from_event_end(event, allow_any)
7760 }
7761 })
7762 }
7763 fn handle_simple_content<'de>(
7764 &mut self,
7765 helper: &mut DeserializeHelper,
7766 mut values: Option<super::SimpleContent>,
7767 output: DeserializerOutput<'de, super::SimpleContent>,
7768 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
7769 ) -> Result<ElementHandlerOutput<'de>, Error> {
7770 let DeserializerOutput {
7771 artifact,
7772 event,
7773 allow_any,
7774 } = output;
7775 if artifact.is_none() {
7776 *self.state__ = match fallback.take() {
7777 None if values.is_none() => {
7778 *self.state__ = ComplexBaseTypeContentDeserializerState::Init__;
7779 return Ok(ElementHandlerOutput::from_event(event, allow_any));
7780 }
7781 None => ComplexBaseTypeContentDeserializerState::SimpleContent(values, None),
7782 Some(ComplexBaseTypeContentDeserializerState::SimpleContent(
7783 _,
7784 Some(deserializer),
7785 )) => ComplexBaseTypeContentDeserializerState::SimpleContent(
7786 values,
7787 Some(deserializer),
7788 ),
7789 _ => unreachable!(),
7790 };
7791 return Ok(ElementHandlerOutput::break_(event, allow_any));
7792 }
7793 match fallback.take() {
7794 None => (),
7795 Some(ComplexBaseTypeContentDeserializerState::SimpleContent(
7796 _,
7797 Some(deserializer),
7798 )) => {
7799 let data = deserializer.finish(helper)?;
7800 ComplexBaseTypeContentDeserializer::store_simple_content(&mut values, data)?;
7801 }
7802 Some(_) => unreachable!(),
7803 }
7804 Ok(match artifact {
7805 DeserializerArtifact::None => unreachable!(),
7806 DeserializerArtifact::Data(data) => {
7807 ComplexBaseTypeContentDeserializer::store_simple_content(&mut values, data)?;
7808 let data = ComplexBaseTypeContentDeserializer::finish_state(
7809 helper,
7810 ComplexBaseTypeContentDeserializerState::SimpleContent(values, None),
7811 )?;
7812 *self.state__ = ComplexBaseTypeContentDeserializerState::Done__(data);
7813 ElementHandlerOutput::Break { event, allow_any }
7814 }
7815 DeserializerArtifact::Deserializer(deserializer) => {
7816 *self.state__ = ComplexBaseTypeContentDeserializerState::SimpleContent(
7817 values,
7818 Some(deserializer),
7819 );
7820 ElementHandlerOutput::from_event_end(event, allow_any)
7821 }
7822 })
7823 }
7824 fn handle_complex_content<'de>(
7825 &mut self,
7826 helper: &mut DeserializeHelper,
7827 mut values: Option<super::ComplexContent>,
7828 output: DeserializerOutput<'de, super::ComplexContent>,
7829 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
7830 ) -> Result<ElementHandlerOutput<'de>, Error> {
7831 let DeserializerOutput {
7832 artifact,
7833 event,
7834 allow_any,
7835 } = output;
7836 if artifact.is_none() {
7837 *self.state__ = match fallback.take() {
7838 None if values.is_none() => {
7839 *self.state__ = ComplexBaseTypeContentDeserializerState::Init__;
7840 return Ok(ElementHandlerOutput::from_event(event, allow_any));
7841 }
7842 None => ComplexBaseTypeContentDeserializerState::ComplexContent(values, None),
7843 Some(ComplexBaseTypeContentDeserializerState::ComplexContent(
7844 _,
7845 Some(deserializer),
7846 )) => ComplexBaseTypeContentDeserializerState::ComplexContent(
7847 values,
7848 Some(deserializer),
7849 ),
7850 _ => unreachable!(),
7851 };
7852 return Ok(ElementHandlerOutput::break_(event, allow_any));
7853 }
7854 match fallback.take() {
7855 None => (),
7856 Some(ComplexBaseTypeContentDeserializerState::ComplexContent(
7857 _,
7858 Some(deserializer),
7859 )) => {
7860 let data = deserializer.finish(helper)?;
7861 ComplexBaseTypeContentDeserializer::store_complex_content(&mut values, data)?;
7862 }
7863 Some(_) => unreachable!(),
7864 }
7865 Ok(match artifact {
7866 DeserializerArtifact::None => unreachable!(),
7867 DeserializerArtifact::Data(data) => {
7868 ComplexBaseTypeContentDeserializer::store_complex_content(&mut values, data)?;
7869 let data = ComplexBaseTypeContentDeserializer::finish_state(
7870 helper,
7871 ComplexBaseTypeContentDeserializerState::ComplexContent(values, None),
7872 )?;
7873 *self.state__ = ComplexBaseTypeContentDeserializerState::Done__(data);
7874 ElementHandlerOutput::Break { event, allow_any }
7875 }
7876 DeserializerArtifact::Deserializer(deserializer) => {
7877 *self.state__ = ComplexBaseTypeContentDeserializerState::ComplexContent(
7878 values,
7879 Some(deserializer),
7880 );
7881 ElementHandlerOutput::from_event_end(event, allow_any)
7882 }
7883 })
7884 }
7885 fn handle_open_content<'de>(
7886 &mut self,
7887 helper: &mut DeserializeHelper,
7888 mut values: Option<super::OpenContent>,
7889 output: DeserializerOutput<'de, super::OpenContent>,
7890 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
7891 ) -> Result<ElementHandlerOutput<'de>, Error> {
7892 let DeserializerOutput {
7893 artifact,
7894 event,
7895 allow_any,
7896 } = output;
7897 if artifact.is_none() {
7898 *self.state__ = match fallback.take() {
7899 None if values.is_none() => {
7900 *self.state__ = ComplexBaseTypeContentDeserializerState::Init__;
7901 return Ok(ElementHandlerOutput::from_event(event, allow_any));
7902 }
7903 None => ComplexBaseTypeContentDeserializerState::OpenContent(values, None),
7904 Some(ComplexBaseTypeContentDeserializerState::OpenContent(
7905 _,
7906 Some(deserializer),
7907 )) => ComplexBaseTypeContentDeserializerState::OpenContent(
7908 values,
7909 Some(deserializer),
7910 ),
7911 _ => unreachable!(),
7912 };
7913 return Ok(ElementHandlerOutput::break_(event, allow_any));
7914 }
7915 match fallback.take() {
7916 None => (),
7917 Some(ComplexBaseTypeContentDeserializerState::OpenContent(
7918 _,
7919 Some(deserializer),
7920 )) => {
7921 let data = deserializer.finish(helper)?;
7922 ComplexBaseTypeContentDeserializer::store_open_content(&mut values, data)?;
7923 }
7924 Some(_) => unreachable!(),
7925 }
7926 Ok(match artifact {
7927 DeserializerArtifact::None => unreachable!(),
7928 DeserializerArtifact::Data(data) => {
7929 ComplexBaseTypeContentDeserializer::store_open_content(&mut values, data)?;
7930 let data = ComplexBaseTypeContentDeserializer::finish_state(
7931 helper,
7932 ComplexBaseTypeContentDeserializerState::OpenContent(values, None),
7933 )?;
7934 *self.state__ = ComplexBaseTypeContentDeserializerState::Done__(data);
7935 ElementHandlerOutput::Break { event, allow_any }
7936 }
7937 DeserializerArtifact::Deserializer(deserializer) => {
7938 *self.state__ = ComplexBaseTypeContentDeserializerState::OpenContent(
7939 values,
7940 Some(deserializer),
7941 );
7942 ElementHandlerOutput::from_event_end(event, allow_any)
7943 }
7944 })
7945 }
7946 fn handle_group<'de>(
7947 &mut self,
7948 helper: &mut DeserializeHelper,
7949 mut values: Option<super::GroupType>,
7950 output: DeserializerOutput<'de, super::GroupType>,
7951 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
7952 ) -> Result<ElementHandlerOutput<'de>, Error> {
7953 let DeserializerOutput {
7954 artifact,
7955 event,
7956 allow_any,
7957 } = output;
7958 if artifact.is_none() {
7959 *self.state__ = match fallback.take() {
7960 None if values.is_none() => {
7961 *self.state__ = ComplexBaseTypeContentDeserializerState::Init__;
7962 return Ok(ElementHandlerOutput::from_event(event, allow_any));
7963 }
7964 None => ComplexBaseTypeContentDeserializerState::Group(values, None),
7965 Some(ComplexBaseTypeContentDeserializerState::Group(_, Some(deserializer))) => {
7966 ComplexBaseTypeContentDeserializerState::Group(values, Some(deserializer))
7967 }
7968 _ => unreachable!(),
7969 };
7970 return Ok(ElementHandlerOutput::break_(event, allow_any));
7971 }
7972 match fallback.take() {
7973 None => (),
7974 Some(ComplexBaseTypeContentDeserializerState::Group(_, Some(deserializer))) => {
7975 let data = deserializer.finish(helper)?;
7976 ComplexBaseTypeContentDeserializer::store_group(&mut values, data)?;
7977 }
7978 Some(_) => unreachable!(),
7979 }
7980 Ok(match artifact {
7981 DeserializerArtifact::None => unreachable!(),
7982 DeserializerArtifact::Data(data) => {
7983 ComplexBaseTypeContentDeserializer::store_group(&mut values, data)?;
7984 let data = ComplexBaseTypeContentDeserializer::finish_state(
7985 helper,
7986 ComplexBaseTypeContentDeserializerState::Group(values, None),
7987 )?;
7988 *self.state__ = ComplexBaseTypeContentDeserializerState::Done__(data);
7989 ElementHandlerOutput::Break { event, allow_any }
7990 }
7991 DeserializerArtifact::Deserializer(deserializer) => {
7992 *self.state__ =
7993 ComplexBaseTypeContentDeserializerState::Group(values, Some(deserializer));
7994 ElementHandlerOutput::from_event_end(event, allow_any)
7995 }
7996 })
7997 }
7998 fn handle_all<'de>(
7999 &mut self,
8000 helper: &mut DeserializeHelper,
8001 mut values: Option<super::GroupType>,
8002 output: DeserializerOutput<'de, super::GroupType>,
8003 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
8004 ) -> Result<ElementHandlerOutput<'de>, Error> {
8005 let DeserializerOutput {
8006 artifact,
8007 event,
8008 allow_any,
8009 } = output;
8010 if artifact.is_none() {
8011 *self.state__ = match fallback.take() {
8012 None if values.is_none() => {
8013 *self.state__ = ComplexBaseTypeContentDeserializerState::Init__;
8014 return Ok(ElementHandlerOutput::from_event(event, allow_any));
8015 }
8016 None => ComplexBaseTypeContentDeserializerState::All(values, None),
8017 Some(ComplexBaseTypeContentDeserializerState::All(_, Some(deserializer))) => {
8018 ComplexBaseTypeContentDeserializerState::All(values, Some(deserializer))
8019 }
8020 _ => unreachable!(),
8021 };
8022 return Ok(ElementHandlerOutput::break_(event, allow_any));
8023 }
8024 match fallback.take() {
8025 None => (),
8026 Some(ComplexBaseTypeContentDeserializerState::All(_, Some(deserializer))) => {
8027 let data = deserializer.finish(helper)?;
8028 ComplexBaseTypeContentDeserializer::store_all(&mut values, data)?;
8029 }
8030 Some(_) => unreachable!(),
8031 }
8032 Ok(match artifact {
8033 DeserializerArtifact::None => unreachable!(),
8034 DeserializerArtifact::Data(data) => {
8035 ComplexBaseTypeContentDeserializer::store_all(&mut values, data)?;
8036 let data = ComplexBaseTypeContentDeserializer::finish_state(
8037 helper,
8038 ComplexBaseTypeContentDeserializerState::All(values, None),
8039 )?;
8040 *self.state__ = ComplexBaseTypeContentDeserializerState::Done__(data);
8041 ElementHandlerOutput::Break { event, allow_any }
8042 }
8043 DeserializerArtifact::Deserializer(deserializer) => {
8044 *self.state__ =
8045 ComplexBaseTypeContentDeserializerState::All(values, Some(deserializer));
8046 ElementHandlerOutput::from_event_end(event, allow_any)
8047 }
8048 })
8049 }
8050 fn handle_choice<'de>(
8051 &mut self,
8052 helper: &mut DeserializeHelper,
8053 mut values: Option<super::GroupType>,
8054 output: DeserializerOutput<'de, super::GroupType>,
8055 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
8056 ) -> Result<ElementHandlerOutput<'de>, Error> {
8057 let DeserializerOutput {
8058 artifact,
8059 event,
8060 allow_any,
8061 } = output;
8062 if artifact.is_none() {
8063 *self.state__ = match fallback.take() {
8064 None if values.is_none() => {
8065 *self.state__ = ComplexBaseTypeContentDeserializerState::Init__;
8066 return Ok(ElementHandlerOutput::from_event(event, allow_any));
8067 }
8068 None => ComplexBaseTypeContentDeserializerState::Choice(values, None),
8069 Some(ComplexBaseTypeContentDeserializerState::Choice(
8070 _,
8071 Some(deserializer),
8072 )) => {
8073 ComplexBaseTypeContentDeserializerState::Choice(values, Some(deserializer))
8074 }
8075 _ => unreachable!(),
8076 };
8077 return Ok(ElementHandlerOutput::break_(event, allow_any));
8078 }
8079 match fallback.take() {
8080 None => (),
8081 Some(ComplexBaseTypeContentDeserializerState::Choice(_, Some(deserializer))) => {
8082 let data = deserializer.finish(helper)?;
8083 ComplexBaseTypeContentDeserializer::store_choice(&mut values, data)?;
8084 }
8085 Some(_) => unreachable!(),
8086 }
8087 Ok(match artifact {
8088 DeserializerArtifact::None => unreachable!(),
8089 DeserializerArtifact::Data(data) => {
8090 ComplexBaseTypeContentDeserializer::store_choice(&mut values, data)?;
8091 let data = ComplexBaseTypeContentDeserializer::finish_state(
8092 helper,
8093 ComplexBaseTypeContentDeserializerState::Choice(values, None),
8094 )?;
8095 *self.state__ = ComplexBaseTypeContentDeserializerState::Done__(data);
8096 ElementHandlerOutput::Break { event, allow_any }
8097 }
8098 DeserializerArtifact::Deserializer(deserializer) => {
8099 *self.state__ =
8100 ComplexBaseTypeContentDeserializerState::Choice(values, Some(deserializer));
8101 ElementHandlerOutput::from_event_end(event, allow_any)
8102 }
8103 })
8104 }
8105 fn handle_sequence<'de>(
8106 &mut self,
8107 helper: &mut DeserializeHelper,
8108 mut values: Option<super::GroupType>,
8109 output: DeserializerOutput<'de, super::GroupType>,
8110 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
8111 ) -> Result<ElementHandlerOutput<'de>, Error> {
8112 let DeserializerOutput {
8113 artifact,
8114 event,
8115 allow_any,
8116 } = output;
8117 if artifact.is_none() {
8118 *self.state__ = match fallback.take() {
8119 None if values.is_none() => {
8120 *self.state__ = ComplexBaseTypeContentDeserializerState::Init__;
8121 return Ok(ElementHandlerOutput::from_event(event, allow_any));
8122 }
8123 None => ComplexBaseTypeContentDeserializerState::Sequence(values, None),
8124 Some(ComplexBaseTypeContentDeserializerState::Sequence(
8125 _,
8126 Some(deserializer),
8127 )) => ComplexBaseTypeContentDeserializerState::Sequence(
8128 values,
8129 Some(deserializer),
8130 ),
8131 _ => unreachable!(),
8132 };
8133 return Ok(ElementHandlerOutput::break_(event, allow_any));
8134 }
8135 match fallback.take() {
8136 None => (),
8137 Some(ComplexBaseTypeContentDeserializerState::Sequence(_, Some(deserializer))) => {
8138 let data = deserializer.finish(helper)?;
8139 ComplexBaseTypeContentDeserializer::store_sequence(&mut values, data)?;
8140 }
8141 Some(_) => unreachable!(),
8142 }
8143 Ok(match artifact {
8144 DeserializerArtifact::None => unreachable!(),
8145 DeserializerArtifact::Data(data) => {
8146 ComplexBaseTypeContentDeserializer::store_sequence(&mut values, data)?;
8147 let data = ComplexBaseTypeContentDeserializer::finish_state(
8148 helper,
8149 ComplexBaseTypeContentDeserializerState::Sequence(values, None),
8150 )?;
8151 *self.state__ = ComplexBaseTypeContentDeserializerState::Done__(data);
8152 ElementHandlerOutput::Break { event, allow_any }
8153 }
8154 DeserializerArtifact::Deserializer(deserializer) => {
8155 *self.state__ = ComplexBaseTypeContentDeserializerState::Sequence(
8156 values,
8157 Some(deserializer),
8158 );
8159 ElementHandlerOutput::from_event_end(event, allow_any)
8160 }
8161 })
8162 }
8163 fn handle_attribute<'de>(
8164 &mut self,
8165 helper: &mut DeserializeHelper,
8166 mut values: Option<super::AttributeType>,
8167 output: DeserializerOutput<'de, super::AttributeType>,
8168 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
8169 ) -> Result<ElementHandlerOutput<'de>, Error> {
8170 let DeserializerOutput {
8171 artifact,
8172 event,
8173 allow_any,
8174 } = output;
8175 if artifact.is_none() {
8176 *self.state__ = match fallback.take() {
8177 None if values.is_none() => {
8178 *self.state__ = ComplexBaseTypeContentDeserializerState::Init__;
8179 return Ok(ElementHandlerOutput::from_event(event, allow_any));
8180 }
8181 None => ComplexBaseTypeContentDeserializerState::Attribute(values, None),
8182 Some(ComplexBaseTypeContentDeserializerState::Attribute(
8183 _,
8184 Some(deserializer),
8185 )) => ComplexBaseTypeContentDeserializerState::Attribute(
8186 values,
8187 Some(deserializer),
8188 ),
8189 _ => unreachable!(),
8190 };
8191 return Ok(ElementHandlerOutput::break_(event, allow_any));
8192 }
8193 match fallback.take() {
8194 None => (),
8195 Some(ComplexBaseTypeContentDeserializerState::Attribute(_, Some(deserializer))) => {
8196 let data = deserializer.finish(helper)?;
8197 ComplexBaseTypeContentDeserializer::store_attribute(&mut values, data)?;
8198 }
8199 Some(_) => unreachable!(),
8200 }
8201 Ok(match artifact {
8202 DeserializerArtifact::None => unreachable!(),
8203 DeserializerArtifact::Data(data) => {
8204 ComplexBaseTypeContentDeserializer::store_attribute(&mut values, data)?;
8205 let data = ComplexBaseTypeContentDeserializer::finish_state(
8206 helper,
8207 ComplexBaseTypeContentDeserializerState::Attribute(values, None),
8208 )?;
8209 *self.state__ = ComplexBaseTypeContentDeserializerState::Done__(data);
8210 ElementHandlerOutput::Break { event, allow_any }
8211 }
8212 DeserializerArtifact::Deserializer(deserializer) => {
8213 *self.state__ = ComplexBaseTypeContentDeserializerState::Attribute(
8214 values,
8215 Some(deserializer),
8216 );
8217 ElementHandlerOutput::from_event_end(event, allow_any)
8218 }
8219 })
8220 }
8221 fn handle_attribute_group<'de>(
8222 &mut self,
8223 helper: &mut DeserializeHelper,
8224 mut values: Option<super::AttributeGroupType>,
8225 output: DeserializerOutput<'de, super::AttributeGroupType>,
8226 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
8227 ) -> Result<ElementHandlerOutput<'de>, Error> {
8228 let DeserializerOutput {
8229 artifact,
8230 event,
8231 allow_any,
8232 } = output;
8233 if artifact.is_none() {
8234 *self.state__ = match fallback.take() {
8235 None if values.is_none() => {
8236 *self.state__ = ComplexBaseTypeContentDeserializerState::Init__;
8237 return Ok(ElementHandlerOutput::from_event(event, allow_any));
8238 }
8239 None => ComplexBaseTypeContentDeserializerState::AttributeGroup(values, None),
8240 Some(ComplexBaseTypeContentDeserializerState::AttributeGroup(
8241 _,
8242 Some(deserializer),
8243 )) => ComplexBaseTypeContentDeserializerState::AttributeGroup(
8244 values,
8245 Some(deserializer),
8246 ),
8247 _ => unreachable!(),
8248 };
8249 return Ok(ElementHandlerOutput::break_(event, allow_any));
8250 }
8251 match fallback.take() {
8252 None => (),
8253 Some(ComplexBaseTypeContentDeserializerState::AttributeGroup(
8254 _,
8255 Some(deserializer),
8256 )) => {
8257 let data = deserializer.finish(helper)?;
8258 ComplexBaseTypeContentDeserializer::store_attribute_group(&mut values, data)?;
8259 }
8260 Some(_) => unreachable!(),
8261 }
8262 Ok(match artifact {
8263 DeserializerArtifact::None => unreachable!(),
8264 DeserializerArtifact::Data(data) => {
8265 ComplexBaseTypeContentDeserializer::store_attribute_group(&mut values, data)?;
8266 let data = ComplexBaseTypeContentDeserializer::finish_state(
8267 helper,
8268 ComplexBaseTypeContentDeserializerState::AttributeGroup(values, None),
8269 )?;
8270 *self.state__ = ComplexBaseTypeContentDeserializerState::Done__(data);
8271 ElementHandlerOutput::Break { event, allow_any }
8272 }
8273 DeserializerArtifact::Deserializer(deserializer) => {
8274 *self.state__ = ComplexBaseTypeContentDeserializerState::AttributeGroup(
8275 values,
8276 Some(deserializer),
8277 );
8278 ElementHandlerOutput::from_event_end(event, allow_any)
8279 }
8280 })
8281 }
8282 fn handle_any_attribute<'de>(
8283 &mut self,
8284 helper: &mut DeserializeHelper,
8285 mut values: Option<super::AnyAttribute>,
8286 output: DeserializerOutput<'de, super::AnyAttribute>,
8287 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
8288 ) -> Result<ElementHandlerOutput<'de>, Error> {
8289 let DeserializerOutput {
8290 artifact,
8291 event,
8292 allow_any,
8293 } = output;
8294 if artifact.is_none() {
8295 *self.state__ = match fallback.take() {
8296 None if values.is_none() => {
8297 *self.state__ = ComplexBaseTypeContentDeserializerState::Init__;
8298 return Ok(ElementHandlerOutput::from_event(event, allow_any));
8299 }
8300 None => ComplexBaseTypeContentDeserializerState::AnyAttribute(values, None),
8301 Some(ComplexBaseTypeContentDeserializerState::AnyAttribute(
8302 _,
8303 Some(deserializer),
8304 )) => ComplexBaseTypeContentDeserializerState::AnyAttribute(
8305 values,
8306 Some(deserializer),
8307 ),
8308 _ => unreachable!(),
8309 };
8310 return Ok(ElementHandlerOutput::break_(event, allow_any));
8311 }
8312 match fallback.take() {
8313 None => (),
8314 Some(ComplexBaseTypeContentDeserializerState::AnyAttribute(
8315 _,
8316 Some(deserializer),
8317 )) => {
8318 let data = deserializer.finish(helper)?;
8319 ComplexBaseTypeContentDeserializer::store_any_attribute(&mut values, data)?;
8320 }
8321 Some(_) => unreachable!(),
8322 }
8323 Ok(match artifact {
8324 DeserializerArtifact::None => unreachable!(),
8325 DeserializerArtifact::Data(data) => {
8326 ComplexBaseTypeContentDeserializer::store_any_attribute(&mut values, data)?;
8327 let data = ComplexBaseTypeContentDeserializer::finish_state(
8328 helper,
8329 ComplexBaseTypeContentDeserializerState::AnyAttribute(values, None),
8330 )?;
8331 *self.state__ = ComplexBaseTypeContentDeserializerState::Done__(data);
8332 ElementHandlerOutput::Break { event, allow_any }
8333 }
8334 DeserializerArtifact::Deserializer(deserializer) => {
8335 *self.state__ = ComplexBaseTypeContentDeserializerState::AnyAttribute(
8336 values,
8337 Some(deserializer),
8338 );
8339 ElementHandlerOutput::from_event_end(event, allow_any)
8340 }
8341 })
8342 }
8343 fn handle_assert<'de>(
8344 &mut self,
8345 helper: &mut DeserializeHelper,
8346 mut values: Option<super::AssertionType>,
8347 output: DeserializerOutput<'de, super::AssertionType>,
8348 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
8349 ) -> Result<ElementHandlerOutput<'de>, Error> {
8350 let DeserializerOutput {
8351 artifact,
8352 event,
8353 allow_any,
8354 } = output;
8355 if artifact.is_none() {
8356 *self.state__ = match fallback.take() {
8357 None if values.is_none() => {
8358 *self.state__ = ComplexBaseTypeContentDeserializerState::Init__;
8359 return Ok(ElementHandlerOutput::from_event(event, allow_any));
8360 }
8361 None => ComplexBaseTypeContentDeserializerState::Assert(values, None),
8362 Some(ComplexBaseTypeContentDeserializerState::Assert(
8363 _,
8364 Some(deserializer),
8365 )) => {
8366 ComplexBaseTypeContentDeserializerState::Assert(values, Some(deserializer))
8367 }
8368 _ => unreachable!(),
8369 };
8370 return Ok(ElementHandlerOutput::break_(event, allow_any));
8371 }
8372 match fallback.take() {
8373 None => (),
8374 Some(ComplexBaseTypeContentDeserializerState::Assert(_, Some(deserializer))) => {
8375 let data = deserializer.finish(helper)?;
8376 ComplexBaseTypeContentDeserializer::store_assert(&mut values, data)?;
8377 }
8378 Some(_) => unreachable!(),
8379 }
8380 Ok(match artifact {
8381 DeserializerArtifact::None => unreachable!(),
8382 DeserializerArtifact::Data(data) => {
8383 ComplexBaseTypeContentDeserializer::store_assert(&mut values, data)?;
8384 let data = ComplexBaseTypeContentDeserializer::finish_state(
8385 helper,
8386 ComplexBaseTypeContentDeserializerState::Assert(values, None),
8387 )?;
8388 *self.state__ = ComplexBaseTypeContentDeserializerState::Done__(data);
8389 ElementHandlerOutput::Break { event, allow_any }
8390 }
8391 DeserializerArtifact::Deserializer(deserializer) => {
8392 *self.state__ =
8393 ComplexBaseTypeContentDeserializerState::Assert(values, Some(deserializer));
8394 ElementHandlerOutput::from_event_end(event, allow_any)
8395 }
8396 })
8397 }
8398 }
8399 impl<'de> Deserializer<'de, super::ComplexBaseTypeContent>
8400 for Box<ComplexBaseTypeContentDeserializer>
8401 {
8402 fn init(
8403 helper: &mut DeserializeHelper,
8404 event: Event<'de>,
8405 ) -> DeserializerResult<'de, super::ComplexBaseTypeContent> {
8406 let deserializer = Box::new(ComplexBaseTypeContentDeserializer {
8407 state__: Box::new(ComplexBaseTypeContentDeserializerState::Init__),
8408 });
8409 let mut output = deserializer.next(helper, event)?;
8410 output.artifact = match output.artifact {
8411 DeserializerArtifact::Deserializer(x)
8412 if matches!(&*x.state__, ComplexBaseTypeContentDeserializerState::Init__) =>
8413 {
8414 DeserializerArtifact::None
8415 }
8416 artifact => artifact,
8417 };
8418 Ok(output)
8419 }
8420 fn next(
8421 mut self,
8422 helper: &mut DeserializeHelper,
8423 event: Event<'de>,
8424 ) -> DeserializerResult<'de, super::ComplexBaseTypeContent> {
8425 use ComplexBaseTypeContentDeserializerState as S;
8426 let mut event = event;
8427 let mut fallback = None;
8428 let (event, allow_any) = loop {
8429 let state = replace(&mut *self.state__, S::Unknown__);
8430 event = match (state, event) {
8431 (S::Unknown__, _) => unreachable!(),
8432 (S::Annotation(values, Some(deserializer)), event) => {
8433 let output = deserializer.next(helper, event)?;
8434 match self.handle_annotation(helper, values, output, &mut fallback)? {
8435 ElementHandlerOutput::Break { event, allow_any } => {
8436 break (event, allow_any)
8437 }
8438 ElementHandlerOutput::Continue { event, .. } => event,
8439 }
8440 }
8441 (S::SimpleContent(values, Some(deserializer)), event) => {
8442 let output = deserializer.next(helper, event)?;
8443 match self.handle_simple_content(helper, values, output, &mut fallback)? {
8444 ElementHandlerOutput::Break { event, allow_any } => {
8445 break (event, allow_any)
8446 }
8447 ElementHandlerOutput::Continue { event, .. } => event,
8448 }
8449 }
8450 (S::ComplexContent(values, Some(deserializer)), event) => {
8451 let output = deserializer.next(helper, event)?;
8452 match self.handle_complex_content(helper, values, output, &mut fallback)? {
8453 ElementHandlerOutput::Break { event, allow_any } => {
8454 break (event, allow_any)
8455 }
8456 ElementHandlerOutput::Continue { event, .. } => event,
8457 }
8458 }
8459 (S::OpenContent(values, Some(deserializer)), event) => {
8460 let output = deserializer.next(helper, event)?;
8461 match self.handle_open_content(helper, values, output, &mut fallback)? {
8462 ElementHandlerOutput::Break { event, allow_any } => {
8463 break (event, allow_any)
8464 }
8465 ElementHandlerOutput::Continue { event, .. } => event,
8466 }
8467 }
8468 (S::Group(values, Some(deserializer)), event) => {
8469 let output = deserializer.next(helper, event)?;
8470 match self.handle_group(helper, values, output, &mut fallback)? {
8471 ElementHandlerOutput::Break { event, allow_any } => {
8472 break (event, allow_any)
8473 }
8474 ElementHandlerOutput::Continue { event, .. } => event,
8475 }
8476 }
8477 (S::All(values, Some(deserializer)), event) => {
8478 let output = deserializer.next(helper, event)?;
8479 match self.handle_all(helper, values, output, &mut fallback)? {
8480 ElementHandlerOutput::Break { event, allow_any } => {
8481 break (event, allow_any)
8482 }
8483 ElementHandlerOutput::Continue { event, .. } => event,
8484 }
8485 }
8486 (S::Choice(values, Some(deserializer)), event) => {
8487 let output = deserializer.next(helper, event)?;
8488 match self.handle_choice(helper, values, output, &mut fallback)? {
8489 ElementHandlerOutput::Break { event, allow_any } => {
8490 break (event, allow_any)
8491 }
8492 ElementHandlerOutput::Continue { event, .. } => event,
8493 }
8494 }
8495 (S::Sequence(values, Some(deserializer)), event) => {
8496 let output = deserializer.next(helper, event)?;
8497 match self.handle_sequence(helper, values, output, &mut fallback)? {
8498 ElementHandlerOutput::Break { event, allow_any } => {
8499 break (event, allow_any)
8500 }
8501 ElementHandlerOutput::Continue { event, .. } => event,
8502 }
8503 }
8504 (S::Attribute(values, Some(deserializer)), event) => {
8505 let output = deserializer.next(helper, event)?;
8506 match self.handle_attribute(helper, values, output, &mut fallback)? {
8507 ElementHandlerOutput::Break { event, allow_any } => {
8508 break (event, allow_any)
8509 }
8510 ElementHandlerOutput::Continue { event, .. } => event,
8511 }
8512 }
8513 (S::AttributeGroup(values, Some(deserializer)), event) => {
8514 let output = deserializer.next(helper, event)?;
8515 match self.handle_attribute_group(helper, values, output, &mut fallback)? {
8516 ElementHandlerOutput::Break { event, allow_any } => {
8517 break (event, allow_any)
8518 }
8519 ElementHandlerOutput::Continue { event, .. } => event,
8520 }
8521 }
8522 (S::AnyAttribute(values, Some(deserializer)), event) => {
8523 let output = deserializer.next(helper, event)?;
8524 match self.handle_any_attribute(helper, values, output, &mut fallback)? {
8525 ElementHandlerOutput::Break { event, allow_any } => {
8526 break (event, allow_any)
8527 }
8528 ElementHandlerOutput::Continue { event, .. } => event,
8529 }
8530 }
8531 (S::Assert(values, Some(deserializer)), event) => {
8532 let output = deserializer.next(helper, event)?;
8533 match self.handle_assert(helper, values, output, &mut fallback)? {
8534 ElementHandlerOutput::Break { event, allow_any } => {
8535 break (event, allow_any)
8536 }
8537 ElementHandlerOutput::Continue { event, .. } => event,
8538 }
8539 }
8540 (state, event @ Event::End(_)) => {
8541 return Ok(DeserializerOutput {
8542 artifact: DeserializerArtifact::Data(
8543 ComplexBaseTypeContentDeserializer::finish_state(helper, state)?,
8544 ),
8545 event: DeserializerEvent::Continue(event),
8546 allow_any: false,
8547 });
8548 }
8549 (S::Init__, event) => match self.find_suitable(helper, event, &mut fallback)? {
8550 ElementHandlerOutput::Break { event, allow_any } => {
8551 break (event, allow_any)
8552 }
8553 ElementHandlerOutput::Continue { event, .. } => event,
8554 },
8555 (S::Annotation(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
8556 let output = helper.init_start_tag_deserializer(
8557 event,
8558 Some(&super::NS_XS),
8559 b"annotation",
8560 false,
8561 )?;
8562 match self.handle_annotation(helper, values, output, &mut fallback)? {
8563 ElementHandlerOutput::Break { event, allow_any } => {
8564 break (event, allow_any)
8565 }
8566 ElementHandlerOutput::Continue { event, .. } => event,
8567 }
8568 }
8569 (
8570 S::SimpleContent(values, None),
8571 event @ (Event::Start(_) | Event::Empty(_)),
8572 ) => {
8573 let output = helper.init_start_tag_deserializer(
8574 event,
8575 Some(&super::NS_XS),
8576 b"simpleContent",
8577 true,
8578 )?;
8579 match self.handle_simple_content(helper, values, output, &mut fallback)? {
8580 ElementHandlerOutput::Break { event, allow_any } => {
8581 break (event, allow_any)
8582 }
8583 ElementHandlerOutput::Continue { event, .. } => event,
8584 }
8585 }
8586 (
8587 S::ComplexContent(values, None),
8588 event @ (Event::Start(_) | Event::Empty(_)),
8589 ) => {
8590 let output = helper.init_start_tag_deserializer(
8591 event,
8592 Some(&super::NS_XS),
8593 b"complexContent",
8594 true,
8595 )?;
8596 match self.handle_complex_content(helper, values, output, &mut fallback)? {
8597 ElementHandlerOutput::Break { event, allow_any } => {
8598 break (event, allow_any)
8599 }
8600 ElementHandlerOutput::Continue { event, .. } => event,
8601 }
8602 }
8603 (S::OpenContent(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
8604 let output = helper.init_start_tag_deserializer(
8605 event,
8606 Some(&super::NS_XS),
8607 b"openContent",
8608 false,
8609 )?;
8610 match self.handle_open_content(helper, values, output, &mut fallback)? {
8611 ElementHandlerOutput::Break { event, allow_any } => {
8612 break (event, allow_any)
8613 }
8614 ElementHandlerOutput::Continue { event, .. } => event,
8615 }
8616 }
8617 (S::Group(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
8618 let output = helper.init_start_tag_deserializer(
8619 event,
8620 Some(&super::NS_XS),
8621 b"group",
8622 true,
8623 )?;
8624 match self.handle_group(helper, values, output, &mut fallback)? {
8625 ElementHandlerOutput::Break { event, allow_any } => {
8626 break (event, allow_any)
8627 }
8628 ElementHandlerOutput::Continue { event, .. } => event,
8629 }
8630 }
8631 (S::All(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
8632 let output = helper.init_start_tag_deserializer(
8633 event,
8634 Some(&super::NS_XS),
8635 b"all",
8636 true,
8637 )?;
8638 match self.handle_all(helper, values, output, &mut fallback)? {
8639 ElementHandlerOutput::Break { event, allow_any } => {
8640 break (event, allow_any)
8641 }
8642 ElementHandlerOutput::Continue { event, .. } => event,
8643 }
8644 }
8645 (S::Choice(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
8646 let output = helper.init_start_tag_deserializer(
8647 event,
8648 Some(&super::NS_XS),
8649 b"choice",
8650 true,
8651 )?;
8652 match self.handle_choice(helper, values, output, &mut fallback)? {
8653 ElementHandlerOutput::Break { event, allow_any } => {
8654 break (event, allow_any)
8655 }
8656 ElementHandlerOutput::Continue { event, .. } => event,
8657 }
8658 }
8659 (S::Sequence(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
8660 let output = helper.init_start_tag_deserializer(
8661 event,
8662 Some(&super::NS_XS),
8663 b"sequence",
8664 true,
8665 )?;
8666 match self.handle_sequence(helper, values, output, &mut fallback)? {
8667 ElementHandlerOutput::Break { event, allow_any } => {
8668 break (event, allow_any)
8669 }
8670 ElementHandlerOutput::Continue { event, .. } => event,
8671 }
8672 }
8673 (S::Attribute(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
8674 let output = helper.init_start_tag_deserializer(
8675 event,
8676 Some(&super::NS_XS),
8677 b"attribute",
8678 false,
8679 )?;
8680 match self.handle_attribute(helper, values, output, &mut fallback)? {
8681 ElementHandlerOutput::Break { event, allow_any } => {
8682 break (event, allow_any)
8683 }
8684 ElementHandlerOutput::Continue { event, .. } => event,
8685 }
8686 }
8687 (
8688 S::AttributeGroup(values, None),
8689 event @ (Event::Start(_) | Event::Empty(_)),
8690 ) => {
8691 let output = helper.init_start_tag_deserializer(
8692 event,
8693 Some(&super::NS_XS),
8694 b"attributeGroup",
8695 false,
8696 )?;
8697 match self.handle_attribute_group(helper, values, output, &mut fallback)? {
8698 ElementHandlerOutput::Break { event, allow_any } => {
8699 break (event, allow_any)
8700 }
8701 ElementHandlerOutput::Continue { event, .. } => event,
8702 }
8703 }
8704 (
8705 S::AnyAttribute(values, None),
8706 event @ (Event::Start(_) | Event::Empty(_)),
8707 ) => {
8708 let output = helper.init_start_tag_deserializer(
8709 event,
8710 Some(&super::NS_XS),
8711 b"anyAttribute",
8712 false,
8713 )?;
8714 match self.handle_any_attribute(helper, values, output, &mut fallback)? {
8715 ElementHandlerOutput::Break { event, allow_any } => {
8716 break (event, allow_any)
8717 }
8718 ElementHandlerOutput::Continue { event, .. } => event,
8719 }
8720 }
8721 (S::Assert(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
8722 let output = helper.init_start_tag_deserializer(
8723 event,
8724 Some(&super::NS_XS),
8725 b"assert",
8726 false,
8727 )?;
8728 match self.handle_assert(helper, values, output, &mut fallback)? {
8729 ElementHandlerOutput::Break { event, allow_any } => {
8730 break (event, allow_any)
8731 }
8732 ElementHandlerOutput::Continue { event, .. } => event,
8733 }
8734 }
8735 (s @ S::Done__(_), event) => {
8736 *self.state__ = s;
8737 break (DeserializerEvent::Continue(event), false);
8738 }
8739 (state, event) => {
8740 *self.state__ = state;
8741 break (DeserializerEvent::Break(event), false);
8742 }
8743 }
8744 };
8745 let artifact = if matches!(&*self.state__, S::Done__(_)) {
8746 DeserializerArtifact::Data(self.finish(helper)?)
8747 } else {
8748 DeserializerArtifact::Deserializer(self)
8749 };
8750 Ok(DeserializerOutput {
8751 artifact,
8752 event,
8753 allow_any,
8754 })
8755 }
8756 fn finish(
8757 self,
8758 helper: &mut DeserializeHelper,
8759 ) -> Result<super::ComplexBaseTypeContent, Error> {
8760 ComplexBaseTypeContentDeserializer::finish_state(helper, *self.state__)
8761 }
8762 }
8763 #[derive(Debug)]
8764 pub struct GroupTypeDeserializer {
8765 id: Option<String>,
8766 name: Option<String>,
8767 ref_: Option<QName>,
8768 min_occurs: usize,
8769 max_occurs: MaxOccurs,
8770 content: Vec<super::GroupTypeContent>,
8771 state__: Box<GroupTypeDeserializerState>,
8772 }
8773 #[derive(Debug)]
8774 enum GroupTypeDeserializerState {
8775 Init__,
8776 Next__,
8777 Content__(<super::GroupTypeContent as WithDeserializer>::Deserializer),
8778 Unknown__,
8779 }
8780 impl GroupTypeDeserializer {
8781 fn from_bytes_start(
8782 helper: &mut DeserializeHelper,
8783 bytes_start: &BytesStart<'_>,
8784 ) -> Result<Box<Self>, Error> {
8785 let mut id: Option<String> = None;
8786 let mut name: Option<String> = None;
8787 let mut ref_: Option<QName> = None;
8788 let mut min_occurs: Option<usize> = None;
8789 let mut max_occurs: Option<MaxOccurs> = None;
8790 for attrib in helper.filter_xmlns_attributes(bytes_start) {
8791 let attrib = attrib?;
8792 if matches!(
8793 helper.resolve_local_name(attrib.key, &super::NS_XS),
8794 Some(b"id")
8795 ) {
8796 helper.read_attrib(&mut id, b"id", &attrib.value)?;
8797 } else if matches!(
8798 helper.resolve_local_name(attrib.key, &super::NS_XS),
8799 Some(b"name")
8800 ) {
8801 helper.read_attrib(&mut name, b"name", &attrib.value)?;
8802 } else if matches!(
8803 helper.resolve_local_name(attrib.key, &super::NS_XS),
8804 Some(b"ref")
8805 ) {
8806 helper.read_attrib(&mut ref_, b"ref", &attrib.value)?;
8807 } else if matches!(
8808 helper.resolve_local_name(attrib.key, &super::NS_XS),
8809 Some(b"minOccurs")
8810 ) {
8811 helper.read_attrib(&mut min_occurs, b"minOccurs", &attrib.value)?;
8812 } else if matches!(
8813 helper.resolve_local_name(attrib.key, &super::NS_XS),
8814 Some(b"maxOccurs")
8815 ) {
8816 helper.read_attrib(&mut max_occurs, b"maxOccurs", &attrib.value)?;
8817 }
8818 }
8819 Ok(Box::new(Self {
8820 id: id,
8821 name: name,
8822 ref_: ref_,
8823 min_occurs: min_occurs.unwrap_or_else(super::GroupType::default_min_occurs),
8824 max_occurs: max_occurs.unwrap_or_else(super::GroupType::default_max_occurs),
8825 content: Vec::new(),
8826 state__: Box::new(GroupTypeDeserializerState::Init__),
8827 }))
8828 }
8829 fn finish_state(
8830 &mut self,
8831 helper: &mut DeserializeHelper,
8832 state: GroupTypeDeserializerState,
8833 ) -> Result<(), Error> {
8834 if let GroupTypeDeserializerState::Content__(deserializer) = state {
8835 self.store_content(deserializer.finish(helper)?)?;
8836 }
8837 Ok(())
8838 }
8839 fn store_content(&mut self, value: super::GroupTypeContent) -> Result<(), Error> {
8840 self.content.push(value);
8841 Ok(())
8842 }
8843 fn handle_content<'de>(
8844 &mut self,
8845 helper: &mut DeserializeHelper,
8846 output: DeserializerOutput<'de, super::GroupTypeContent>,
8847 fallback: &mut Option<GroupTypeDeserializerState>,
8848 ) -> Result<ElementHandlerOutput<'de>, Error> {
8849 let DeserializerOutput {
8850 artifact,
8851 event,
8852 allow_any,
8853 } = output;
8854 if artifact.is_none() {
8855 *self.state__ = fallback
8856 .take()
8857 .unwrap_or(GroupTypeDeserializerState::Next__);
8858 return Ok(ElementHandlerOutput::break_(event, allow_any));
8859 }
8860 if let Some(fallback) = fallback.take() {
8861 self.finish_state(helper, fallback)?;
8862 }
8863 Ok(match artifact {
8864 DeserializerArtifact::None => unreachable!(),
8865 DeserializerArtifact::Data(data) => {
8866 self.store_content(data)?;
8867 *self.state__ = GroupTypeDeserializerState::Next__;
8868 ElementHandlerOutput::from_event(event, allow_any)
8869 }
8870 DeserializerArtifact::Deserializer(deserializer) => {
8871 let ret = ElementHandlerOutput::from_event(event, allow_any);
8872 match &ret {
8873 ElementHandlerOutput::Break { .. } => {
8874 *self.state__ = GroupTypeDeserializerState::Content__(deserializer);
8875 }
8876 ElementHandlerOutput::Continue { .. } => {
8877 fallback
8878 .get_or_insert(GroupTypeDeserializerState::Content__(deserializer));
8879 *self.state__ = GroupTypeDeserializerState::Next__;
8880 }
8881 }
8882 ret
8883 }
8884 })
8885 }
8886 }
8887 impl<'de> Deserializer<'de, super::GroupType> for Box<GroupTypeDeserializer> {
8888 fn init(
8889 helper: &mut DeserializeHelper,
8890 event: Event<'de>,
8891 ) -> DeserializerResult<'de, super::GroupType> {
8892 helper
8893 .init_deserializer_from_start_event(event, GroupTypeDeserializer::from_bytes_start)
8894 }
8895 fn next(
8896 mut self,
8897 helper: &mut DeserializeHelper,
8898 event: Event<'de>,
8899 ) -> DeserializerResult<'de, super::GroupType> {
8900 use GroupTypeDeserializerState as S;
8901 let mut event = event;
8902 let mut fallback = None;
8903 let (event, allow_any) = loop {
8904 let state = replace(&mut *self.state__, S::Unknown__);
8905 event = match (state, event) {
8906 (S::Unknown__, _) => unreachable!(),
8907 (S::Content__(deserializer), event) => {
8908 let output = deserializer.next(helper, event)?;
8909 match self.handle_content(helper, output, &mut fallback)? {
8910 ElementHandlerOutput::Break { event, allow_any } => {
8911 break (event, allow_any)
8912 }
8913 ElementHandlerOutput::Continue { event, .. } => event,
8914 }
8915 }
8916 (_, Event::End(_)) => {
8917 return Ok(DeserializerOutput {
8918 artifact: DeserializerArtifact::Data(self.finish(helper)?),
8919 event: DeserializerEvent::None,
8920 allow_any: false,
8921 });
8922 }
8923 (state @ (S::Init__ | S::Next__), event) => {
8924 fallback.get_or_insert(state);
8925 let output =
8926 <super::GroupTypeContent as WithDeserializer>::Deserializer::init(
8927 helper, event,
8928 )?;
8929 match self.handle_content(helper, output, &mut fallback)? {
8930 ElementHandlerOutput::Break { event, allow_any } => {
8931 break (event, allow_any)
8932 }
8933 ElementHandlerOutput::Continue { event, .. } => event,
8934 }
8935 }
8936 }
8937 };
8938 let artifact = DeserializerArtifact::Deserializer(self);
8939 Ok(DeserializerOutput {
8940 artifact,
8941 event,
8942 allow_any,
8943 })
8944 }
8945 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::GroupType, Error> {
8946 let state = replace(&mut *self.state__, GroupTypeDeserializerState::Unknown__);
8947 self.finish_state(helper, state)?;
8948 Ok(super::GroupType {
8949 id: self.id,
8950 name: self.name,
8951 ref_: self.ref_,
8952 min_occurs: self.min_occurs,
8953 max_occurs: self.max_occurs,
8954 content: self.content,
8955 })
8956 }
8957 }
8958 #[derive(Debug)]
8959 pub struct GroupTypeContentDeserializer {
8960 state__: Box<GroupTypeContentDeserializerState>,
8961 }
8962 #[derive(Debug)]
8963 pub enum GroupTypeContentDeserializerState {
8964 Init__,
8965 Annotation(
8966 Option<super::Annotation>,
8967 Option<<super::Annotation as WithDeserializer>::Deserializer>,
8968 ),
8969 Element(
8970 Option<super::ElementType>,
8971 Option<<super::ElementType as WithDeserializer>::Deserializer>,
8972 ),
8973 Group(
8974 Option<super::GroupType>,
8975 Option<<super::GroupType as WithDeserializer>::Deserializer>,
8976 ),
8977 All(
8978 Option<super::GroupType>,
8979 Option<<super::GroupType as WithDeserializer>::Deserializer>,
8980 ),
8981 Choice(
8982 Option<super::GroupType>,
8983 Option<<super::GroupType as WithDeserializer>::Deserializer>,
8984 ),
8985 Sequence(
8986 Option<super::GroupType>,
8987 Option<<super::GroupType as WithDeserializer>::Deserializer>,
8988 ),
8989 Any(
8990 Option<super::Any>,
8991 Option<<super::Any as WithDeserializer>::Deserializer>,
8992 ),
8993 Done__(super::GroupTypeContent),
8994 Unknown__,
8995 }
8996 impl GroupTypeContentDeserializer {
8997 fn find_suitable<'de>(
8998 &mut self,
8999 helper: &mut DeserializeHelper,
9000 event: Event<'de>,
9001 fallback: &mut Option<GroupTypeContentDeserializerState>,
9002 ) -> Result<ElementHandlerOutput<'de>, Error> {
9003 if let Event::Start(x) | Event::Empty(x) = &event {
9004 if matches!(
9005 helper.resolve_local_name(x.name(), &super::NS_XS),
9006 Some(b"annotation")
9007 ) {
9008 let output =
9009 <super::Annotation as WithDeserializer>::Deserializer::init(helper, event)?;
9010 return self.handle_annotation(
9011 helper,
9012 Default::default(),
9013 output,
9014 &mut *fallback,
9015 );
9016 }
9017 if matches!(
9018 helper.resolve_local_name(x.name(), &super::NS_XS),
9019 Some(b"element")
9020 ) {
9021 let output = <super::ElementType as WithDeserializer>::Deserializer::init(
9022 helper, event,
9023 )?;
9024 return self.handle_element(helper, Default::default(), output, &mut *fallback);
9025 }
9026 if matches!(
9027 helper.resolve_local_name(x.name(), &super::NS_XS),
9028 Some(b"group")
9029 ) {
9030 let output =
9031 <super::GroupType as WithDeserializer>::Deserializer::init(helper, event)?;
9032 return self.handle_group(helper, Default::default(), output, &mut *fallback);
9033 }
9034 if matches!(
9035 helper.resolve_local_name(x.name(), &super::NS_XS),
9036 Some(b"all")
9037 ) {
9038 let output =
9039 <super::GroupType as WithDeserializer>::Deserializer::init(helper, event)?;
9040 return self.handle_all(helper, Default::default(), output, &mut *fallback);
9041 }
9042 if matches!(
9043 helper.resolve_local_name(x.name(), &super::NS_XS),
9044 Some(b"choice")
9045 ) {
9046 let output =
9047 <super::GroupType as WithDeserializer>::Deserializer::init(helper, event)?;
9048 return self.handle_choice(helper, Default::default(), output, &mut *fallback);
9049 }
9050 if matches!(
9051 helper.resolve_local_name(x.name(), &super::NS_XS),
9052 Some(b"sequence")
9053 ) {
9054 let output =
9055 <super::GroupType as WithDeserializer>::Deserializer::init(helper, event)?;
9056 return self.handle_sequence(
9057 helper,
9058 Default::default(),
9059 output,
9060 &mut *fallback,
9061 );
9062 }
9063 if matches!(
9064 helper.resolve_local_name(x.name(), &super::NS_XS),
9065 Some(b"any")
9066 ) {
9067 let output =
9068 <super::Any as WithDeserializer>::Deserializer::init(helper, event)?;
9069 return self.handle_any(helper, Default::default(), output, &mut *fallback);
9070 }
9071 }
9072 *self.state__ = fallback
9073 .take()
9074 .unwrap_or(GroupTypeContentDeserializerState::Init__);
9075 Ok(ElementHandlerOutput::return_to_parent(event, false))
9076 }
9077 fn finish_state(
9078 helper: &mut DeserializeHelper,
9079 state: GroupTypeContentDeserializerState,
9080 ) -> Result<super::GroupTypeContent, Error> {
9081 use GroupTypeContentDeserializerState as S;
9082 match state {
9083 S::Unknown__ => unreachable!(),
9084 S::Init__ => Err(ErrorKind::MissingContent.into()),
9085 S::Annotation(mut values, deserializer) => {
9086 if let Some(deserializer) = deserializer {
9087 let value = deserializer.finish(helper)?;
9088 GroupTypeContentDeserializer::store_annotation(&mut values, value)?;
9089 }
9090 Ok(super::GroupTypeContent::Annotation(values.ok_or_else(
9091 || ErrorKind::MissingElement("annotation".into()),
9092 )?))
9093 }
9094 S::Element(mut values, deserializer) => {
9095 if let Some(deserializer) = deserializer {
9096 let value = deserializer.finish(helper)?;
9097 GroupTypeContentDeserializer::store_element(&mut values, value)?;
9098 }
9099 Ok(super::GroupTypeContent::Element(values.ok_or_else(
9100 || ErrorKind::MissingElement("element".into()),
9101 )?))
9102 }
9103 S::Group(mut values, deserializer) => {
9104 if let Some(deserializer) = deserializer {
9105 let value = deserializer.finish(helper)?;
9106 GroupTypeContentDeserializer::store_group(&mut values, value)?;
9107 }
9108 Ok(super::GroupTypeContent::Group(values.ok_or_else(|| {
9109 ErrorKind::MissingElement("group".into())
9110 })?))
9111 }
9112 S::All(mut values, deserializer) => {
9113 if let Some(deserializer) = deserializer {
9114 let value = deserializer.finish(helper)?;
9115 GroupTypeContentDeserializer::store_all(&mut values, value)?;
9116 }
9117 Ok(super::GroupTypeContent::All(
9118 values.ok_or_else(|| ErrorKind::MissingElement("all".into()))?,
9119 ))
9120 }
9121 S::Choice(mut values, deserializer) => {
9122 if let Some(deserializer) = deserializer {
9123 let value = deserializer.finish(helper)?;
9124 GroupTypeContentDeserializer::store_choice(&mut values, value)?;
9125 }
9126 Ok(super::GroupTypeContent::Choice(values.ok_or_else(
9127 || ErrorKind::MissingElement("choice".into()),
9128 )?))
9129 }
9130 S::Sequence(mut values, deserializer) => {
9131 if let Some(deserializer) = deserializer {
9132 let value = deserializer.finish(helper)?;
9133 GroupTypeContentDeserializer::store_sequence(&mut values, value)?;
9134 }
9135 Ok(super::GroupTypeContent::Sequence(values.ok_or_else(
9136 || ErrorKind::MissingElement("sequence".into()),
9137 )?))
9138 }
9139 S::Any(mut values, deserializer) => {
9140 if let Some(deserializer) = deserializer {
9141 let value = deserializer.finish(helper)?;
9142 GroupTypeContentDeserializer::store_any(&mut values, value)?;
9143 }
9144 Ok(super::GroupTypeContent::Any(
9145 values.ok_or_else(|| ErrorKind::MissingElement("any".into()))?,
9146 ))
9147 }
9148 S::Done__(data) => Ok(data),
9149 }
9150 }
9151 fn store_annotation(
9152 values: &mut Option<super::Annotation>,
9153 value: super::Annotation,
9154 ) -> Result<(), Error> {
9155 if values.is_some() {
9156 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
9157 b"annotation",
9158 )))?;
9159 }
9160 *values = Some(value);
9161 Ok(())
9162 }
9163 fn store_element(
9164 values: &mut Option<super::ElementType>,
9165 value: super::ElementType,
9166 ) -> Result<(), Error> {
9167 if values.is_some() {
9168 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
9169 b"element",
9170 )))?;
9171 }
9172 *values = Some(value);
9173 Ok(())
9174 }
9175 fn store_group(
9176 values: &mut Option<super::GroupType>,
9177 value: super::GroupType,
9178 ) -> Result<(), Error> {
9179 if values.is_some() {
9180 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
9181 b"group",
9182 )))?;
9183 }
9184 *values = Some(value);
9185 Ok(())
9186 }
9187 fn store_all(
9188 values: &mut Option<super::GroupType>,
9189 value: super::GroupType,
9190 ) -> Result<(), Error> {
9191 if values.is_some() {
9192 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"all")))?;
9193 }
9194 *values = Some(value);
9195 Ok(())
9196 }
9197 fn store_choice(
9198 values: &mut Option<super::GroupType>,
9199 value: super::GroupType,
9200 ) -> Result<(), Error> {
9201 if values.is_some() {
9202 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
9203 b"choice",
9204 )))?;
9205 }
9206 *values = Some(value);
9207 Ok(())
9208 }
9209 fn store_sequence(
9210 values: &mut Option<super::GroupType>,
9211 value: super::GroupType,
9212 ) -> Result<(), Error> {
9213 if values.is_some() {
9214 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
9215 b"sequence",
9216 )))?;
9217 }
9218 *values = Some(value);
9219 Ok(())
9220 }
9221 fn store_any(values: &mut Option<super::Any>, value: super::Any) -> Result<(), Error> {
9222 if values.is_some() {
9223 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"any")))?;
9224 }
9225 *values = Some(value);
9226 Ok(())
9227 }
9228 fn handle_annotation<'de>(
9229 &mut self,
9230 helper: &mut DeserializeHelper,
9231 mut values: Option<super::Annotation>,
9232 output: DeserializerOutput<'de, super::Annotation>,
9233 fallback: &mut Option<GroupTypeContentDeserializerState>,
9234 ) -> Result<ElementHandlerOutput<'de>, Error> {
9235 let DeserializerOutput {
9236 artifact,
9237 event,
9238 allow_any,
9239 } = output;
9240 if artifact.is_none() {
9241 *self.state__ = match fallback.take() {
9242 None if values.is_none() => {
9243 *self.state__ = GroupTypeContentDeserializerState::Init__;
9244 return Ok(ElementHandlerOutput::from_event(event, allow_any));
9245 }
9246 None => GroupTypeContentDeserializerState::Annotation(values, None),
9247 Some(GroupTypeContentDeserializerState::Annotation(_, Some(deserializer))) => {
9248 GroupTypeContentDeserializerState::Annotation(values, Some(deserializer))
9249 }
9250 _ => unreachable!(),
9251 };
9252 return Ok(ElementHandlerOutput::break_(event, allow_any));
9253 }
9254 match fallback.take() {
9255 None => (),
9256 Some(GroupTypeContentDeserializerState::Annotation(_, Some(deserializer))) => {
9257 let data = deserializer.finish(helper)?;
9258 GroupTypeContentDeserializer::store_annotation(&mut values, data)?;
9259 }
9260 Some(_) => unreachable!(),
9261 }
9262 Ok(match artifact {
9263 DeserializerArtifact::None => unreachable!(),
9264 DeserializerArtifact::Data(data) => {
9265 GroupTypeContentDeserializer::store_annotation(&mut values, data)?;
9266 let data = GroupTypeContentDeserializer::finish_state(
9267 helper,
9268 GroupTypeContentDeserializerState::Annotation(values, None),
9269 )?;
9270 *self.state__ = GroupTypeContentDeserializerState::Done__(data);
9271 ElementHandlerOutput::Break { event, allow_any }
9272 }
9273 DeserializerArtifact::Deserializer(deserializer) => {
9274 *self.state__ =
9275 GroupTypeContentDeserializerState::Annotation(values, Some(deserializer));
9276 ElementHandlerOutput::from_event_end(event, allow_any)
9277 }
9278 })
9279 }
9280 fn handle_element<'de>(
9281 &mut self,
9282 helper: &mut DeserializeHelper,
9283 mut values: Option<super::ElementType>,
9284 output: DeserializerOutput<'de, super::ElementType>,
9285 fallback: &mut Option<GroupTypeContentDeserializerState>,
9286 ) -> Result<ElementHandlerOutput<'de>, Error> {
9287 let DeserializerOutput {
9288 artifact,
9289 event,
9290 allow_any,
9291 } = output;
9292 if artifact.is_none() {
9293 *self.state__ = match fallback.take() {
9294 None if values.is_none() => {
9295 *self.state__ = GroupTypeContentDeserializerState::Init__;
9296 return Ok(ElementHandlerOutput::from_event(event, allow_any));
9297 }
9298 None => GroupTypeContentDeserializerState::Element(values, None),
9299 Some(GroupTypeContentDeserializerState::Element(_, Some(deserializer))) => {
9300 GroupTypeContentDeserializerState::Element(values, Some(deserializer))
9301 }
9302 _ => unreachable!(),
9303 };
9304 return Ok(ElementHandlerOutput::break_(event, allow_any));
9305 }
9306 match fallback.take() {
9307 None => (),
9308 Some(GroupTypeContentDeserializerState::Element(_, Some(deserializer))) => {
9309 let data = deserializer.finish(helper)?;
9310 GroupTypeContentDeserializer::store_element(&mut values, data)?;
9311 }
9312 Some(_) => unreachable!(),
9313 }
9314 Ok(match artifact {
9315 DeserializerArtifact::None => unreachable!(),
9316 DeserializerArtifact::Data(data) => {
9317 GroupTypeContentDeserializer::store_element(&mut values, data)?;
9318 let data = GroupTypeContentDeserializer::finish_state(
9319 helper,
9320 GroupTypeContentDeserializerState::Element(values, None),
9321 )?;
9322 *self.state__ = GroupTypeContentDeserializerState::Done__(data);
9323 ElementHandlerOutput::Break { event, allow_any }
9324 }
9325 DeserializerArtifact::Deserializer(deserializer) => {
9326 *self.state__ =
9327 GroupTypeContentDeserializerState::Element(values, Some(deserializer));
9328 ElementHandlerOutput::from_event_end(event, allow_any)
9329 }
9330 })
9331 }
9332 fn handle_group<'de>(
9333 &mut self,
9334 helper: &mut DeserializeHelper,
9335 mut values: Option<super::GroupType>,
9336 output: DeserializerOutput<'de, super::GroupType>,
9337 fallback: &mut Option<GroupTypeContentDeserializerState>,
9338 ) -> Result<ElementHandlerOutput<'de>, Error> {
9339 let DeserializerOutput {
9340 artifact,
9341 event,
9342 allow_any,
9343 } = output;
9344 if artifact.is_none() {
9345 *self.state__ = match fallback.take() {
9346 None if values.is_none() => {
9347 *self.state__ = GroupTypeContentDeserializerState::Init__;
9348 return Ok(ElementHandlerOutput::from_event(event, allow_any));
9349 }
9350 None => GroupTypeContentDeserializerState::Group(values, None),
9351 Some(GroupTypeContentDeserializerState::Group(_, Some(deserializer))) => {
9352 GroupTypeContentDeserializerState::Group(values, Some(deserializer))
9353 }
9354 _ => unreachable!(),
9355 };
9356 return Ok(ElementHandlerOutput::break_(event, allow_any));
9357 }
9358 match fallback.take() {
9359 None => (),
9360 Some(GroupTypeContentDeserializerState::Group(_, Some(deserializer))) => {
9361 let data = deserializer.finish(helper)?;
9362 GroupTypeContentDeserializer::store_group(&mut values, data)?;
9363 }
9364 Some(_) => unreachable!(),
9365 }
9366 Ok(match artifact {
9367 DeserializerArtifact::None => unreachable!(),
9368 DeserializerArtifact::Data(data) => {
9369 GroupTypeContentDeserializer::store_group(&mut values, data)?;
9370 let data = GroupTypeContentDeserializer::finish_state(
9371 helper,
9372 GroupTypeContentDeserializerState::Group(values, None),
9373 )?;
9374 *self.state__ = GroupTypeContentDeserializerState::Done__(data);
9375 ElementHandlerOutput::Break { event, allow_any }
9376 }
9377 DeserializerArtifact::Deserializer(deserializer) => {
9378 *self.state__ =
9379 GroupTypeContentDeserializerState::Group(values, Some(deserializer));
9380 ElementHandlerOutput::from_event_end(event, allow_any)
9381 }
9382 })
9383 }
9384 fn handle_all<'de>(
9385 &mut self,
9386 helper: &mut DeserializeHelper,
9387 mut values: Option<super::GroupType>,
9388 output: DeserializerOutput<'de, super::GroupType>,
9389 fallback: &mut Option<GroupTypeContentDeserializerState>,
9390 ) -> Result<ElementHandlerOutput<'de>, Error> {
9391 let DeserializerOutput {
9392 artifact,
9393 event,
9394 allow_any,
9395 } = output;
9396 if artifact.is_none() {
9397 *self.state__ = match fallback.take() {
9398 None if values.is_none() => {
9399 *self.state__ = GroupTypeContentDeserializerState::Init__;
9400 return Ok(ElementHandlerOutput::from_event(event, allow_any));
9401 }
9402 None => GroupTypeContentDeserializerState::All(values, None),
9403 Some(GroupTypeContentDeserializerState::All(_, Some(deserializer))) => {
9404 GroupTypeContentDeserializerState::All(values, Some(deserializer))
9405 }
9406 _ => unreachable!(),
9407 };
9408 return Ok(ElementHandlerOutput::break_(event, allow_any));
9409 }
9410 match fallback.take() {
9411 None => (),
9412 Some(GroupTypeContentDeserializerState::All(_, Some(deserializer))) => {
9413 let data = deserializer.finish(helper)?;
9414 GroupTypeContentDeserializer::store_all(&mut values, data)?;
9415 }
9416 Some(_) => unreachable!(),
9417 }
9418 Ok(match artifact {
9419 DeserializerArtifact::None => unreachable!(),
9420 DeserializerArtifact::Data(data) => {
9421 GroupTypeContentDeserializer::store_all(&mut values, data)?;
9422 let data = GroupTypeContentDeserializer::finish_state(
9423 helper,
9424 GroupTypeContentDeserializerState::All(values, None),
9425 )?;
9426 *self.state__ = GroupTypeContentDeserializerState::Done__(data);
9427 ElementHandlerOutput::Break { event, allow_any }
9428 }
9429 DeserializerArtifact::Deserializer(deserializer) => {
9430 *self.state__ =
9431 GroupTypeContentDeserializerState::All(values, Some(deserializer));
9432 ElementHandlerOutput::from_event_end(event, allow_any)
9433 }
9434 })
9435 }
9436 fn handle_choice<'de>(
9437 &mut self,
9438 helper: &mut DeserializeHelper,
9439 mut values: Option<super::GroupType>,
9440 output: DeserializerOutput<'de, super::GroupType>,
9441 fallback: &mut Option<GroupTypeContentDeserializerState>,
9442 ) -> Result<ElementHandlerOutput<'de>, Error> {
9443 let DeserializerOutput {
9444 artifact,
9445 event,
9446 allow_any,
9447 } = output;
9448 if artifact.is_none() {
9449 *self.state__ = match fallback.take() {
9450 None if values.is_none() => {
9451 *self.state__ = GroupTypeContentDeserializerState::Init__;
9452 return Ok(ElementHandlerOutput::from_event(event, allow_any));
9453 }
9454 None => GroupTypeContentDeserializerState::Choice(values, None),
9455 Some(GroupTypeContentDeserializerState::Choice(_, Some(deserializer))) => {
9456 GroupTypeContentDeserializerState::Choice(values, Some(deserializer))
9457 }
9458 _ => unreachable!(),
9459 };
9460 return Ok(ElementHandlerOutput::break_(event, allow_any));
9461 }
9462 match fallback.take() {
9463 None => (),
9464 Some(GroupTypeContentDeserializerState::Choice(_, Some(deserializer))) => {
9465 let data = deserializer.finish(helper)?;
9466 GroupTypeContentDeserializer::store_choice(&mut values, data)?;
9467 }
9468 Some(_) => unreachable!(),
9469 }
9470 Ok(match artifact {
9471 DeserializerArtifact::None => unreachable!(),
9472 DeserializerArtifact::Data(data) => {
9473 GroupTypeContentDeserializer::store_choice(&mut values, data)?;
9474 let data = GroupTypeContentDeserializer::finish_state(
9475 helper,
9476 GroupTypeContentDeserializerState::Choice(values, None),
9477 )?;
9478 *self.state__ = GroupTypeContentDeserializerState::Done__(data);
9479 ElementHandlerOutput::Break { event, allow_any }
9480 }
9481 DeserializerArtifact::Deserializer(deserializer) => {
9482 *self.state__ =
9483 GroupTypeContentDeserializerState::Choice(values, Some(deserializer));
9484 ElementHandlerOutput::from_event_end(event, allow_any)
9485 }
9486 })
9487 }
9488 fn handle_sequence<'de>(
9489 &mut self,
9490 helper: &mut DeserializeHelper,
9491 mut values: Option<super::GroupType>,
9492 output: DeserializerOutput<'de, super::GroupType>,
9493 fallback: &mut Option<GroupTypeContentDeserializerState>,
9494 ) -> Result<ElementHandlerOutput<'de>, Error> {
9495 let DeserializerOutput {
9496 artifact,
9497 event,
9498 allow_any,
9499 } = output;
9500 if artifact.is_none() {
9501 *self.state__ = match fallback.take() {
9502 None if values.is_none() => {
9503 *self.state__ = GroupTypeContentDeserializerState::Init__;
9504 return Ok(ElementHandlerOutput::from_event(event, allow_any));
9505 }
9506 None => GroupTypeContentDeserializerState::Sequence(values, None),
9507 Some(GroupTypeContentDeserializerState::Sequence(_, Some(deserializer))) => {
9508 GroupTypeContentDeserializerState::Sequence(values, Some(deserializer))
9509 }
9510 _ => unreachable!(),
9511 };
9512 return Ok(ElementHandlerOutput::break_(event, allow_any));
9513 }
9514 match fallback.take() {
9515 None => (),
9516 Some(GroupTypeContentDeserializerState::Sequence(_, Some(deserializer))) => {
9517 let data = deserializer.finish(helper)?;
9518 GroupTypeContentDeserializer::store_sequence(&mut values, data)?;
9519 }
9520 Some(_) => unreachable!(),
9521 }
9522 Ok(match artifact {
9523 DeserializerArtifact::None => unreachable!(),
9524 DeserializerArtifact::Data(data) => {
9525 GroupTypeContentDeserializer::store_sequence(&mut values, data)?;
9526 let data = GroupTypeContentDeserializer::finish_state(
9527 helper,
9528 GroupTypeContentDeserializerState::Sequence(values, None),
9529 )?;
9530 *self.state__ = GroupTypeContentDeserializerState::Done__(data);
9531 ElementHandlerOutput::Break { event, allow_any }
9532 }
9533 DeserializerArtifact::Deserializer(deserializer) => {
9534 *self.state__ =
9535 GroupTypeContentDeserializerState::Sequence(values, Some(deserializer));
9536 ElementHandlerOutput::from_event_end(event, allow_any)
9537 }
9538 })
9539 }
9540 fn handle_any<'de>(
9541 &mut self,
9542 helper: &mut DeserializeHelper,
9543 mut values: Option<super::Any>,
9544 output: DeserializerOutput<'de, super::Any>,
9545 fallback: &mut Option<GroupTypeContentDeserializerState>,
9546 ) -> Result<ElementHandlerOutput<'de>, Error> {
9547 let DeserializerOutput {
9548 artifact,
9549 event,
9550 allow_any,
9551 } = output;
9552 if artifact.is_none() {
9553 *self.state__ = match fallback.take() {
9554 None if values.is_none() => {
9555 *self.state__ = GroupTypeContentDeserializerState::Init__;
9556 return Ok(ElementHandlerOutput::from_event(event, allow_any));
9557 }
9558 None => GroupTypeContentDeserializerState::Any(values, None),
9559 Some(GroupTypeContentDeserializerState::Any(_, Some(deserializer))) => {
9560 GroupTypeContentDeserializerState::Any(values, Some(deserializer))
9561 }
9562 _ => unreachable!(),
9563 };
9564 return Ok(ElementHandlerOutput::break_(event, allow_any));
9565 }
9566 match fallback.take() {
9567 None => (),
9568 Some(GroupTypeContentDeserializerState::Any(_, Some(deserializer))) => {
9569 let data = deserializer.finish(helper)?;
9570 GroupTypeContentDeserializer::store_any(&mut values, data)?;
9571 }
9572 Some(_) => unreachable!(),
9573 }
9574 Ok(match artifact {
9575 DeserializerArtifact::None => unreachable!(),
9576 DeserializerArtifact::Data(data) => {
9577 GroupTypeContentDeserializer::store_any(&mut values, data)?;
9578 let data = GroupTypeContentDeserializer::finish_state(
9579 helper,
9580 GroupTypeContentDeserializerState::Any(values, None),
9581 )?;
9582 *self.state__ = GroupTypeContentDeserializerState::Done__(data);
9583 ElementHandlerOutput::Break { event, allow_any }
9584 }
9585 DeserializerArtifact::Deserializer(deserializer) => {
9586 *self.state__ =
9587 GroupTypeContentDeserializerState::Any(values, Some(deserializer));
9588 ElementHandlerOutput::from_event_end(event, allow_any)
9589 }
9590 })
9591 }
9592 }
9593 impl<'de> Deserializer<'de, super::GroupTypeContent> for Box<GroupTypeContentDeserializer> {
9594 fn init(
9595 helper: &mut DeserializeHelper,
9596 event: Event<'de>,
9597 ) -> DeserializerResult<'de, super::GroupTypeContent> {
9598 let deserializer = Box::new(GroupTypeContentDeserializer {
9599 state__: Box::new(GroupTypeContentDeserializerState::Init__),
9600 });
9601 let mut output = deserializer.next(helper, event)?;
9602 output.artifact = match output.artifact {
9603 DeserializerArtifact::Deserializer(x)
9604 if matches!(&*x.state__, GroupTypeContentDeserializerState::Init__) =>
9605 {
9606 DeserializerArtifact::None
9607 }
9608 artifact => artifact,
9609 };
9610 Ok(output)
9611 }
9612 fn next(
9613 mut self,
9614 helper: &mut DeserializeHelper,
9615 event: Event<'de>,
9616 ) -> DeserializerResult<'de, super::GroupTypeContent> {
9617 use GroupTypeContentDeserializerState as S;
9618 let mut event = event;
9619 let mut fallback = None;
9620 let (event, allow_any) = loop {
9621 let state = replace(&mut *self.state__, S::Unknown__);
9622 event = match (state, event) {
9623 (S::Unknown__, _) => unreachable!(),
9624 (S::Annotation(values, Some(deserializer)), event) => {
9625 let output = deserializer.next(helper, event)?;
9626 match self.handle_annotation(helper, values, output, &mut fallback)? {
9627 ElementHandlerOutput::Break { event, allow_any } => {
9628 break (event, allow_any)
9629 }
9630 ElementHandlerOutput::Continue { event, .. } => event,
9631 }
9632 }
9633 (S::Element(values, Some(deserializer)), event) => {
9634 let output = deserializer.next(helper, event)?;
9635 match self.handle_element(helper, values, output, &mut fallback)? {
9636 ElementHandlerOutput::Break { event, allow_any } => {
9637 break (event, allow_any)
9638 }
9639 ElementHandlerOutput::Continue { event, .. } => event,
9640 }
9641 }
9642 (S::Group(values, Some(deserializer)), event) => {
9643 let output = deserializer.next(helper, event)?;
9644 match self.handle_group(helper, values, output, &mut fallback)? {
9645 ElementHandlerOutput::Break { event, allow_any } => {
9646 break (event, allow_any)
9647 }
9648 ElementHandlerOutput::Continue { event, .. } => event,
9649 }
9650 }
9651 (S::All(values, Some(deserializer)), event) => {
9652 let output = deserializer.next(helper, event)?;
9653 match self.handle_all(helper, values, output, &mut fallback)? {
9654 ElementHandlerOutput::Break { event, allow_any } => {
9655 break (event, allow_any)
9656 }
9657 ElementHandlerOutput::Continue { event, .. } => event,
9658 }
9659 }
9660 (S::Choice(values, Some(deserializer)), event) => {
9661 let output = deserializer.next(helper, event)?;
9662 match self.handle_choice(helper, values, output, &mut fallback)? {
9663 ElementHandlerOutput::Break { event, allow_any } => {
9664 break (event, allow_any)
9665 }
9666 ElementHandlerOutput::Continue { event, .. } => event,
9667 }
9668 }
9669 (S::Sequence(values, Some(deserializer)), event) => {
9670 let output = deserializer.next(helper, event)?;
9671 match self.handle_sequence(helper, values, output, &mut fallback)? {
9672 ElementHandlerOutput::Break { event, allow_any } => {
9673 break (event, allow_any)
9674 }
9675 ElementHandlerOutput::Continue { event, .. } => event,
9676 }
9677 }
9678 (S::Any(values, Some(deserializer)), event) => {
9679 let output = deserializer.next(helper, event)?;
9680 match self.handle_any(helper, values, output, &mut fallback)? {
9681 ElementHandlerOutput::Break { event, allow_any } => {
9682 break (event, allow_any)
9683 }
9684 ElementHandlerOutput::Continue { event, .. } => event,
9685 }
9686 }
9687 (state, event @ Event::End(_)) => {
9688 return Ok(DeserializerOutput {
9689 artifact: DeserializerArtifact::Data(
9690 GroupTypeContentDeserializer::finish_state(helper, state)?,
9691 ),
9692 event: DeserializerEvent::Continue(event),
9693 allow_any: false,
9694 });
9695 }
9696 (S::Init__, event) => match self.find_suitable(helper, event, &mut fallback)? {
9697 ElementHandlerOutput::Break { event, allow_any } => {
9698 break (event, allow_any)
9699 }
9700 ElementHandlerOutput::Continue { event, .. } => event,
9701 },
9702 (S::Annotation(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
9703 let output = helper.init_start_tag_deserializer(
9704 event,
9705 Some(&super::NS_XS),
9706 b"annotation",
9707 false,
9708 )?;
9709 match self.handle_annotation(helper, values, output, &mut fallback)? {
9710 ElementHandlerOutput::Break { event, allow_any } => {
9711 break (event, allow_any)
9712 }
9713 ElementHandlerOutput::Continue { event, .. } => event,
9714 }
9715 }
9716 (S::Element(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
9717 let output = helper.init_start_tag_deserializer(
9718 event,
9719 Some(&super::NS_XS),
9720 b"element",
9721 true,
9722 )?;
9723 match self.handle_element(helper, values, output, &mut fallback)? {
9724 ElementHandlerOutput::Break { event, allow_any } => {
9725 break (event, allow_any)
9726 }
9727 ElementHandlerOutput::Continue { event, .. } => event,
9728 }
9729 }
9730 (S::Group(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
9731 let output = helper.init_start_tag_deserializer(
9732 event,
9733 Some(&super::NS_XS),
9734 b"group",
9735 true,
9736 )?;
9737 match self.handle_group(helper, values, output, &mut fallback)? {
9738 ElementHandlerOutput::Break { event, allow_any } => {
9739 break (event, allow_any)
9740 }
9741 ElementHandlerOutput::Continue { event, .. } => event,
9742 }
9743 }
9744 (S::All(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
9745 let output = helper.init_start_tag_deserializer(
9746 event,
9747 Some(&super::NS_XS),
9748 b"all",
9749 true,
9750 )?;
9751 match self.handle_all(helper, values, output, &mut fallback)? {
9752 ElementHandlerOutput::Break { event, allow_any } => {
9753 break (event, allow_any)
9754 }
9755 ElementHandlerOutput::Continue { event, .. } => event,
9756 }
9757 }
9758 (S::Choice(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
9759 let output = helper.init_start_tag_deserializer(
9760 event,
9761 Some(&super::NS_XS),
9762 b"choice",
9763 true,
9764 )?;
9765 match self.handle_choice(helper, values, output, &mut fallback)? {
9766 ElementHandlerOutput::Break { event, allow_any } => {
9767 break (event, allow_any)
9768 }
9769 ElementHandlerOutput::Continue { event, .. } => event,
9770 }
9771 }
9772 (S::Sequence(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
9773 let output = helper.init_start_tag_deserializer(
9774 event,
9775 Some(&super::NS_XS),
9776 b"sequence",
9777 true,
9778 )?;
9779 match self.handle_sequence(helper, values, output, &mut fallback)? {
9780 ElementHandlerOutput::Break { event, allow_any } => {
9781 break (event, allow_any)
9782 }
9783 ElementHandlerOutput::Continue { event, .. } => event,
9784 }
9785 }
9786 (S::Any(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
9787 let output = helper.init_start_tag_deserializer(
9788 event,
9789 Some(&super::NS_XS),
9790 b"any",
9791 false,
9792 )?;
9793 match self.handle_any(helper, values, output, &mut fallback)? {
9794 ElementHandlerOutput::Break { event, allow_any } => {
9795 break (event, allow_any)
9796 }
9797 ElementHandlerOutput::Continue { event, .. } => event,
9798 }
9799 }
9800 (s @ S::Done__(_), event) => {
9801 *self.state__ = s;
9802 break (DeserializerEvent::Continue(event), false);
9803 }
9804 (state, event) => {
9805 *self.state__ = state;
9806 break (DeserializerEvent::Break(event), false);
9807 }
9808 }
9809 };
9810 let artifact = if matches!(&*self.state__, S::Done__(_)) {
9811 DeserializerArtifact::Data(self.finish(helper)?)
9812 } else {
9813 DeserializerArtifact::Deserializer(self)
9814 };
9815 Ok(DeserializerOutput {
9816 artifact,
9817 event,
9818 allow_any,
9819 })
9820 }
9821 fn finish(self, helper: &mut DeserializeHelper) -> Result<super::GroupTypeContent, Error> {
9822 GroupTypeContentDeserializer::finish_state(helper, *self.state__)
9823 }
9824 }
9825 #[derive(Debug)]
9826 pub struct AttributeGroupTypeDeserializer {
9827 id: Option<String>,
9828 name: Option<String>,
9829 ref_: Option<QName>,
9830 content: Vec<super::AttributeGroupTypeContent>,
9831 state__: Box<AttributeGroupTypeDeserializerState>,
9832 }
9833 #[derive(Debug)]
9834 enum AttributeGroupTypeDeserializerState {
9835 Init__,
9836 Next__,
9837 Content__(<super::AttributeGroupTypeContent as WithDeserializer>::Deserializer),
9838 Unknown__,
9839 }
9840 impl AttributeGroupTypeDeserializer {
9841 fn from_bytes_start(
9842 helper: &mut DeserializeHelper,
9843 bytes_start: &BytesStart<'_>,
9844 ) -> Result<Box<Self>, Error> {
9845 let mut id: Option<String> = None;
9846 let mut name: Option<String> = None;
9847 let mut ref_: Option<QName> = None;
9848 for attrib in helper.filter_xmlns_attributes(bytes_start) {
9849 let attrib = attrib?;
9850 if matches!(
9851 helper.resolve_local_name(attrib.key, &super::NS_XS),
9852 Some(b"id")
9853 ) {
9854 helper.read_attrib(&mut id, b"id", &attrib.value)?;
9855 } else if matches!(
9856 helper.resolve_local_name(attrib.key, &super::NS_XS),
9857 Some(b"name")
9858 ) {
9859 helper.read_attrib(&mut name, b"name", &attrib.value)?;
9860 } else if matches!(
9861 helper.resolve_local_name(attrib.key, &super::NS_XS),
9862 Some(b"ref")
9863 ) {
9864 helper.read_attrib(&mut ref_, b"ref", &attrib.value)?;
9865 }
9866 }
9867 Ok(Box::new(Self {
9868 id: id,
9869 name: name,
9870 ref_: ref_,
9871 content: Vec::new(),
9872 state__: Box::new(AttributeGroupTypeDeserializerState::Init__),
9873 }))
9874 }
9875 fn finish_state(
9876 &mut self,
9877 helper: &mut DeserializeHelper,
9878 state: AttributeGroupTypeDeserializerState,
9879 ) -> Result<(), Error> {
9880 if let AttributeGroupTypeDeserializerState::Content__(deserializer) = state {
9881 self.store_content(deserializer.finish(helper)?)?;
9882 }
9883 Ok(())
9884 }
9885 fn store_content(&mut self, value: super::AttributeGroupTypeContent) -> Result<(), Error> {
9886 self.content.push(value);
9887 Ok(())
9888 }
9889 fn handle_content<'de>(
9890 &mut self,
9891 helper: &mut DeserializeHelper,
9892 output: DeserializerOutput<'de, super::AttributeGroupTypeContent>,
9893 fallback: &mut Option<AttributeGroupTypeDeserializerState>,
9894 ) -> Result<ElementHandlerOutput<'de>, Error> {
9895 let DeserializerOutput {
9896 artifact,
9897 event,
9898 allow_any,
9899 } = output;
9900 if artifact.is_none() {
9901 *self.state__ = fallback
9902 .take()
9903 .unwrap_or(AttributeGroupTypeDeserializerState::Next__);
9904 return Ok(ElementHandlerOutput::break_(event, allow_any));
9905 }
9906 if let Some(fallback) = fallback.take() {
9907 self.finish_state(helper, fallback)?;
9908 }
9909 Ok(match artifact {
9910 DeserializerArtifact::None => unreachable!(),
9911 DeserializerArtifact::Data(data) => {
9912 self.store_content(data)?;
9913 *self.state__ = AttributeGroupTypeDeserializerState::Next__;
9914 ElementHandlerOutput::from_event(event, allow_any)
9915 }
9916 DeserializerArtifact::Deserializer(deserializer) => {
9917 let ret = ElementHandlerOutput::from_event(event, allow_any);
9918 match &ret {
9919 ElementHandlerOutput::Break { .. } => {
9920 *self.state__ =
9921 AttributeGroupTypeDeserializerState::Content__(deserializer);
9922 }
9923 ElementHandlerOutput::Continue { .. } => {
9924 fallback.get_or_insert(AttributeGroupTypeDeserializerState::Content__(
9925 deserializer,
9926 ));
9927 *self.state__ = AttributeGroupTypeDeserializerState::Next__;
9928 }
9929 }
9930 ret
9931 }
9932 })
9933 }
9934 }
9935 impl<'de> Deserializer<'de, super::AttributeGroupType> for Box<AttributeGroupTypeDeserializer> {
9936 fn init(
9937 helper: &mut DeserializeHelper,
9938 event: Event<'de>,
9939 ) -> DeserializerResult<'de, super::AttributeGroupType> {
9940 helper.init_deserializer_from_start_event(
9941 event,
9942 AttributeGroupTypeDeserializer::from_bytes_start,
9943 )
9944 }
9945 fn next(
9946 mut self,
9947 helper: &mut DeserializeHelper,
9948 event: Event<'de>,
9949 ) -> DeserializerResult<'de, super::AttributeGroupType> {
9950 use AttributeGroupTypeDeserializerState as S;
9951 let mut event = event;
9952 let mut fallback = None;
9953 let (event, allow_any) = loop {
9954 let state = replace(&mut *self.state__, S::Unknown__);
9955 event = match (state, event) {
9956 (S::Unknown__, _) => unreachable!(),
9957 (S::Content__(deserializer), event) => {
9958 let output = deserializer.next(helper, event)?;
9959 match self.handle_content(helper, output, &mut fallback)? {
9960 ElementHandlerOutput::Break { event, allow_any } => {
9961 break (event, allow_any)
9962 }
9963 ElementHandlerOutput::Continue { event, .. } => event,
9964 }
9965 }
9966 (_, Event::End(_)) => {
9967 return Ok(DeserializerOutput {
9968 artifact: DeserializerArtifact::Data(self.finish(helper)?),
9969 event: DeserializerEvent::None,
9970 allow_any: false,
9971 });
9972 }
9973 (state @ (S::Init__ | S::Next__), event) => {
9974 fallback.get_or_insert(state);
9975 let output = < super :: AttributeGroupTypeContent as WithDeserializer > :: Deserializer :: init (helper , event) ? ;
9976 match self.handle_content(helper, output, &mut fallback)? {
9977 ElementHandlerOutput::Break { event, allow_any } => {
9978 break (event, allow_any)
9979 }
9980 ElementHandlerOutput::Continue { event, .. } => event,
9981 }
9982 }
9983 }
9984 };
9985 let artifact = DeserializerArtifact::Deserializer(self);
9986 Ok(DeserializerOutput {
9987 artifact,
9988 event,
9989 allow_any,
9990 })
9991 }
9992 fn finish(
9993 mut self,
9994 helper: &mut DeserializeHelper,
9995 ) -> Result<super::AttributeGroupType, Error> {
9996 let state = replace(
9997 &mut *self.state__,
9998 AttributeGroupTypeDeserializerState::Unknown__,
9999 );
10000 self.finish_state(helper, state)?;
10001 Ok(super::AttributeGroupType {
10002 id: self.id,
10003 name: self.name,
10004 ref_: self.ref_,
10005 content: self.content,
10006 })
10007 }
10008 }
10009 #[derive(Debug)]
10010 pub struct AttributeGroupTypeContentDeserializer {
10011 state__: Box<AttributeGroupTypeContentDeserializerState>,
10012 }
10013 #[derive(Debug)]
10014 pub enum AttributeGroupTypeContentDeserializerState {
10015 Init__,
10016 Annotation(
10017 Option<super::Annotation>,
10018 Option<<super::Annotation as WithDeserializer>::Deserializer>,
10019 ),
10020 Attribute(
10021 Option<super::AttributeType>,
10022 Option<<super::AttributeType as WithDeserializer>::Deserializer>,
10023 ),
10024 AttributeGroup(
10025 Option<super::AttributeGroupType>,
10026 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
10027 ),
10028 AnyAttribute(
10029 Option<super::AnyAttribute>,
10030 Option<<super::AnyAttribute as WithDeserializer>::Deserializer>,
10031 ),
10032 Done__(super::AttributeGroupTypeContent),
10033 Unknown__,
10034 }
10035 impl AttributeGroupTypeContentDeserializer {
10036 fn find_suitable<'de>(
10037 &mut self,
10038 helper: &mut DeserializeHelper,
10039 event: Event<'de>,
10040 fallback: &mut Option<AttributeGroupTypeContentDeserializerState>,
10041 ) -> Result<ElementHandlerOutput<'de>, Error> {
10042 if let Event::Start(x) | Event::Empty(x) = &event {
10043 if matches!(
10044 helper.resolve_local_name(x.name(), &super::NS_XS),
10045 Some(b"annotation")
10046 ) {
10047 let output =
10048 <super::Annotation as WithDeserializer>::Deserializer::init(helper, event)?;
10049 return self.handle_annotation(
10050 helper,
10051 Default::default(),
10052 output,
10053 &mut *fallback,
10054 );
10055 }
10056 if matches!(
10057 helper.resolve_local_name(x.name(), &super::NS_XS),
10058 Some(b"attribute")
10059 ) {
10060 let output = <super::AttributeType as WithDeserializer>::Deserializer::init(
10061 helper, event,
10062 )?;
10063 return self.handle_attribute(
10064 helper,
10065 Default::default(),
10066 output,
10067 &mut *fallback,
10068 );
10069 }
10070 if matches!(
10071 helper.resolve_local_name(x.name(), &super::NS_XS),
10072 Some(b"attributeGroup")
10073 ) {
10074 let output =
10075 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
10076 helper, event,
10077 )?;
10078 return self.handle_attribute_group(
10079 helper,
10080 Default::default(),
10081 output,
10082 &mut *fallback,
10083 );
10084 }
10085 if matches!(
10086 helper.resolve_local_name(x.name(), &super::NS_XS),
10087 Some(b"anyAttribute")
10088 ) {
10089 let output = <super::AnyAttribute as WithDeserializer>::Deserializer::init(
10090 helper, event,
10091 )?;
10092 return self.handle_any_attribute(
10093 helper,
10094 Default::default(),
10095 output,
10096 &mut *fallback,
10097 );
10098 }
10099 }
10100 *self.state__ = fallback
10101 .take()
10102 .unwrap_or(AttributeGroupTypeContentDeserializerState::Init__);
10103 Ok(ElementHandlerOutput::return_to_parent(event, false))
10104 }
10105 fn finish_state(
10106 helper: &mut DeserializeHelper,
10107 state: AttributeGroupTypeContentDeserializerState,
10108 ) -> Result<super::AttributeGroupTypeContent, Error> {
10109 use AttributeGroupTypeContentDeserializerState as S;
10110 match state {
10111 S::Unknown__ => unreachable!(),
10112 S::Init__ => Err(ErrorKind::MissingContent.into()),
10113 S::Annotation(mut values, deserializer) => {
10114 if let Some(deserializer) = deserializer {
10115 let value = deserializer.finish(helper)?;
10116 AttributeGroupTypeContentDeserializer::store_annotation(
10117 &mut values,
10118 value,
10119 )?;
10120 }
10121 Ok(super::AttributeGroupTypeContent::Annotation(
10122 values.ok_or_else(|| ErrorKind::MissingElement("annotation".into()))?,
10123 ))
10124 }
10125 S::Attribute(mut values, deserializer) => {
10126 if let Some(deserializer) = deserializer {
10127 let value = deserializer.finish(helper)?;
10128 AttributeGroupTypeContentDeserializer::store_attribute(&mut values, value)?;
10129 }
10130 Ok(super::AttributeGroupTypeContent::Attribute(
10131 values.ok_or_else(|| ErrorKind::MissingElement("attribute".into()))?,
10132 ))
10133 }
10134 S::AttributeGroup(mut values, deserializer) => {
10135 if let Some(deserializer) = deserializer {
10136 let value = deserializer.finish(helper)?;
10137 AttributeGroupTypeContentDeserializer::store_attribute_group(
10138 &mut values,
10139 value,
10140 )?;
10141 }
10142 Ok(super::AttributeGroupTypeContent::AttributeGroup(
10143 values.ok_or_else(|| ErrorKind::MissingElement("attributeGroup".into()))?,
10144 ))
10145 }
10146 S::AnyAttribute(mut values, deserializer) => {
10147 if let Some(deserializer) = deserializer {
10148 let value = deserializer.finish(helper)?;
10149 AttributeGroupTypeContentDeserializer::store_any_attribute(
10150 &mut values,
10151 value,
10152 )?;
10153 }
10154 Ok(super::AttributeGroupTypeContent::AnyAttribute(
10155 values.ok_or_else(|| ErrorKind::MissingElement("anyAttribute".into()))?,
10156 ))
10157 }
10158 S::Done__(data) => Ok(data),
10159 }
10160 }
10161 fn store_annotation(
10162 values: &mut Option<super::Annotation>,
10163 value: super::Annotation,
10164 ) -> Result<(), Error> {
10165 if values.is_some() {
10166 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
10167 b"annotation",
10168 )))?;
10169 }
10170 *values = Some(value);
10171 Ok(())
10172 }
10173 fn store_attribute(
10174 values: &mut Option<super::AttributeType>,
10175 value: super::AttributeType,
10176 ) -> Result<(), Error> {
10177 if values.is_some() {
10178 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
10179 b"attribute",
10180 )))?;
10181 }
10182 *values = Some(value);
10183 Ok(())
10184 }
10185 fn store_attribute_group(
10186 values: &mut Option<super::AttributeGroupType>,
10187 value: super::AttributeGroupType,
10188 ) -> Result<(), Error> {
10189 if values.is_some() {
10190 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
10191 b"attributeGroup",
10192 )))?;
10193 }
10194 *values = Some(value);
10195 Ok(())
10196 }
10197 fn store_any_attribute(
10198 values: &mut Option<super::AnyAttribute>,
10199 value: super::AnyAttribute,
10200 ) -> Result<(), Error> {
10201 if values.is_some() {
10202 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
10203 b"anyAttribute",
10204 )))?;
10205 }
10206 *values = Some(value);
10207 Ok(())
10208 }
10209 fn handle_annotation<'de>(
10210 &mut self,
10211 helper: &mut DeserializeHelper,
10212 mut values: Option<super::Annotation>,
10213 output: DeserializerOutput<'de, super::Annotation>,
10214 fallback: &mut Option<AttributeGroupTypeContentDeserializerState>,
10215 ) -> Result<ElementHandlerOutput<'de>, Error> {
10216 let DeserializerOutput {
10217 artifact,
10218 event,
10219 allow_any,
10220 } = output;
10221 if artifact.is_none() {
10222 *self.state__ = match fallback.take() {
10223 None if values.is_none() => {
10224 *self.state__ = AttributeGroupTypeContentDeserializerState::Init__;
10225 return Ok(ElementHandlerOutput::from_event(event, allow_any));
10226 }
10227 None => AttributeGroupTypeContentDeserializerState::Annotation(values, None),
10228 Some(AttributeGroupTypeContentDeserializerState::Annotation(
10229 _,
10230 Some(deserializer),
10231 )) => AttributeGroupTypeContentDeserializerState::Annotation(
10232 values,
10233 Some(deserializer),
10234 ),
10235 _ => unreachable!(),
10236 };
10237 return Ok(ElementHandlerOutput::break_(event, allow_any));
10238 }
10239 match fallback.take() {
10240 None => (),
10241 Some(AttributeGroupTypeContentDeserializerState::Annotation(
10242 _,
10243 Some(deserializer),
10244 )) => {
10245 let data = deserializer.finish(helper)?;
10246 AttributeGroupTypeContentDeserializer::store_annotation(&mut values, data)?;
10247 }
10248 Some(_) => unreachable!(),
10249 }
10250 Ok(match artifact {
10251 DeserializerArtifact::None => unreachable!(),
10252 DeserializerArtifact::Data(data) => {
10253 AttributeGroupTypeContentDeserializer::store_annotation(&mut values, data)?;
10254 let data = AttributeGroupTypeContentDeserializer::finish_state(
10255 helper,
10256 AttributeGroupTypeContentDeserializerState::Annotation(values, None),
10257 )?;
10258 *self.state__ = AttributeGroupTypeContentDeserializerState::Done__(data);
10259 ElementHandlerOutput::Break { event, allow_any }
10260 }
10261 DeserializerArtifact::Deserializer(deserializer) => {
10262 *self.state__ = AttributeGroupTypeContentDeserializerState::Annotation(
10263 values,
10264 Some(deserializer),
10265 );
10266 ElementHandlerOutput::from_event_end(event, allow_any)
10267 }
10268 })
10269 }
10270 fn handle_attribute<'de>(
10271 &mut self,
10272 helper: &mut DeserializeHelper,
10273 mut values: Option<super::AttributeType>,
10274 output: DeserializerOutput<'de, super::AttributeType>,
10275 fallback: &mut Option<AttributeGroupTypeContentDeserializerState>,
10276 ) -> Result<ElementHandlerOutput<'de>, Error> {
10277 let DeserializerOutput {
10278 artifact,
10279 event,
10280 allow_any,
10281 } = output;
10282 if artifact.is_none() {
10283 *self.state__ = match fallback.take() {
10284 None if values.is_none() => {
10285 *self.state__ = AttributeGroupTypeContentDeserializerState::Init__;
10286 return Ok(ElementHandlerOutput::from_event(event, allow_any));
10287 }
10288 None => AttributeGroupTypeContentDeserializerState::Attribute(values, None),
10289 Some(AttributeGroupTypeContentDeserializerState::Attribute(
10290 _,
10291 Some(deserializer),
10292 )) => AttributeGroupTypeContentDeserializerState::Attribute(
10293 values,
10294 Some(deserializer),
10295 ),
10296 _ => unreachable!(),
10297 };
10298 return Ok(ElementHandlerOutput::break_(event, allow_any));
10299 }
10300 match fallback.take() {
10301 None => (),
10302 Some(AttributeGroupTypeContentDeserializerState::Attribute(
10303 _,
10304 Some(deserializer),
10305 )) => {
10306 let data = deserializer.finish(helper)?;
10307 AttributeGroupTypeContentDeserializer::store_attribute(&mut values, data)?;
10308 }
10309 Some(_) => unreachable!(),
10310 }
10311 Ok(match artifact {
10312 DeserializerArtifact::None => unreachable!(),
10313 DeserializerArtifact::Data(data) => {
10314 AttributeGroupTypeContentDeserializer::store_attribute(&mut values, data)?;
10315 let data = AttributeGroupTypeContentDeserializer::finish_state(
10316 helper,
10317 AttributeGroupTypeContentDeserializerState::Attribute(values, None),
10318 )?;
10319 *self.state__ = AttributeGroupTypeContentDeserializerState::Done__(data);
10320 ElementHandlerOutput::Break { event, allow_any }
10321 }
10322 DeserializerArtifact::Deserializer(deserializer) => {
10323 *self.state__ = AttributeGroupTypeContentDeserializerState::Attribute(
10324 values,
10325 Some(deserializer),
10326 );
10327 ElementHandlerOutput::from_event_end(event, allow_any)
10328 }
10329 })
10330 }
10331 fn handle_attribute_group<'de>(
10332 &mut self,
10333 helper: &mut DeserializeHelper,
10334 mut values: Option<super::AttributeGroupType>,
10335 output: DeserializerOutput<'de, super::AttributeGroupType>,
10336 fallback: &mut Option<AttributeGroupTypeContentDeserializerState>,
10337 ) -> Result<ElementHandlerOutput<'de>, Error> {
10338 let DeserializerOutput {
10339 artifact,
10340 event,
10341 allow_any,
10342 } = output;
10343 if artifact.is_none() {
10344 *self.state__ = match fallback.take() {
10345 None if values.is_none() => {
10346 *self.state__ = AttributeGroupTypeContentDeserializerState::Init__;
10347 return Ok(ElementHandlerOutput::from_event(event, allow_any));
10348 }
10349 None => {
10350 AttributeGroupTypeContentDeserializerState::AttributeGroup(values, None)
10351 }
10352 Some(AttributeGroupTypeContentDeserializerState::AttributeGroup(
10353 _,
10354 Some(deserializer),
10355 )) => AttributeGroupTypeContentDeserializerState::AttributeGroup(
10356 values,
10357 Some(deserializer),
10358 ),
10359 _ => unreachable!(),
10360 };
10361 return Ok(ElementHandlerOutput::break_(event, allow_any));
10362 }
10363 match fallback.take() {
10364 None => (),
10365 Some(AttributeGroupTypeContentDeserializerState::AttributeGroup(
10366 _,
10367 Some(deserializer),
10368 )) => {
10369 let data = deserializer.finish(helper)?;
10370 AttributeGroupTypeContentDeserializer::store_attribute_group(
10371 &mut values,
10372 data,
10373 )?;
10374 }
10375 Some(_) => unreachable!(),
10376 }
10377 Ok(match artifact {
10378 DeserializerArtifact::None => unreachable!(),
10379 DeserializerArtifact::Data(data) => {
10380 AttributeGroupTypeContentDeserializer::store_attribute_group(
10381 &mut values,
10382 data,
10383 )?;
10384 let data = AttributeGroupTypeContentDeserializer::finish_state(
10385 helper,
10386 AttributeGroupTypeContentDeserializerState::AttributeGroup(values, None),
10387 )?;
10388 *self.state__ = AttributeGroupTypeContentDeserializerState::Done__(data);
10389 ElementHandlerOutput::Break { event, allow_any }
10390 }
10391 DeserializerArtifact::Deserializer(deserializer) => {
10392 *self.state__ = AttributeGroupTypeContentDeserializerState::AttributeGroup(
10393 values,
10394 Some(deserializer),
10395 );
10396 ElementHandlerOutput::from_event_end(event, allow_any)
10397 }
10398 })
10399 }
10400 fn handle_any_attribute<'de>(
10401 &mut self,
10402 helper: &mut DeserializeHelper,
10403 mut values: Option<super::AnyAttribute>,
10404 output: DeserializerOutput<'de, super::AnyAttribute>,
10405 fallback: &mut Option<AttributeGroupTypeContentDeserializerState>,
10406 ) -> Result<ElementHandlerOutput<'de>, Error> {
10407 let DeserializerOutput {
10408 artifact,
10409 event,
10410 allow_any,
10411 } = output;
10412 if artifact.is_none() {
10413 *self.state__ = match fallback.take() {
10414 None if values.is_none() => {
10415 *self.state__ = AttributeGroupTypeContentDeserializerState::Init__;
10416 return Ok(ElementHandlerOutput::from_event(event, allow_any));
10417 }
10418 None => AttributeGroupTypeContentDeserializerState::AnyAttribute(values, None),
10419 Some(AttributeGroupTypeContentDeserializerState::AnyAttribute(
10420 _,
10421 Some(deserializer),
10422 )) => AttributeGroupTypeContentDeserializerState::AnyAttribute(
10423 values,
10424 Some(deserializer),
10425 ),
10426 _ => unreachable!(),
10427 };
10428 return Ok(ElementHandlerOutput::break_(event, allow_any));
10429 }
10430 match fallback.take() {
10431 None => (),
10432 Some(AttributeGroupTypeContentDeserializerState::AnyAttribute(
10433 _,
10434 Some(deserializer),
10435 )) => {
10436 let data = deserializer.finish(helper)?;
10437 AttributeGroupTypeContentDeserializer::store_any_attribute(&mut values, data)?;
10438 }
10439 Some(_) => unreachable!(),
10440 }
10441 Ok(match artifact {
10442 DeserializerArtifact::None => unreachable!(),
10443 DeserializerArtifact::Data(data) => {
10444 AttributeGroupTypeContentDeserializer::store_any_attribute(&mut values, data)?;
10445 let data = AttributeGroupTypeContentDeserializer::finish_state(
10446 helper,
10447 AttributeGroupTypeContentDeserializerState::AnyAttribute(values, None),
10448 )?;
10449 *self.state__ = AttributeGroupTypeContentDeserializerState::Done__(data);
10450 ElementHandlerOutput::Break { event, allow_any }
10451 }
10452 DeserializerArtifact::Deserializer(deserializer) => {
10453 *self.state__ = AttributeGroupTypeContentDeserializerState::AnyAttribute(
10454 values,
10455 Some(deserializer),
10456 );
10457 ElementHandlerOutput::from_event_end(event, allow_any)
10458 }
10459 })
10460 }
10461 }
10462 impl<'de> Deserializer<'de, super::AttributeGroupTypeContent>
10463 for Box<AttributeGroupTypeContentDeserializer>
10464 {
10465 fn init(
10466 helper: &mut DeserializeHelper,
10467 event: Event<'de>,
10468 ) -> DeserializerResult<'de, super::AttributeGroupTypeContent> {
10469 let deserializer = Box::new(AttributeGroupTypeContentDeserializer {
10470 state__: Box::new(AttributeGroupTypeContentDeserializerState::Init__),
10471 });
10472 let mut output = deserializer.next(helper, event)?;
10473 output.artifact = match output.artifact {
10474 DeserializerArtifact::Deserializer(x)
10475 if matches!(
10476 &*x.state__,
10477 AttributeGroupTypeContentDeserializerState::Init__
10478 ) =>
10479 {
10480 DeserializerArtifact::None
10481 }
10482 artifact => artifact,
10483 };
10484 Ok(output)
10485 }
10486 fn next(
10487 mut self,
10488 helper: &mut DeserializeHelper,
10489 event: Event<'de>,
10490 ) -> DeserializerResult<'de, super::AttributeGroupTypeContent> {
10491 use AttributeGroupTypeContentDeserializerState as S;
10492 let mut event = event;
10493 let mut fallback = None;
10494 let (event, allow_any) = loop {
10495 let state = replace(&mut *self.state__, S::Unknown__);
10496 event = match (state, event) {
10497 (S::Unknown__, _) => unreachable!(),
10498 (S::Annotation(values, Some(deserializer)), event) => {
10499 let output = deserializer.next(helper, event)?;
10500 match self.handle_annotation(helper, values, output, &mut fallback)? {
10501 ElementHandlerOutput::Break { event, allow_any } => {
10502 break (event, allow_any)
10503 }
10504 ElementHandlerOutput::Continue { event, .. } => event,
10505 }
10506 }
10507 (S::Attribute(values, Some(deserializer)), event) => {
10508 let output = deserializer.next(helper, event)?;
10509 match self.handle_attribute(helper, values, output, &mut fallback)? {
10510 ElementHandlerOutput::Break { event, allow_any } => {
10511 break (event, allow_any)
10512 }
10513 ElementHandlerOutput::Continue { event, .. } => event,
10514 }
10515 }
10516 (S::AttributeGroup(values, Some(deserializer)), event) => {
10517 let output = deserializer.next(helper, event)?;
10518 match self.handle_attribute_group(helper, values, output, &mut fallback)? {
10519 ElementHandlerOutput::Break { event, allow_any } => {
10520 break (event, allow_any)
10521 }
10522 ElementHandlerOutput::Continue { event, .. } => event,
10523 }
10524 }
10525 (S::AnyAttribute(values, Some(deserializer)), event) => {
10526 let output = deserializer.next(helper, event)?;
10527 match self.handle_any_attribute(helper, values, output, &mut fallback)? {
10528 ElementHandlerOutput::Break { event, allow_any } => {
10529 break (event, allow_any)
10530 }
10531 ElementHandlerOutput::Continue { event, .. } => event,
10532 }
10533 }
10534 (state, event @ Event::End(_)) => {
10535 return Ok(DeserializerOutput {
10536 artifact: DeserializerArtifact::Data(
10537 AttributeGroupTypeContentDeserializer::finish_state(helper, state)?,
10538 ),
10539 event: DeserializerEvent::Continue(event),
10540 allow_any: false,
10541 });
10542 }
10543 (S::Init__, event) => match self.find_suitable(helper, event, &mut fallback)? {
10544 ElementHandlerOutput::Break { event, allow_any } => {
10545 break (event, allow_any)
10546 }
10547 ElementHandlerOutput::Continue { event, .. } => event,
10548 },
10549 (S::Annotation(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
10550 let output = helper.init_start_tag_deserializer(
10551 event,
10552 Some(&super::NS_XS),
10553 b"annotation",
10554 false,
10555 )?;
10556 match self.handle_annotation(helper, values, output, &mut fallback)? {
10557 ElementHandlerOutput::Break { event, allow_any } => {
10558 break (event, allow_any)
10559 }
10560 ElementHandlerOutput::Continue { event, .. } => event,
10561 }
10562 }
10563 (S::Attribute(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
10564 let output = helper.init_start_tag_deserializer(
10565 event,
10566 Some(&super::NS_XS),
10567 b"attribute",
10568 false,
10569 )?;
10570 match self.handle_attribute(helper, values, output, &mut fallback)? {
10571 ElementHandlerOutput::Break { event, allow_any } => {
10572 break (event, allow_any)
10573 }
10574 ElementHandlerOutput::Continue { event, .. } => event,
10575 }
10576 }
10577 (
10578 S::AttributeGroup(values, None),
10579 event @ (Event::Start(_) | Event::Empty(_)),
10580 ) => {
10581 let output = helper.init_start_tag_deserializer(
10582 event,
10583 Some(&super::NS_XS),
10584 b"attributeGroup",
10585 false,
10586 )?;
10587 match self.handle_attribute_group(helper, values, output, &mut fallback)? {
10588 ElementHandlerOutput::Break { event, allow_any } => {
10589 break (event, allow_any)
10590 }
10591 ElementHandlerOutput::Continue { event, .. } => event,
10592 }
10593 }
10594 (
10595 S::AnyAttribute(values, None),
10596 event @ (Event::Start(_) | Event::Empty(_)),
10597 ) => {
10598 let output = helper.init_start_tag_deserializer(
10599 event,
10600 Some(&super::NS_XS),
10601 b"anyAttribute",
10602 false,
10603 )?;
10604 match self.handle_any_attribute(helper, values, output, &mut fallback)? {
10605 ElementHandlerOutput::Break { event, allow_any } => {
10606 break (event, allow_any)
10607 }
10608 ElementHandlerOutput::Continue { event, .. } => event,
10609 }
10610 }
10611 (s @ S::Done__(_), event) => {
10612 *self.state__ = s;
10613 break (DeserializerEvent::Continue(event), false);
10614 }
10615 (state, event) => {
10616 *self.state__ = state;
10617 break (DeserializerEvent::Break(event), false);
10618 }
10619 }
10620 };
10621 let artifact = if matches!(&*self.state__, S::Done__(_)) {
10622 DeserializerArtifact::Data(self.finish(helper)?)
10623 } else {
10624 DeserializerArtifact::Deserializer(self)
10625 };
10626 Ok(DeserializerOutput {
10627 artifact,
10628 event,
10629 allow_any,
10630 })
10631 }
10632 fn finish(
10633 self,
10634 helper: &mut DeserializeHelper,
10635 ) -> Result<super::AttributeGroupTypeContent, Error> {
10636 AttributeGroupTypeContentDeserializer::finish_state(helper, *self.state__)
10637 }
10638 }
10639 #[derive(Debug)]
10640 pub struct ElementTypeDeserializer {
10641 id: Option<String>,
10642 name: Option<String>,
10643 ref_: Option<QName>,
10644 type_: Option<QName>,
10645 substitution_group: Option<super::QNameList>,
10646 min_occurs: usize,
10647 max_occurs: MaxOccurs,
10648 default: Option<String>,
10649 fixed: Option<String>,
10650 nillable: Option<bool>,
10651 abstract_: bool,
10652 final_: Option<super::DerivationSetType>,
10653 block: Option<super::BlockSetType>,
10654 form: Option<super::FormChoiceType>,
10655 target_namespace: Option<String>,
10656 content: Vec<super::ElementTypeContent>,
10657 state__: Box<ElementTypeDeserializerState>,
10658 }
10659 #[derive(Debug)]
10660 enum ElementTypeDeserializerState {
10661 Init__,
10662 Next__,
10663 Content__(<super::ElementTypeContent as WithDeserializer>::Deserializer),
10664 Unknown__,
10665 }
10666 impl ElementTypeDeserializer {
10667 fn from_bytes_start(
10668 helper: &mut DeserializeHelper,
10669 bytes_start: &BytesStart<'_>,
10670 ) -> Result<Box<Self>, Error> {
10671 let mut id: Option<String> = None;
10672 let mut name: Option<String> = None;
10673 let mut ref_: Option<QName> = None;
10674 let mut type_: Option<QName> = None;
10675 let mut substitution_group: Option<super::QNameList> = None;
10676 let mut min_occurs: Option<usize> = None;
10677 let mut max_occurs: Option<MaxOccurs> = None;
10678 let mut default: Option<String> = None;
10679 let mut fixed: Option<String> = None;
10680 let mut nillable: Option<bool> = None;
10681 let mut abstract_: Option<bool> = None;
10682 let mut final_: Option<super::DerivationSetType> = None;
10683 let mut block: Option<super::BlockSetType> = None;
10684 let mut form: Option<super::FormChoiceType> = None;
10685 let mut target_namespace: Option<String> = None;
10686 for attrib in helper.filter_xmlns_attributes(bytes_start) {
10687 let attrib = attrib?;
10688 if matches!(
10689 helper.resolve_local_name(attrib.key, &super::NS_XS),
10690 Some(b"id")
10691 ) {
10692 helper.read_attrib(&mut id, b"id", &attrib.value)?;
10693 } else if matches!(
10694 helper.resolve_local_name(attrib.key, &super::NS_XS),
10695 Some(b"name")
10696 ) {
10697 helper.read_attrib(&mut name, b"name", &attrib.value)?;
10698 } else if matches!(
10699 helper.resolve_local_name(attrib.key, &super::NS_XS),
10700 Some(b"ref")
10701 ) {
10702 helper.read_attrib(&mut ref_, b"ref", &attrib.value)?;
10703 } else if matches!(
10704 helper.resolve_local_name(attrib.key, &super::NS_XS),
10705 Some(b"type")
10706 ) {
10707 helper.read_attrib(&mut type_, b"type", &attrib.value)?;
10708 } else if matches!(
10709 helper.resolve_local_name(attrib.key, &super::NS_XS),
10710 Some(b"substitutionGroup")
10711 ) {
10712 helper.read_attrib(
10713 &mut substitution_group,
10714 b"substitutionGroup",
10715 &attrib.value,
10716 )?;
10717 } else if matches!(
10718 helper.resolve_local_name(attrib.key, &super::NS_XS),
10719 Some(b"minOccurs")
10720 ) {
10721 helper.read_attrib(&mut min_occurs, b"minOccurs", &attrib.value)?;
10722 } else if matches!(
10723 helper.resolve_local_name(attrib.key, &super::NS_XS),
10724 Some(b"maxOccurs")
10725 ) {
10726 helper.read_attrib(&mut max_occurs, b"maxOccurs", &attrib.value)?;
10727 } else if matches!(
10728 helper.resolve_local_name(attrib.key, &super::NS_XS),
10729 Some(b"default")
10730 ) {
10731 helper.read_attrib(&mut default, b"default", &attrib.value)?;
10732 } else if matches!(
10733 helper.resolve_local_name(attrib.key, &super::NS_XS),
10734 Some(b"fixed")
10735 ) {
10736 helper.read_attrib(&mut fixed, b"fixed", &attrib.value)?;
10737 } else if matches!(
10738 helper.resolve_local_name(attrib.key, &super::NS_XS),
10739 Some(b"nillable")
10740 ) {
10741 helper.read_attrib(&mut nillable, b"nillable", &attrib.value)?;
10742 } else if matches!(
10743 helper.resolve_local_name(attrib.key, &super::NS_XS),
10744 Some(b"abstract")
10745 ) {
10746 helper.read_attrib(&mut abstract_, b"abstract", &attrib.value)?;
10747 } else if matches!(
10748 helper.resolve_local_name(attrib.key, &super::NS_XS),
10749 Some(b"final")
10750 ) {
10751 helper.read_attrib(&mut final_, b"final", &attrib.value)?;
10752 } else if matches!(
10753 helper.resolve_local_name(attrib.key, &super::NS_XS),
10754 Some(b"block")
10755 ) {
10756 helper.read_attrib(&mut block, b"block", &attrib.value)?;
10757 } else if matches!(
10758 helper.resolve_local_name(attrib.key, &super::NS_XS),
10759 Some(b"form")
10760 ) {
10761 helper.read_attrib(&mut form, b"form", &attrib.value)?;
10762 } else if matches!(
10763 helper.resolve_local_name(attrib.key, &super::NS_XS),
10764 Some(b"targetNamespace")
10765 ) {
10766 helper.read_attrib(&mut target_namespace, b"targetNamespace", &attrib.value)?;
10767 }
10768 }
10769 Ok(Box::new(Self {
10770 id: id,
10771 name: name,
10772 ref_: ref_,
10773 type_: type_,
10774 substitution_group: substitution_group,
10775 min_occurs: min_occurs.unwrap_or_else(super::ElementType::default_min_occurs),
10776 max_occurs: max_occurs.unwrap_or_else(super::ElementType::default_max_occurs),
10777 default: default,
10778 fixed: fixed,
10779 nillable: nillable,
10780 abstract_: abstract_.unwrap_or_else(super::ElementType::default_abstract_),
10781 final_: final_,
10782 block: block,
10783 form: form,
10784 target_namespace: target_namespace,
10785 content: Vec::new(),
10786 state__: Box::new(ElementTypeDeserializerState::Init__),
10787 }))
10788 }
10789 fn finish_state(
10790 &mut self,
10791 helper: &mut DeserializeHelper,
10792 state: ElementTypeDeserializerState,
10793 ) -> Result<(), Error> {
10794 if let ElementTypeDeserializerState::Content__(deserializer) = state {
10795 self.store_content(deserializer.finish(helper)?)?;
10796 }
10797 Ok(())
10798 }
10799 fn store_content(&mut self, value: super::ElementTypeContent) -> Result<(), Error> {
10800 self.content.push(value);
10801 Ok(())
10802 }
10803 fn handle_content<'de>(
10804 &mut self,
10805 helper: &mut DeserializeHelper,
10806 output: DeserializerOutput<'de, super::ElementTypeContent>,
10807 fallback: &mut Option<ElementTypeDeserializerState>,
10808 ) -> Result<ElementHandlerOutput<'de>, Error> {
10809 let DeserializerOutput {
10810 artifact,
10811 event,
10812 allow_any,
10813 } = output;
10814 if artifact.is_none() {
10815 *self.state__ = fallback
10816 .take()
10817 .unwrap_or(ElementTypeDeserializerState::Next__);
10818 return Ok(ElementHandlerOutput::break_(event, allow_any));
10819 }
10820 if let Some(fallback) = fallback.take() {
10821 self.finish_state(helper, fallback)?;
10822 }
10823 Ok(match artifact {
10824 DeserializerArtifact::None => unreachable!(),
10825 DeserializerArtifact::Data(data) => {
10826 self.store_content(data)?;
10827 *self.state__ = ElementTypeDeserializerState::Next__;
10828 ElementHandlerOutput::from_event(event, allow_any)
10829 }
10830 DeserializerArtifact::Deserializer(deserializer) => {
10831 let ret = ElementHandlerOutput::from_event(event, allow_any);
10832 match &ret {
10833 ElementHandlerOutput::Break { .. } => {
10834 *self.state__ = ElementTypeDeserializerState::Content__(deserializer);
10835 }
10836 ElementHandlerOutput::Continue { .. } => {
10837 fallback.get_or_insert(ElementTypeDeserializerState::Content__(
10838 deserializer,
10839 ));
10840 *self.state__ = ElementTypeDeserializerState::Next__;
10841 }
10842 }
10843 ret
10844 }
10845 })
10846 }
10847 }
10848 impl<'de> Deserializer<'de, super::ElementType> for Box<ElementTypeDeserializer> {
10849 fn init(
10850 helper: &mut DeserializeHelper,
10851 event: Event<'de>,
10852 ) -> DeserializerResult<'de, super::ElementType> {
10853 helper.init_deserializer_from_start_event(
10854 event,
10855 ElementTypeDeserializer::from_bytes_start,
10856 )
10857 }
10858 fn next(
10859 mut self,
10860 helper: &mut DeserializeHelper,
10861 event: Event<'de>,
10862 ) -> DeserializerResult<'de, super::ElementType> {
10863 use ElementTypeDeserializerState as S;
10864 let mut event = event;
10865 let mut fallback = None;
10866 let (event, allow_any) = loop {
10867 let state = replace(&mut *self.state__, S::Unknown__);
10868 event = match (state, event) {
10869 (S::Unknown__, _) => unreachable!(),
10870 (S::Content__(deserializer), event) => {
10871 let output = deserializer.next(helper, event)?;
10872 match self.handle_content(helper, output, &mut fallback)? {
10873 ElementHandlerOutput::Break { event, allow_any } => {
10874 break (event, allow_any)
10875 }
10876 ElementHandlerOutput::Continue { event, .. } => event,
10877 }
10878 }
10879 (_, Event::End(_)) => {
10880 return Ok(DeserializerOutput {
10881 artifact: DeserializerArtifact::Data(self.finish(helper)?),
10882 event: DeserializerEvent::None,
10883 allow_any: false,
10884 });
10885 }
10886 (state @ (S::Init__ | S::Next__), event) => {
10887 fallback.get_or_insert(state);
10888 let output =
10889 <super::ElementTypeContent as WithDeserializer>::Deserializer::init(
10890 helper, event,
10891 )?;
10892 match self.handle_content(helper, output, &mut fallback)? {
10893 ElementHandlerOutput::Break { event, allow_any } => {
10894 break (event, allow_any)
10895 }
10896 ElementHandlerOutput::Continue { event, .. } => event,
10897 }
10898 }
10899 }
10900 };
10901 let artifact = DeserializerArtifact::Deserializer(self);
10902 Ok(DeserializerOutput {
10903 artifact,
10904 event,
10905 allow_any,
10906 })
10907 }
10908 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::ElementType, Error> {
10909 let state = replace(&mut *self.state__, ElementTypeDeserializerState::Unknown__);
10910 self.finish_state(helper, state)?;
10911 Ok(super::ElementType {
10912 id: self.id,
10913 name: self.name,
10914 ref_: self.ref_,
10915 type_: self.type_,
10916 substitution_group: self.substitution_group,
10917 min_occurs: self.min_occurs,
10918 max_occurs: self.max_occurs,
10919 default: self.default,
10920 fixed: self.fixed,
10921 nillable: self.nillable,
10922 abstract_: self.abstract_,
10923 final_: self.final_,
10924 block: self.block,
10925 form: self.form,
10926 target_namespace: self.target_namespace,
10927 content: self.content,
10928 })
10929 }
10930 }
10931 #[derive(Debug)]
10932 pub struct ElementTypeContentDeserializer {
10933 state__: Box<ElementTypeContentDeserializerState>,
10934 }
10935 #[derive(Debug)]
10936 pub enum ElementTypeContentDeserializerState {
10937 Init__,
10938 Annotation(
10939 Option<super::Annotation>,
10940 Option<<super::Annotation as WithDeserializer>::Deserializer>,
10941 ),
10942 SimpleType(
10943 Option<super::SimpleBaseType>,
10944 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
10945 ),
10946 ComplexType(
10947 Option<super::ComplexBaseType>,
10948 Option<<super::ComplexBaseType as WithDeserializer>::Deserializer>,
10949 ),
10950 Alternative(
10951 Option<super::AltType>,
10952 Option<<super::AltType as WithDeserializer>::Deserializer>,
10953 ),
10954 Unique(
10955 Option<super::KeybaseType>,
10956 Option<<super::KeybaseType as WithDeserializer>::Deserializer>,
10957 ),
10958 Key(
10959 Option<super::KeybaseType>,
10960 Option<<super::KeybaseType as WithDeserializer>::Deserializer>,
10961 ),
10962 Keyref(
10963 Option<super::Keyref>,
10964 Option<<super::Keyref as WithDeserializer>::Deserializer>,
10965 ),
10966 Done__(super::ElementTypeContent),
10967 Unknown__,
10968 }
10969 impl ElementTypeContentDeserializer {
10970 fn find_suitable<'de>(
10971 &mut self,
10972 helper: &mut DeserializeHelper,
10973 event: Event<'de>,
10974 fallback: &mut Option<ElementTypeContentDeserializerState>,
10975 ) -> Result<ElementHandlerOutput<'de>, Error> {
10976 if let Event::Start(x) | Event::Empty(x) = &event {
10977 if matches!(
10978 helper.resolve_local_name(x.name(), &super::NS_XS),
10979 Some(b"annotation")
10980 ) {
10981 let output =
10982 <super::Annotation as WithDeserializer>::Deserializer::init(helper, event)?;
10983 return self.handle_annotation(
10984 helper,
10985 Default::default(),
10986 output,
10987 &mut *fallback,
10988 );
10989 }
10990 if matches!(
10991 helper.resolve_local_name(x.name(), &super::NS_XS),
10992 Some(b"simpleType")
10993 ) {
10994 let output = <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
10995 helper, event,
10996 )?;
10997 return self.handle_simple_type(
10998 helper,
10999 Default::default(),
11000 output,
11001 &mut *fallback,
11002 );
11003 }
11004 if matches!(
11005 helper.resolve_local_name(x.name(), &super::NS_XS),
11006 Some(b"complexType")
11007 ) {
11008 let output = <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
11009 helper, event,
11010 )?;
11011 return self.handle_complex_type(
11012 helper,
11013 Default::default(),
11014 output,
11015 &mut *fallback,
11016 );
11017 }
11018 if matches!(
11019 helper.resolve_local_name(x.name(), &super::NS_XS),
11020 Some(b"alternative")
11021 ) {
11022 let output =
11023 <super::AltType as WithDeserializer>::Deserializer::init(helper, event)?;
11024 return self.handle_alternative(
11025 helper,
11026 Default::default(),
11027 output,
11028 &mut *fallback,
11029 );
11030 }
11031 if matches!(
11032 helper.resolve_local_name(x.name(), &super::NS_XS),
11033 Some(b"unique")
11034 ) {
11035 let output = <super::KeybaseType as WithDeserializer>::Deserializer::init(
11036 helper, event,
11037 )?;
11038 return self.handle_unique(helper, Default::default(), output, &mut *fallback);
11039 }
11040 if matches!(
11041 helper.resolve_local_name(x.name(), &super::NS_XS),
11042 Some(b"key")
11043 ) {
11044 let output = <super::KeybaseType as WithDeserializer>::Deserializer::init(
11045 helper, event,
11046 )?;
11047 return self.handle_key(helper, Default::default(), output, &mut *fallback);
11048 }
11049 if matches!(
11050 helper.resolve_local_name(x.name(), &super::NS_XS),
11051 Some(b"keyref")
11052 ) {
11053 let output =
11054 <super::Keyref as WithDeserializer>::Deserializer::init(helper, event)?;
11055 return self.handle_keyref(helper, Default::default(), output, &mut *fallback);
11056 }
11057 }
11058 *self.state__ = fallback
11059 .take()
11060 .unwrap_or(ElementTypeContentDeserializerState::Init__);
11061 Ok(ElementHandlerOutput::return_to_parent(event, false))
11062 }
11063 fn finish_state(
11064 helper: &mut DeserializeHelper,
11065 state: ElementTypeContentDeserializerState,
11066 ) -> Result<super::ElementTypeContent, Error> {
11067 use ElementTypeContentDeserializerState as S;
11068 match state {
11069 S::Unknown__ => unreachable!(),
11070 S::Init__ => Err(ErrorKind::MissingContent.into()),
11071 S::Annotation(mut values, deserializer) => {
11072 if let Some(deserializer) = deserializer {
11073 let value = deserializer.finish(helper)?;
11074 ElementTypeContentDeserializer::store_annotation(&mut values, value)?;
11075 }
11076 Ok(super::ElementTypeContent::Annotation(values.ok_or_else(
11077 || ErrorKind::MissingElement("annotation".into()),
11078 )?))
11079 }
11080 S::SimpleType(mut values, deserializer) => {
11081 if let Some(deserializer) = deserializer {
11082 let value = deserializer.finish(helper)?;
11083 ElementTypeContentDeserializer::store_simple_type(&mut values, value)?;
11084 }
11085 Ok(super::ElementTypeContent::SimpleType(values.ok_or_else(
11086 || ErrorKind::MissingElement("simpleType".into()),
11087 )?))
11088 }
11089 S::ComplexType(mut values, deserializer) => {
11090 if let Some(deserializer) = deserializer {
11091 let value = deserializer.finish(helper)?;
11092 ElementTypeContentDeserializer::store_complex_type(&mut values, value)?;
11093 }
11094 Ok(super::ElementTypeContent::ComplexType(values.ok_or_else(
11095 || ErrorKind::MissingElement("complexType".into()),
11096 )?))
11097 }
11098 S::Alternative(mut values, deserializer) => {
11099 if let Some(deserializer) = deserializer {
11100 let value = deserializer.finish(helper)?;
11101 ElementTypeContentDeserializer::store_alternative(&mut values, value)?;
11102 }
11103 Ok(super::ElementTypeContent::Alternative(values.ok_or_else(
11104 || ErrorKind::MissingElement("alternative".into()),
11105 )?))
11106 }
11107 S::Unique(mut values, deserializer) => {
11108 if let Some(deserializer) = deserializer {
11109 let value = deserializer.finish(helper)?;
11110 ElementTypeContentDeserializer::store_unique(&mut values, value)?;
11111 }
11112 Ok(super::ElementTypeContent::Unique(values.ok_or_else(
11113 || ErrorKind::MissingElement("unique".into()),
11114 )?))
11115 }
11116 S::Key(mut values, deserializer) => {
11117 if let Some(deserializer) = deserializer {
11118 let value = deserializer.finish(helper)?;
11119 ElementTypeContentDeserializer::store_key(&mut values, value)?;
11120 }
11121 Ok(super::ElementTypeContent::Key(
11122 values.ok_or_else(|| ErrorKind::MissingElement("key".into()))?,
11123 ))
11124 }
11125 S::Keyref(mut values, deserializer) => {
11126 if let Some(deserializer) = deserializer {
11127 let value = deserializer.finish(helper)?;
11128 ElementTypeContentDeserializer::store_keyref(&mut values, value)?;
11129 }
11130 Ok(super::ElementTypeContent::Keyref(values.ok_or_else(
11131 || ErrorKind::MissingElement("keyref".into()),
11132 )?))
11133 }
11134 S::Done__(data) => Ok(data),
11135 }
11136 }
11137 fn store_annotation(
11138 values: &mut Option<super::Annotation>,
11139 value: super::Annotation,
11140 ) -> Result<(), Error> {
11141 if values.is_some() {
11142 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11143 b"annotation",
11144 )))?;
11145 }
11146 *values = Some(value);
11147 Ok(())
11148 }
11149 fn store_simple_type(
11150 values: &mut Option<super::SimpleBaseType>,
11151 value: super::SimpleBaseType,
11152 ) -> Result<(), Error> {
11153 if values.is_some() {
11154 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11155 b"simpleType",
11156 )))?;
11157 }
11158 *values = Some(value);
11159 Ok(())
11160 }
11161 fn store_complex_type(
11162 values: &mut Option<super::ComplexBaseType>,
11163 value: super::ComplexBaseType,
11164 ) -> Result<(), Error> {
11165 if values.is_some() {
11166 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11167 b"complexType",
11168 )))?;
11169 }
11170 *values = Some(value);
11171 Ok(())
11172 }
11173 fn store_alternative(
11174 values: &mut Option<super::AltType>,
11175 value: super::AltType,
11176 ) -> Result<(), Error> {
11177 if values.is_some() {
11178 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11179 b"alternative",
11180 )))?;
11181 }
11182 *values = Some(value);
11183 Ok(())
11184 }
11185 fn store_unique(
11186 values: &mut Option<super::KeybaseType>,
11187 value: super::KeybaseType,
11188 ) -> Result<(), Error> {
11189 if values.is_some() {
11190 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11191 b"unique",
11192 )))?;
11193 }
11194 *values = Some(value);
11195 Ok(())
11196 }
11197 fn store_key(
11198 values: &mut Option<super::KeybaseType>,
11199 value: super::KeybaseType,
11200 ) -> Result<(), Error> {
11201 if values.is_some() {
11202 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"key")))?;
11203 }
11204 *values = Some(value);
11205 Ok(())
11206 }
11207 fn store_keyref(
11208 values: &mut Option<super::Keyref>,
11209 value: super::Keyref,
11210 ) -> Result<(), Error> {
11211 if values.is_some() {
11212 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11213 b"keyref",
11214 )))?;
11215 }
11216 *values = Some(value);
11217 Ok(())
11218 }
11219 fn handle_annotation<'de>(
11220 &mut self,
11221 helper: &mut DeserializeHelper,
11222 mut values: Option<super::Annotation>,
11223 output: DeserializerOutput<'de, super::Annotation>,
11224 fallback: &mut Option<ElementTypeContentDeserializerState>,
11225 ) -> Result<ElementHandlerOutput<'de>, Error> {
11226 let DeserializerOutput {
11227 artifact,
11228 event,
11229 allow_any,
11230 } = output;
11231 if artifact.is_none() {
11232 *self.state__ = match fallback.take() {
11233 None if values.is_none() => {
11234 *self.state__ = ElementTypeContentDeserializerState::Init__;
11235 return Ok(ElementHandlerOutput::from_event(event, allow_any));
11236 }
11237 None => ElementTypeContentDeserializerState::Annotation(values, None),
11238 Some(ElementTypeContentDeserializerState::Annotation(
11239 _,
11240 Some(deserializer),
11241 )) => {
11242 ElementTypeContentDeserializerState::Annotation(values, Some(deserializer))
11243 }
11244 _ => unreachable!(),
11245 };
11246 return Ok(ElementHandlerOutput::break_(event, allow_any));
11247 }
11248 match fallback.take() {
11249 None => (),
11250 Some(ElementTypeContentDeserializerState::Annotation(_, Some(deserializer))) => {
11251 let data = deserializer.finish(helper)?;
11252 ElementTypeContentDeserializer::store_annotation(&mut values, data)?;
11253 }
11254 Some(_) => unreachable!(),
11255 }
11256 Ok(match artifact {
11257 DeserializerArtifact::None => unreachable!(),
11258 DeserializerArtifact::Data(data) => {
11259 ElementTypeContentDeserializer::store_annotation(&mut values, data)?;
11260 let data = ElementTypeContentDeserializer::finish_state(
11261 helper,
11262 ElementTypeContentDeserializerState::Annotation(values, None),
11263 )?;
11264 *self.state__ = ElementTypeContentDeserializerState::Done__(data);
11265 ElementHandlerOutput::Break { event, allow_any }
11266 }
11267 DeserializerArtifact::Deserializer(deserializer) => {
11268 *self.state__ =
11269 ElementTypeContentDeserializerState::Annotation(values, Some(deserializer));
11270 ElementHandlerOutput::from_event_end(event, allow_any)
11271 }
11272 })
11273 }
11274 fn handle_simple_type<'de>(
11275 &mut self,
11276 helper: &mut DeserializeHelper,
11277 mut values: Option<super::SimpleBaseType>,
11278 output: DeserializerOutput<'de, super::SimpleBaseType>,
11279 fallback: &mut Option<ElementTypeContentDeserializerState>,
11280 ) -> Result<ElementHandlerOutput<'de>, Error> {
11281 let DeserializerOutput {
11282 artifact,
11283 event,
11284 allow_any,
11285 } = output;
11286 if artifact.is_none() {
11287 *self.state__ = match fallback.take() {
11288 None if values.is_none() => {
11289 *self.state__ = ElementTypeContentDeserializerState::Init__;
11290 return Ok(ElementHandlerOutput::from_event(event, allow_any));
11291 }
11292 None => ElementTypeContentDeserializerState::SimpleType(values, None),
11293 Some(ElementTypeContentDeserializerState::SimpleType(
11294 _,
11295 Some(deserializer),
11296 )) => {
11297 ElementTypeContentDeserializerState::SimpleType(values, Some(deserializer))
11298 }
11299 _ => unreachable!(),
11300 };
11301 return Ok(ElementHandlerOutput::break_(event, allow_any));
11302 }
11303 match fallback.take() {
11304 None => (),
11305 Some(ElementTypeContentDeserializerState::SimpleType(_, Some(deserializer))) => {
11306 let data = deserializer.finish(helper)?;
11307 ElementTypeContentDeserializer::store_simple_type(&mut values, data)?;
11308 }
11309 Some(_) => unreachable!(),
11310 }
11311 Ok(match artifact {
11312 DeserializerArtifact::None => unreachable!(),
11313 DeserializerArtifact::Data(data) => {
11314 ElementTypeContentDeserializer::store_simple_type(&mut values, data)?;
11315 let data = ElementTypeContentDeserializer::finish_state(
11316 helper,
11317 ElementTypeContentDeserializerState::SimpleType(values, None),
11318 )?;
11319 *self.state__ = ElementTypeContentDeserializerState::Done__(data);
11320 ElementHandlerOutput::Break { event, allow_any }
11321 }
11322 DeserializerArtifact::Deserializer(deserializer) => {
11323 *self.state__ =
11324 ElementTypeContentDeserializerState::SimpleType(values, Some(deserializer));
11325 ElementHandlerOutput::from_event_end(event, allow_any)
11326 }
11327 })
11328 }
11329 fn handle_complex_type<'de>(
11330 &mut self,
11331 helper: &mut DeserializeHelper,
11332 mut values: Option<super::ComplexBaseType>,
11333 output: DeserializerOutput<'de, super::ComplexBaseType>,
11334 fallback: &mut Option<ElementTypeContentDeserializerState>,
11335 ) -> Result<ElementHandlerOutput<'de>, Error> {
11336 let DeserializerOutput {
11337 artifact,
11338 event,
11339 allow_any,
11340 } = output;
11341 if artifact.is_none() {
11342 *self.state__ = match fallback.take() {
11343 None if values.is_none() => {
11344 *self.state__ = ElementTypeContentDeserializerState::Init__;
11345 return Ok(ElementHandlerOutput::from_event(event, allow_any));
11346 }
11347 None => ElementTypeContentDeserializerState::ComplexType(values, None),
11348 Some(ElementTypeContentDeserializerState::ComplexType(
11349 _,
11350 Some(deserializer),
11351 )) => {
11352 ElementTypeContentDeserializerState::ComplexType(values, Some(deserializer))
11353 }
11354 _ => unreachable!(),
11355 };
11356 return Ok(ElementHandlerOutput::break_(event, allow_any));
11357 }
11358 match fallback.take() {
11359 None => (),
11360 Some(ElementTypeContentDeserializerState::ComplexType(_, Some(deserializer))) => {
11361 let data = deserializer.finish(helper)?;
11362 ElementTypeContentDeserializer::store_complex_type(&mut values, data)?;
11363 }
11364 Some(_) => unreachable!(),
11365 }
11366 Ok(match artifact {
11367 DeserializerArtifact::None => unreachable!(),
11368 DeserializerArtifact::Data(data) => {
11369 ElementTypeContentDeserializer::store_complex_type(&mut values, data)?;
11370 let data = ElementTypeContentDeserializer::finish_state(
11371 helper,
11372 ElementTypeContentDeserializerState::ComplexType(values, None),
11373 )?;
11374 *self.state__ = ElementTypeContentDeserializerState::Done__(data);
11375 ElementHandlerOutput::Break { event, allow_any }
11376 }
11377 DeserializerArtifact::Deserializer(deserializer) => {
11378 *self.state__ = ElementTypeContentDeserializerState::ComplexType(
11379 values,
11380 Some(deserializer),
11381 );
11382 ElementHandlerOutput::from_event_end(event, allow_any)
11383 }
11384 })
11385 }
11386 fn handle_alternative<'de>(
11387 &mut self,
11388 helper: &mut DeserializeHelper,
11389 mut values: Option<super::AltType>,
11390 output: DeserializerOutput<'de, super::AltType>,
11391 fallback: &mut Option<ElementTypeContentDeserializerState>,
11392 ) -> Result<ElementHandlerOutput<'de>, Error> {
11393 let DeserializerOutput {
11394 artifact,
11395 event,
11396 allow_any,
11397 } = output;
11398 if artifact.is_none() {
11399 *self.state__ = match fallback.take() {
11400 None if values.is_none() => {
11401 *self.state__ = ElementTypeContentDeserializerState::Init__;
11402 return Ok(ElementHandlerOutput::from_event(event, allow_any));
11403 }
11404 None => ElementTypeContentDeserializerState::Alternative(values, None),
11405 Some(ElementTypeContentDeserializerState::Alternative(
11406 _,
11407 Some(deserializer),
11408 )) => {
11409 ElementTypeContentDeserializerState::Alternative(values, Some(deserializer))
11410 }
11411 _ => unreachable!(),
11412 };
11413 return Ok(ElementHandlerOutput::break_(event, allow_any));
11414 }
11415 match fallback.take() {
11416 None => (),
11417 Some(ElementTypeContentDeserializerState::Alternative(_, Some(deserializer))) => {
11418 let data = deserializer.finish(helper)?;
11419 ElementTypeContentDeserializer::store_alternative(&mut values, data)?;
11420 }
11421 Some(_) => unreachable!(),
11422 }
11423 Ok(match artifact {
11424 DeserializerArtifact::None => unreachable!(),
11425 DeserializerArtifact::Data(data) => {
11426 ElementTypeContentDeserializer::store_alternative(&mut values, data)?;
11427 let data = ElementTypeContentDeserializer::finish_state(
11428 helper,
11429 ElementTypeContentDeserializerState::Alternative(values, None),
11430 )?;
11431 *self.state__ = ElementTypeContentDeserializerState::Done__(data);
11432 ElementHandlerOutput::Break { event, allow_any }
11433 }
11434 DeserializerArtifact::Deserializer(deserializer) => {
11435 *self.state__ = ElementTypeContentDeserializerState::Alternative(
11436 values,
11437 Some(deserializer),
11438 );
11439 ElementHandlerOutput::from_event_end(event, allow_any)
11440 }
11441 })
11442 }
11443 fn handle_unique<'de>(
11444 &mut self,
11445 helper: &mut DeserializeHelper,
11446 mut values: Option<super::KeybaseType>,
11447 output: DeserializerOutput<'de, super::KeybaseType>,
11448 fallback: &mut Option<ElementTypeContentDeserializerState>,
11449 ) -> Result<ElementHandlerOutput<'de>, Error> {
11450 let DeserializerOutput {
11451 artifact,
11452 event,
11453 allow_any,
11454 } = output;
11455 if artifact.is_none() {
11456 *self.state__ = match fallback.take() {
11457 None if values.is_none() => {
11458 *self.state__ = ElementTypeContentDeserializerState::Init__;
11459 return Ok(ElementHandlerOutput::from_event(event, allow_any));
11460 }
11461 None => ElementTypeContentDeserializerState::Unique(values, None),
11462 Some(ElementTypeContentDeserializerState::Unique(_, Some(deserializer))) => {
11463 ElementTypeContentDeserializerState::Unique(values, Some(deserializer))
11464 }
11465 _ => unreachable!(),
11466 };
11467 return Ok(ElementHandlerOutput::break_(event, allow_any));
11468 }
11469 match fallback.take() {
11470 None => (),
11471 Some(ElementTypeContentDeserializerState::Unique(_, Some(deserializer))) => {
11472 let data = deserializer.finish(helper)?;
11473 ElementTypeContentDeserializer::store_unique(&mut values, data)?;
11474 }
11475 Some(_) => unreachable!(),
11476 }
11477 Ok(match artifact {
11478 DeserializerArtifact::None => unreachable!(),
11479 DeserializerArtifact::Data(data) => {
11480 ElementTypeContentDeserializer::store_unique(&mut values, data)?;
11481 let data = ElementTypeContentDeserializer::finish_state(
11482 helper,
11483 ElementTypeContentDeserializerState::Unique(values, None),
11484 )?;
11485 *self.state__ = ElementTypeContentDeserializerState::Done__(data);
11486 ElementHandlerOutput::Break { event, allow_any }
11487 }
11488 DeserializerArtifact::Deserializer(deserializer) => {
11489 *self.state__ =
11490 ElementTypeContentDeserializerState::Unique(values, Some(deserializer));
11491 ElementHandlerOutput::from_event_end(event, allow_any)
11492 }
11493 })
11494 }
11495 fn handle_key<'de>(
11496 &mut self,
11497 helper: &mut DeserializeHelper,
11498 mut values: Option<super::KeybaseType>,
11499 output: DeserializerOutput<'de, super::KeybaseType>,
11500 fallback: &mut Option<ElementTypeContentDeserializerState>,
11501 ) -> Result<ElementHandlerOutput<'de>, Error> {
11502 let DeserializerOutput {
11503 artifact,
11504 event,
11505 allow_any,
11506 } = output;
11507 if artifact.is_none() {
11508 *self.state__ = match fallback.take() {
11509 None if values.is_none() => {
11510 *self.state__ = ElementTypeContentDeserializerState::Init__;
11511 return Ok(ElementHandlerOutput::from_event(event, allow_any));
11512 }
11513 None => ElementTypeContentDeserializerState::Key(values, None),
11514 Some(ElementTypeContentDeserializerState::Key(_, Some(deserializer))) => {
11515 ElementTypeContentDeserializerState::Key(values, Some(deserializer))
11516 }
11517 _ => unreachable!(),
11518 };
11519 return Ok(ElementHandlerOutput::break_(event, allow_any));
11520 }
11521 match fallback.take() {
11522 None => (),
11523 Some(ElementTypeContentDeserializerState::Key(_, Some(deserializer))) => {
11524 let data = deserializer.finish(helper)?;
11525 ElementTypeContentDeserializer::store_key(&mut values, data)?;
11526 }
11527 Some(_) => unreachable!(),
11528 }
11529 Ok(match artifact {
11530 DeserializerArtifact::None => unreachable!(),
11531 DeserializerArtifact::Data(data) => {
11532 ElementTypeContentDeserializer::store_key(&mut values, data)?;
11533 let data = ElementTypeContentDeserializer::finish_state(
11534 helper,
11535 ElementTypeContentDeserializerState::Key(values, None),
11536 )?;
11537 *self.state__ = ElementTypeContentDeserializerState::Done__(data);
11538 ElementHandlerOutput::Break { event, allow_any }
11539 }
11540 DeserializerArtifact::Deserializer(deserializer) => {
11541 *self.state__ =
11542 ElementTypeContentDeserializerState::Key(values, Some(deserializer));
11543 ElementHandlerOutput::from_event_end(event, allow_any)
11544 }
11545 })
11546 }
11547 fn handle_keyref<'de>(
11548 &mut self,
11549 helper: &mut DeserializeHelper,
11550 mut values: Option<super::Keyref>,
11551 output: DeserializerOutput<'de, super::Keyref>,
11552 fallback: &mut Option<ElementTypeContentDeserializerState>,
11553 ) -> Result<ElementHandlerOutput<'de>, Error> {
11554 let DeserializerOutput {
11555 artifact,
11556 event,
11557 allow_any,
11558 } = output;
11559 if artifact.is_none() {
11560 *self.state__ = match fallback.take() {
11561 None if values.is_none() => {
11562 *self.state__ = ElementTypeContentDeserializerState::Init__;
11563 return Ok(ElementHandlerOutput::from_event(event, allow_any));
11564 }
11565 None => ElementTypeContentDeserializerState::Keyref(values, None),
11566 Some(ElementTypeContentDeserializerState::Keyref(_, Some(deserializer))) => {
11567 ElementTypeContentDeserializerState::Keyref(values, Some(deserializer))
11568 }
11569 _ => unreachable!(),
11570 };
11571 return Ok(ElementHandlerOutput::break_(event, allow_any));
11572 }
11573 match fallback.take() {
11574 None => (),
11575 Some(ElementTypeContentDeserializerState::Keyref(_, Some(deserializer))) => {
11576 let data = deserializer.finish(helper)?;
11577 ElementTypeContentDeserializer::store_keyref(&mut values, data)?;
11578 }
11579 Some(_) => unreachable!(),
11580 }
11581 Ok(match artifact {
11582 DeserializerArtifact::None => unreachable!(),
11583 DeserializerArtifact::Data(data) => {
11584 ElementTypeContentDeserializer::store_keyref(&mut values, data)?;
11585 let data = ElementTypeContentDeserializer::finish_state(
11586 helper,
11587 ElementTypeContentDeserializerState::Keyref(values, None),
11588 )?;
11589 *self.state__ = ElementTypeContentDeserializerState::Done__(data);
11590 ElementHandlerOutput::Break { event, allow_any }
11591 }
11592 DeserializerArtifact::Deserializer(deserializer) => {
11593 *self.state__ =
11594 ElementTypeContentDeserializerState::Keyref(values, Some(deserializer));
11595 ElementHandlerOutput::from_event_end(event, allow_any)
11596 }
11597 })
11598 }
11599 }
11600 impl<'de> Deserializer<'de, super::ElementTypeContent> for Box<ElementTypeContentDeserializer> {
11601 fn init(
11602 helper: &mut DeserializeHelper,
11603 event: Event<'de>,
11604 ) -> DeserializerResult<'de, super::ElementTypeContent> {
11605 let deserializer = Box::new(ElementTypeContentDeserializer {
11606 state__: Box::new(ElementTypeContentDeserializerState::Init__),
11607 });
11608 let mut output = deserializer.next(helper, event)?;
11609 output.artifact = match output.artifact {
11610 DeserializerArtifact::Deserializer(x)
11611 if matches!(&*x.state__, ElementTypeContentDeserializerState::Init__) =>
11612 {
11613 DeserializerArtifact::None
11614 }
11615 artifact => artifact,
11616 };
11617 Ok(output)
11618 }
11619 fn next(
11620 mut self,
11621 helper: &mut DeserializeHelper,
11622 event: Event<'de>,
11623 ) -> DeserializerResult<'de, super::ElementTypeContent> {
11624 use ElementTypeContentDeserializerState as S;
11625 let mut event = event;
11626 let mut fallback = None;
11627 let (event, allow_any) = loop {
11628 let state = replace(&mut *self.state__, S::Unknown__);
11629 event = match (state, event) {
11630 (S::Unknown__, _) => unreachable!(),
11631 (S::Annotation(values, Some(deserializer)), event) => {
11632 let output = deserializer.next(helper, event)?;
11633 match self.handle_annotation(helper, values, output, &mut fallback)? {
11634 ElementHandlerOutput::Break { event, allow_any } => {
11635 break (event, allow_any)
11636 }
11637 ElementHandlerOutput::Continue { event, .. } => event,
11638 }
11639 }
11640 (S::SimpleType(values, Some(deserializer)), event) => {
11641 let output = deserializer.next(helper, event)?;
11642 match self.handle_simple_type(helper, values, output, &mut fallback)? {
11643 ElementHandlerOutput::Break { event, allow_any } => {
11644 break (event, allow_any)
11645 }
11646 ElementHandlerOutput::Continue { event, .. } => event,
11647 }
11648 }
11649 (S::ComplexType(values, Some(deserializer)), event) => {
11650 let output = deserializer.next(helper, event)?;
11651 match self.handle_complex_type(helper, values, output, &mut fallback)? {
11652 ElementHandlerOutput::Break { event, allow_any } => {
11653 break (event, allow_any)
11654 }
11655 ElementHandlerOutput::Continue { event, .. } => event,
11656 }
11657 }
11658 (S::Alternative(values, Some(deserializer)), event) => {
11659 let output = deserializer.next(helper, event)?;
11660 match self.handle_alternative(helper, values, output, &mut fallback)? {
11661 ElementHandlerOutput::Break { event, allow_any } => {
11662 break (event, allow_any)
11663 }
11664 ElementHandlerOutput::Continue { event, .. } => event,
11665 }
11666 }
11667 (S::Unique(values, Some(deserializer)), event) => {
11668 let output = deserializer.next(helper, event)?;
11669 match self.handle_unique(helper, values, output, &mut fallback)? {
11670 ElementHandlerOutput::Break { event, allow_any } => {
11671 break (event, allow_any)
11672 }
11673 ElementHandlerOutput::Continue { event, .. } => event,
11674 }
11675 }
11676 (S::Key(values, Some(deserializer)), event) => {
11677 let output = deserializer.next(helper, event)?;
11678 match self.handle_key(helper, values, output, &mut fallback)? {
11679 ElementHandlerOutput::Break { event, allow_any } => {
11680 break (event, allow_any)
11681 }
11682 ElementHandlerOutput::Continue { event, .. } => event,
11683 }
11684 }
11685 (S::Keyref(values, Some(deserializer)), event) => {
11686 let output = deserializer.next(helper, event)?;
11687 match self.handle_keyref(helper, values, output, &mut fallback)? {
11688 ElementHandlerOutput::Break { event, allow_any } => {
11689 break (event, allow_any)
11690 }
11691 ElementHandlerOutput::Continue { event, .. } => event,
11692 }
11693 }
11694 (state, event @ Event::End(_)) => {
11695 return Ok(DeserializerOutput {
11696 artifact: DeserializerArtifact::Data(
11697 ElementTypeContentDeserializer::finish_state(helper, state)?,
11698 ),
11699 event: DeserializerEvent::Continue(event),
11700 allow_any: false,
11701 });
11702 }
11703 (S::Init__, event) => match self.find_suitable(helper, event, &mut fallback)? {
11704 ElementHandlerOutput::Break { event, allow_any } => {
11705 break (event, allow_any)
11706 }
11707 ElementHandlerOutput::Continue { event, .. } => event,
11708 },
11709 (S::Annotation(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
11710 let output = helper.init_start_tag_deserializer(
11711 event,
11712 Some(&super::NS_XS),
11713 b"annotation",
11714 false,
11715 )?;
11716 match self.handle_annotation(helper, values, output, &mut fallback)? {
11717 ElementHandlerOutput::Break { event, allow_any } => {
11718 break (event, allow_any)
11719 }
11720 ElementHandlerOutput::Continue { event, .. } => event,
11721 }
11722 }
11723 (S::SimpleType(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
11724 let output = helper.init_start_tag_deserializer(
11725 event,
11726 Some(&super::NS_XS),
11727 b"simpleType",
11728 true,
11729 )?;
11730 match self.handle_simple_type(helper, values, output, &mut fallback)? {
11731 ElementHandlerOutput::Break { event, allow_any } => {
11732 break (event, allow_any)
11733 }
11734 ElementHandlerOutput::Continue { event, .. } => event,
11735 }
11736 }
11737 (S::ComplexType(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
11738 let output = helper.init_start_tag_deserializer(
11739 event,
11740 Some(&super::NS_XS),
11741 b"complexType",
11742 true,
11743 )?;
11744 match self.handle_complex_type(helper, values, output, &mut fallback)? {
11745 ElementHandlerOutput::Break { event, allow_any } => {
11746 break (event, allow_any)
11747 }
11748 ElementHandlerOutput::Continue { event, .. } => event,
11749 }
11750 }
11751 (S::Alternative(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
11752 let output = helper.init_start_tag_deserializer(
11753 event,
11754 Some(&super::NS_XS),
11755 b"alternative",
11756 true,
11757 )?;
11758 match self.handle_alternative(helper, values, output, &mut fallback)? {
11759 ElementHandlerOutput::Break { event, allow_any } => {
11760 break (event, allow_any)
11761 }
11762 ElementHandlerOutput::Continue { event, .. } => event,
11763 }
11764 }
11765 (S::Unique(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
11766 let output = helper.init_start_tag_deserializer(
11767 event,
11768 Some(&super::NS_XS),
11769 b"unique",
11770 false,
11771 )?;
11772 match self.handle_unique(helper, values, output, &mut fallback)? {
11773 ElementHandlerOutput::Break { event, allow_any } => {
11774 break (event, allow_any)
11775 }
11776 ElementHandlerOutput::Continue { event, .. } => event,
11777 }
11778 }
11779 (S::Key(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
11780 let output = helper.init_start_tag_deserializer(
11781 event,
11782 Some(&super::NS_XS),
11783 b"key",
11784 false,
11785 )?;
11786 match self.handle_key(helper, values, output, &mut fallback)? {
11787 ElementHandlerOutput::Break { event, allow_any } => {
11788 break (event, allow_any)
11789 }
11790 ElementHandlerOutput::Continue { event, .. } => event,
11791 }
11792 }
11793 (S::Keyref(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
11794 let output = helper.init_start_tag_deserializer(
11795 event,
11796 Some(&super::NS_XS),
11797 b"keyref",
11798 false,
11799 )?;
11800 match self.handle_keyref(helper, values, output, &mut fallback)? {
11801 ElementHandlerOutput::Break { event, allow_any } => {
11802 break (event, allow_any)
11803 }
11804 ElementHandlerOutput::Continue { event, .. } => event,
11805 }
11806 }
11807 (s @ S::Done__(_), event) => {
11808 *self.state__ = s;
11809 break (DeserializerEvent::Continue(event), false);
11810 }
11811 (state, event) => {
11812 *self.state__ = state;
11813 break (DeserializerEvent::Break(event), false);
11814 }
11815 }
11816 };
11817 let artifact = if matches!(&*self.state__, S::Done__(_)) {
11818 DeserializerArtifact::Data(self.finish(helper)?)
11819 } else {
11820 DeserializerArtifact::Deserializer(self)
11821 };
11822 Ok(DeserializerOutput {
11823 artifact,
11824 event,
11825 allow_any,
11826 })
11827 }
11828 fn finish(
11829 self,
11830 helper: &mut DeserializeHelper,
11831 ) -> Result<super::ElementTypeContent, Error> {
11832 ElementTypeContentDeserializer::finish_state(helper, *self.state__)
11833 }
11834 }
11835 #[derive(Debug)]
11836 pub struct AttributeTypeDeserializer {
11837 id: Option<String>,
11838 name: Option<String>,
11839 ref_: Option<QName>,
11840 type_: Option<QName>,
11841 use_: super::AttributeUseType,
11842 default: Option<String>,
11843 fixed: Option<String>,
11844 form: Option<super::FormChoiceType>,
11845 target_namespace: Option<String>,
11846 inheritable: Option<bool>,
11847 annotation: Option<super::Annotation>,
11848 simple_type: Option<super::SimpleBaseType>,
11849 state__: Box<AttributeTypeDeserializerState>,
11850 }
11851 #[derive(Debug)]
11852 enum AttributeTypeDeserializerState {
11853 Init__,
11854 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
11855 SimpleType(Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>),
11856 Done__,
11857 Unknown__,
11858 }
11859 impl AttributeTypeDeserializer {
11860 fn from_bytes_start(
11861 helper: &mut DeserializeHelper,
11862 bytes_start: &BytesStart<'_>,
11863 ) -> Result<Box<Self>, Error> {
11864 let mut id: Option<String> = None;
11865 let mut name: Option<String> = None;
11866 let mut ref_: Option<QName> = None;
11867 let mut type_: Option<QName> = None;
11868 let mut use_: Option<super::AttributeUseType> = None;
11869 let mut default: Option<String> = None;
11870 let mut fixed: Option<String> = None;
11871 let mut form: Option<super::FormChoiceType> = None;
11872 let mut target_namespace: Option<String> = None;
11873 let mut inheritable: Option<bool> = None;
11874 for attrib in helper.filter_xmlns_attributes(bytes_start) {
11875 let attrib = attrib?;
11876 if matches!(
11877 helper.resolve_local_name(attrib.key, &super::NS_XS),
11878 Some(b"id")
11879 ) {
11880 helper.read_attrib(&mut id, b"id", &attrib.value)?;
11881 } else if matches!(
11882 helper.resolve_local_name(attrib.key, &super::NS_XS),
11883 Some(b"name")
11884 ) {
11885 helper.read_attrib(&mut name, b"name", &attrib.value)?;
11886 } else if matches!(
11887 helper.resolve_local_name(attrib.key, &super::NS_XS),
11888 Some(b"ref")
11889 ) {
11890 helper.read_attrib(&mut ref_, b"ref", &attrib.value)?;
11891 } else if matches!(
11892 helper.resolve_local_name(attrib.key, &super::NS_XS),
11893 Some(b"type")
11894 ) {
11895 helper.read_attrib(&mut type_, b"type", &attrib.value)?;
11896 } else if matches!(
11897 helper.resolve_local_name(attrib.key, &super::NS_XS),
11898 Some(b"use")
11899 ) {
11900 helper.read_attrib(&mut use_, b"use", &attrib.value)?;
11901 } else if matches!(
11902 helper.resolve_local_name(attrib.key, &super::NS_XS),
11903 Some(b"default")
11904 ) {
11905 helper.read_attrib(&mut default, b"default", &attrib.value)?;
11906 } else if matches!(
11907 helper.resolve_local_name(attrib.key, &super::NS_XS),
11908 Some(b"fixed")
11909 ) {
11910 helper.read_attrib(&mut fixed, b"fixed", &attrib.value)?;
11911 } else if matches!(
11912 helper.resolve_local_name(attrib.key, &super::NS_XS),
11913 Some(b"form")
11914 ) {
11915 helper.read_attrib(&mut form, b"form", &attrib.value)?;
11916 } else if matches!(
11917 helper.resolve_local_name(attrib.key, &super::NS_XS),
11918 Some(b"targetNamespace")
11919 ) {
11920 helper.read_attrib(&mut target_namespace, b"targetNamespace", &attrib.value)?;
11921 } else if matches!(
11922 helper.resolve_local_name(attrib.key, &super::NS_XS),
11923 Some(b"inheritable")
11924 ) {
11925 helper.read_attrib(&mut inheritable, b"inheritable", &attrib.value)?;
11926 }
11927 }
11928 Ok(Box::new(Self {
11929 id: id,
11930 name: name,
11931 ref_: ref_,
11932 type_: type_,
11933 use_: use_.unwrap_or_else(super::AttributeType::default_use_),
11934 default: default,
11935 fixed: fixed,
11936 form: form,
11937 target_namespace: target_namespace,
11938 inheritable: inheritable,
11939 annotation: None,
11940 simple_type: None,
11941 state__: Box::new(AttributeTypeDeserializerState::Init__),
11942 }))
11943 }
11944 fn finish_state(
11945 &mut self,
11946 helper: &mut DeserializeHelper,
11947 state: AttributeTypeDeserializerState,
11948 ) -> Result<(), Error> {
11949 use AttributeTypeDeserializerState as S;
11950 match state {
11951 S::Annotation(Some(deserializer)) => {
11952 self.store_annotation(deserializer.finish(helper)?)?
11953 }
11954 S::SimpleType(Some(deserializer)) => {
11955 self.store_simple_type(deserializer.finish(helper)?)?
11956 }
11957 _ => (),
11958 }
11959 Ok(())
11960 }
11961 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
11962 if self.annotation.is_some() {
11963 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11964 b"annotation",
11965 )))?;
11966 }
11967 self.annotation = Some(value);
11968 Ok(())
11969 }
11970 fn store_simple_type(&mut self, value: super::SimpleBaseType) -> Result<(), Error> {
11971 if self.simple_type.is_some() {
11972 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11973 b"simpleType",
11974 )))?;
11975 }
11976 self.simple_type = Some(value);
11977 Ok(())
11978 }
11979 fn handle_annotation<'de>(
11980 &mut self,
11981 helper: &mut DeserializeHelper,
11982 output: DeserializerOutput<'de, super::Annotation>,
11983 fallback: &mut Option<AttributeTypeDeserializerState>,
11984 ) -> Result<ElementHandlerOutput<'de>, Error> {
11985 let DeserializerOutput {
11986 artifact,
11987 event,
11988 allow_any,
11989 } = output;
11990 if artifact.is_none() {
11991 fallback.get_or_insert(AttributeTypeDeserializerState::Annotation(None));
11992 *self.state__ = AttributeTypeDeserializerState::SimpleType(None);
11993 return Ok(ElementHandlerOutput::from_event(event, allow_any));
11994 }
11995 if let Some(fallback) = fallback.take() {
11996 self.finish_state(helper, fallback)?;
11997 }
11998 Ok(match artifact {
11999 DeserializerArtifact::None => unreachable!(),
12000 DeserializerArtifact::Data(data) => {
12001 self.store_annotation(data)?;
12002 *self.state__ = AttributeTypeDeserializerState::SimpleType(None);
12003 ElementHandlerOutput::from_event(event, allow_any)
12004 }
12005 DeserializerArtifact::Deserializer(deserializer) => {
12006 let ret = ElementHandlerOutput::from_event(event, allow_any);
12007 match &ret {
12008 ElementHandlerOutput::Continue { .. } => {
12009 fallback.get_or_insert(AttributeTypeDeserializerState::Annotation(
12010 Some(deserializer),
12011 ));
12012 *self.state__ = AttributeTypeDeserializerState::SimpleType(None);
12013 }
12014 ElementHandlerOutput::Break { .. } => {
12015 *self.state__ =
12016 AttributeTypeDeserializerState::Annotation(Some(deserializer));
12017 }
12018 }
12019 ret
12020 }
12021 })
12022 }
12023 fn handle_simple_type<'de>(
12024 &mut self,
12025 helper: &mut DeserializeHelper,
12026 output: DeserializerOutput<'de, super::SimpleBaseType>,
12027 fallback: &mut Option<AttributeTypeDeserializerState>,
12028 ) -> Result<ElementHandlerOutput<'de>, Error> {
12029 let DeserializerOutput {
12030 artifact,
12031 event,
12032 allow_any,
12033 } = output;
12034 if artifact.is_none() {
12035 fallback.get_or_insert(AttributeTypeDeserializerState::SimpleType(None));
12036 *self.state__ = AttributeTypeDeserializerState::Done__;
12037 return Ok(ElementHandlerOutput::from_event(event, allow_any));
12038 }
12039 if let Some(fallback) = fallback.take() {
12040 self.finish_state(helper, fallback)?;
12041 }
12042 Ok(match artifact {
12043 DeserializerArtifact::None => unreachable!(),
12044 DeserializerArtifact::Data(data) => {
12045 self.store_simple_type(data)?;
12046 *self.state__ = AttributeTypeDeserializerState::Done__;
12047 ElementHandlerOutput::from_event(event, allow_any)
12048 }
12049 DeserializerArtifact::Deserializer(deserializer) => {
12050 let ret = ElementHandlerOutput::from_event(event, allow_any);
12051 match &ret {
12052 ElementHandlerOutput::Continue { .. } => {
12053 fallback.get_or_insert(AttributeTypeDeserializerState::SimpleType(
12054 Some(deserializer),
12055 ));
12056 *self.state__ = AttributeTypeDeserializerState::Done__;
12057 }
12058 ElementHandlerOutput::Break { .. } => {
12059 *self.state__ =
12060 AttributeTypeDeserializerState::SimpleType(Some(deserializer));
12061 }
12062 }
12063 ret
12064 }
12065 })
12066 }
12067 }
12068 impl<'de> Deserializer<'de, super::AttributeType> for Box<AttributeTypeDeserializer> {
12069 fn init(
12070 helper: &mut DeserializeHelper,
12071 event: Event<'de>,
12072 ) -> DeserializerResult<'de, super::AttributeType> {
12073 helper.init_deserializer_from_start_event(
12074 event,
12075 AttributeTypeDeserializer::from_bytes_start,
12076 )
12077 }
12078 fn next(
12079 mut self,
12080 helper: &mut DeserializeHelper,
12081 event: Event<'de>,
12082 ) -> DeserializerResult<'de, super::AttributeType> {
12083 use AttributeTypeDeserializerState as S;
12084 let mut event = event;
12085 let mut fallback = None;
12086 let mut allow_any_element = false;
12087 let (event, allow_any) = loop {
12088 let state = replace(&mut *self.state__, S::Unknown__);
12089 event = match (state, event) {
12090 (S::Unknown__, _) => unreachable!(),
12091 (S::Annotation(Some(deserializer)), event) => {
12092 let output = deserializer.next(helper, event)?;
12093 match self.handle_annotation(helper, output, &mut fallback)? {
12094 ElementHandlerOutput::Continue { event, allow_any } => {
12095 allow_any_element = allow_any_element || allow_any;
12096 event
12097 }
12098 ElementHandlerOutput::Break { event, allow_any } => {
12099 break (event, allow_any)
12100 }
12101 }
12102 }
12103 (S::SimpleType(Some(deserializer)), event) => {
12104 let output = deserializer.next(helper, event)?;
12105 match self.handle_simple_type(helper, output, &mut fallback)? {
12106 ElementHandlerOutput::Continue { event, allow_any } => {
12107 allow_any_element = allow_any_element || allow_any;
12108 event
12109 }
12110 ElementHandlerOutput::Break { event, allow_any } => {
12111 break (event, allow_any)
12112 }
12113 }
12114 }
12115 (_, Event::End(_)) => {
12116 if let Some(fallback) = fallback.take() {
12117 self.finish_state(helper, fallback)?;
12118 }
12119 return Ok(DeserializerOutput {
12120 artifact: DeserializerArtifact::Data(self.finish(helper)?),
12121 event: DeserializerEvent::None,
12122 allow_any: false,
12123 });
12124 }
12125 (S::Init__, event) => {
12126 fallback.get_or_insert(S::Init__);
12127 *self.state__ = AttributeTypeDeserializerState::Annotation(None);
12128 event
12129 }
12130 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
12131 let output = helper.init_start_tag_deserializer(
12132 event,
12133 Some(&super::NS_XS),
12134 b"annotation",
12135 false,
12136 )?;
12137 match self.handle_annotation(helper, output, &mut fallback)? {
12138 ElementHandlerOutput::Continue { event, allow_any } => {
12139 allow_any_element = allow_any_element || allow_any;
12140 event
12141 }
12142 ElementHandlerOutput::Break { event, allow_any } => {
12143 break (event, allow_any)
12144 }
12145 }
12146 }
12147 (S::SimpleType(None), event @ (Event::Start(_) | Event::Empty(_))) => {
12148 let output = helper.init_start_tag_deserializer(
12149 event,
12150 Some(&super::NS_XS),
12151 b"simpleType",
12152 true,
12153 )?;
12154 match self.handle_simple_type(helper, output, &mut fallback)? {
12155 ElementHandlerOutput::Continue { event, allow_any } => {
12156 allow_any_element = allow_any_element || allow_any;
12157 event
12158 }
12159 ElementHandlerOutput::Break { event, allow_any } => {
12160 break (event, allow_any)
12161 }
12162 }
12163 }
12164 (S::Done__, event) => {
12165 fallback.get_or_insert(S::Done__);
12166 break (DeserializerEvent::Continue(event), allow_any_element);
12167 }
12168 (state, event) => {
12169 *self.state__ = state;
12170 break (DeserializerEvent::Break(event), false);
12171 }
12172 }
12173 };
12174 if let Some(fallback) = fallback {
12175 *self.state__ = fallback;
12176 }
12177 Ok(DeserializerOutput {
12178 artifact: DeserializerArtifact::Deserializer(self),
12179 event,
12180 allow_any,
12181 })
12182 }
12183 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::AttributeType, Error> {
12184 let state = replace(
12185 &mut *self.state__,
12186 AttributeTypeDeserializerState::Unknown__,
12187 );
12188 self.finish_state(helper, state)?;
12189 Ok(super::AttributeType {
12190 id: self.id,
12191 name: self.name,
12192 ref_: self.ref_,
12193 type_: self.type_,
12194 use_: self.use_,
12195 default: self.default,
12196 fixed: self.fixed,
12197 form: self.form,
12198 target_namespace: self.target_namespace,
12199 inheritable: self.inheritable,
12200 annotation: self.annotation,
12201 simple_type: self.simple_type,
12202 })
12203 }
12204 }
12205 #[derive(Debug)]
12206 pub struct NotationDeserializer {
12207 id: Option<String>,
12208 name: String,
12209 public: Option<String>,
12210 system: Option<String>,
12211 annotation: Option<super::Annotation>,
12212 state__: Box<NotationDeserializerState>,
12213 }
12214 #[derive(Debug)]
12215 enum NotationDeserializerState {
12216 Init__,
12217 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
12218 Done__,
12219 Unknown__,
12220 }
12221 impl NotationDeserializer {
12222 fn from_bytes_start(
12223 helper: &mut DeserializeHelper,
12224 bytes_start: &BytesStart<'_>,
12225 ) -> Result<Box<Self>, Error> {
12226 let mut id: Option<String> = None;
12227 let mut name: Option<String> = None;
12228 let mut public: Option<String> = None;
12229 let mut system: Option<String> = None;
12230 for attrib in helper.filter_xmlns_attributes(bytes_start) {
12231 let attrib = attrib?;
12232 if matches!(
12233 helper.resolve_local_name(attrib.key, &super::NS_XS),
12234 Some(b"id")
12235 ) {
12236 helper.read_attrib(&mut id, b"id", &attrib.value)?;
12237 } else if matches!(
12238 helper.resolve_local_name(attrib.key, &super::NS_XS),
12239 Some(b"name")
12240 ) {
12241 helper.read_attrib(&mut name, b"name", &attrib.value)?;
12242 } else if matches!(
12243 helper.resolve_local_name(attrib.key, &super::NS_XS),
12244 Some(b"public")
12245 ) {
12246 helper.read_attrib(&mut public, b"public", &attrib.value)?;
12247 } else if matches!(
12248 helper.resolve_local_name(attrib.key, &super::NS_XS),
12249 Some(b"system")
12250 ) {
12251 helper.read_attrib(&mut system, b"system", &attrib.value)?;
12252 }
12253 }
12254 Ok(Box::new(Self {
12255 id: id,
12256 name: name.ok_or_else(|| ErrorKind::MissingAttribute("name".into()))?,
12257 public: public,
12258 system: system,
12259 annotation: None,
12260 state__: Box::new(NotationDeserializerState::Init__),
12261 }))
12262 }
12263 fn finish_state(
12264 &mut self,
12265 helper: &mut DeserializeHelper,
12266 state: NotationDeserializerState,
12267 ) -> Result<(), Error> {
12268 use NotationDeserializerState as S;
12269 match state {
12270 S::Annotation(Some(deserializer)) => {
12271 self.store_annotation(deserializer.finish(helper)?)?
12272 }
12273 _ => (),
12274 }
12275 Ok(())
12276 }
12277 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
12278 if self.annotation.is_some() {
12279 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
12280 b"annotation",
12281 )))?;
12282 }
12283 self.annotation = Some(value);
12284 Ok(())
12285 }
12286 fn handle_annotation<'de>(
12287 &mut self,
12288 helper: &mut DeserializeHelper,
12289 output: DeserializerOutput<'de, super::Annotation>,
12290 fallback: &mut Option<NotationDeserializerState>,
12291 ) -> Result<ElementHandlerOutput<'de>, Error> {
12292 let DeserializerOutput {
12293 artifact,
12294 event,
12295 allow_any,
12296 } = output;
12297 if artifact.is_none() {
12298 fallback.get_or_insert(NotationDeserializerState::Annotation(None));
12299 *self.state__ = NotationDeserializerState::Done__;
12300 return Ok(ElementHandlerOutput::from_event(event, allow_any));
12301 }
12302 if let Some(fallback) = fallback.take() {
12303 self.finish_state(helper, fallback)?;
12304 }
12305 Ok(match artifact {
12306 DeserializerArtifact::None => unreachable!(),
12307 DeserializerArtifact::Data(data) => {
12308 self.store_annotation(data)?;
12309 *self.state__ = NotationDeserializerState::Done__;
12310 ElementHandlerOutput::from_event(event, allow_any)
12311 }
12312 DeserializerArtifact::Deserializer(deserializer) => {
12313 let ret = ElementHandlerOutput::from_event(event, allow_any);
12314 match &ret {
12315 ElementHandlerOutput::Continue { .. } => {
12316 fallback.get_or_insert(NotationDeserializerState::Annotation(Some(
12317 deserializer,
12318 )));
12319 *self.state__ = NotationDeserializerState::Done__;
12320 }
12321 ElementHandlerOutput::Break { .. } => {
12322 *self.state__ =
12323 NotationDeserializerState::Annotation(Some(deserializer));
12324 }
12325 }
12326 ret
12327 }
12328 })
12329 }
12330 }
12331 impl<'de> Deserializer<'de, super::Notation> for Box<NotationDeserializer> {
12332 fn init(
12333 helper: &mut DeserializeHelper,
12334 event: Event<'de>,
12335 ) -> DeserializerResult<'de, super::Notation> {
12336 helper.init_deserializer_from_start_event(event, NotationDeserializer::from_bytes_start)
12337 }
12338 fn next(
12339 mut self,
12340 helper: &mut DeserializeHelper,
12341 event: Event<'de>,
12342 ) -> DeserializerResult<'de, super::Notation> {
12343 use NotationDeserializerState as S;
12344 let mut event = event;
12345 let mut fallback = None;
12346 let mut allow_any_element = false;
12347 let (event, allow_any) = loop {
12348 let state = replace(&mut *self.state__, S::Unknown__);
12349 event = match (state, event) {
12350 (S::Unknown__, _) => unreachable!(),
12351 (S::Annotation(Some(deserializer)), event) => {
12352 let output = deserializer.next(helper, event)?;
12353 match self.handle_annotation(helper, output, &mut fallback)? {
12354 ElementHandlerOutput::Continue { event, allow_any } => {
12355 allow_any_element = allow_any_element || allow_any;
12356 event
12357 }
12358 ElementHandlerOutput::Break { event, allow_any } => {
12359 break (event, allow_any)
12360 }
12361 }
12362 }
12363 (_, Event::End(_)) => {
12364 if let Some(fallback) = fallback.take() {
12365 self.finish_state(helper, fallback)?;
12366 }
12367 return Ok(DeserializerOutput {
12368 artifact: DeserializerArtifact::Data(self.finish(helper)?),
12369 event: DeserializerEvent::None,
12370 allow_any: false,
12371 });
12372 }
12373 (S::Init__, event) => {
12374 fallback.get_or_insert(S::Init__);
12375 *self.state__ = NotationDeserializerState::Annotation(None);
12376 event
12377 }
12378 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
12379 let output = helper.init_start_tag_deserializer(
12380 event,
12381 Some(&super::NS_XS),
12382 b"annotation",
12383 false,
12384 )?;
12385 match self.handle_annotation(helper, output, &mut fallback)? {
12386 ElementHandlerOutput::Continue { event, allow_any } => {
12387 allow_any_element = allow_any_element || allow_any;
12388 event
12389 }
12390 ElementHandlerOutput::Break { event, allow_any } => {
12391 break (event, allow_any)
12392 }
12393 }
12394 }
12395 (S::Done__, event) => {
12396 fallback.get_or_insert(S::Done__);
12397 break (DeserializerEvent::Continue(event), allow_any_element);
12398 }
12399 (state, event) => {
12400 *self.state__ = state;
12401 break (DeserializerEvent::Break(event), false);
12402 }
12403 }
12404 };
12405 if let Some(fallback) = fallback {
12406 *self.state__ = fallback;
12407 }
12408 Ok(DeserializerOutput {
12409 artifact: DeserializerArtifact::Deserializer(self),
12410 event,
12411 allow_any,
12412 })
12413 }
12414 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::Notation, Error> {
12415 let state = replace(&mut *self.state__, NotationDeserializerState::Unknown__);
12416 self.finish_state(helper, state)?;
12417 Ok(super::Notation {
12418 id: self.id,
12419 name: self.name,
12420 public: self.public,
12421 system: self.system,
12422 annotation: self.annotation,
12423 })
12424 }
12425 }
12426 #[derive(Debug)]
12427 pub struct WildcardTypeDeserializer {
12428 id: Option<String>,
12429 namespace: Option<super::NamespaceListType>,
12430 not_namespace: Option<super::NotNamespaceType>,
12431 process_contents: super::ProcessContentsType,
12432 annotation: Option<super::Annotation>,
12433 state__: Box<WildcardTypeDeserializerState>,
12434 }
12435 #[derive(Debug)]
12436 enum WildcardTypeDeserializerState {
12437 Init__,
12438 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
12439 Done__,
12440 Unknown__,
12441 }
12442 impl WildcardTypeDeserializer {
12443 fn from_bytes_start(
12444 helper: &mut DeserializeHelper,
12445 bytes_start: &BytesStart<'_>,
12446 ) -> Result<Box<Self>, Error> {
12447 let mut id: Option<String> = None;
12448 let mut namespace: Option<super::NamespaceListType> = None;
12449 let mut not_namespace: Option<super::NotNamespaceType> = None;
12450 let mut process_contents: Option<super::ProcessContentsType> = None;
12451 for attrib in helper.filter_xmlns_attributes(bytes_start) {
12452 let attrib = attrib?;
12453 if matches!(
12454 helper.resolve_local_name(attrib.key, &super::NS_XS),
12455 Some(b"id")
12456 ) {
12457 helper.read_attrib(&mut id, b"id", &attrib.value)?;
12458 } else if matches!(
12459 helper.resolve_local_name(attrib.key, &super::NS_XS),
12460 Some(b"namespace")
12461 ) {
12462 helper.read_attrib(&mut namespace, b"namespace", &attrib.value)?;
12463 } else if matches!(
12464 helper.resolve_local_name(attrib.key, &super::NS_XS),
12465 Some(b"notNamespace")
12466 ) {
12467 helper.read_attrib(&mut not_namespace, b"notNamespace", &attrib.value)?;
12468 } else if matches!(
12469 helper.resolve_local_name(attrib.key, &super::NS_XS),
12470 Some(b"processContents")
12471 ) {
12472 helper.read_attrib(&mut process_contents, b"processContents", &attrib.value)?;
12473 }
12474 }
12475 Ok(Box::new(Self {
12476 id: id,
12477 namespace: namespace,
12478 not_namespace: not_namespace,
12479 process_contents: process_contents
12480 .unwrap_or_else(super::WildcardType::default_process_contents),
12481 annotation: None,
12482 state__: Box::new(WildcardTypeDeserializerState::Init__),
12483 }))
12484 }
12485 fn finish_state(
12486 &mut self,
12487 helper: &mut DeserializeHelper,
12488 state: WildcardTypeDeserializerState,
12489 ) -> Result<(), Error> {
12490 use WildcardTypeDeserializerState as S;
12491 match state {
12492 S::Annotation(Some(deserializer)) => {
12493 self.store_annotation(deserializer.finish(helper)?)?
12494 }
12495 _ => (),
12496 }
12497 Ok(())
12498 }
12499 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
12500 if self.annotation.is_some() {
12501 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
12502 b"annotation",
12503 )))?;
12504 }
12505 self.annotation = Some(value);
12506 Ok(())
12507 }
12508 fn handle_annotation<'de>(
12509 &mut self,
12510 helper: &mut DeserializeHelper,
12511 output: DeserializerOutput<'de, super::Annotation>,
12512 fallback: &mut Option<WildcardTypeDeserializerState>,
12513 ) -> Result<ElementHandlerOutput<'de>, Error> {
12514 let DeserializerOutput {
12515 artifact,
12516 event,
12517 allow_any,
12518 } = output;
12519 if artifact.is_none() {
12520 fallback.get_or_insert(WildcardTypeDeserializerState::Annotation(None));
12521 *self.state__ = WildcardTypeDeserializerState::Done__;
12522 return Ok(ElementHandlerOutput::from_event(event, allow_any));
12523 }
12524 if let Some(fallback) = fallback.take() {
12525 self.finish_state(helper, fallback)?;
12526 }
12527 Ok(match artifact {
12528 DeserializerArtifact::None => unreachable!(),
12529 DeserializerArtifact::Data(data) => {
12530 self.store_annotation(data)?;
12531 *self.state__ = WildcardTypeDeserializerState::Done__;
12532 ElementHandlerOutput::from_event(event, allow_any)
12533 }
12534 DeserializerArtifact::Deserializer(deserializer) => {
12535 let ret = ElementHandlerOutput::from_event(event, allow_any);
12536 match &ret {
12537 ElementHandlerOutput::Continue { .. } => {
12538 fallback.get_or_insert(WildcardTypeDeserializerState::Annotation(
12539 Some(deserializer),
12540 ));
12541 *self.state__ = WildcardTypeDeserializerState::Done__;
12542 }
12543 ElementHandlerOutput::Break { .. } => {
12544 *self.state__ =
12545 WildcardTypeDeserializerState::Annotation(Some(deserializer));
12546 }
12547 }
12548 ret
12549 }
12550 })
12551 }
12552 }
12553 impl<'de> Deserializer<'de, super::WildcardType> for Box<WildcardTypeDeserializer> {
12554 fn init(
12555 helper: &mut DeserializeHelper,
12556 event: Event<'de>,
12557 ) -> DeserializerResult<'de, super::WildcardType> {
12558 helper.init_deserializer_from_start_event(
12559 event,
12560 WildcardTypeDeserializer::from_bytes_start,
12561 )
12562 }
12563 fn next(
12564 mut self,
12565 helper: &mut DeserializeHelper,
12566 event: Event<'de>,
12567 ) -> DeserializerResult<'de, super::WildcardType> {
12568 use WildcardTypeDeserializerState as S;
12569 let mut event = event;
12570 let mut fallback = None;
12571 let mut allow_any_element = false;
12572 let (event, allow_any) = loop {
12573 let state = replace(&mut *self.state__, S::Unknown__);
12574 event = match (state, event) {
12575 (S::Unknown__, _) => unreachable!(),
12576 (S::Annotation(Some(deserializer)), event) => {
12577 let output = deserializer.next(helper, event)?;
12578 match self.handle_annotation(helper, output, &mut fallback)? {
12579 ElementHandlerOutput::Continue { event, allow_any } => {
12580 allow_any_element = allow_any_element || allow_any;
12581 event
12582 }
12583 ElementHandlerOutput::Break { event, allow_any } => {
12584 break (event, allow_any)
12585 }
12586 }
12587 }
12588 (_, Event::End(_)) => {
12589 if let Some(fallback) = fallback.take() {
12590 self.finish_state(helper, fallback)?;
12591 }
12592 return Ok(DeserializerOutput {
12593 artifact: DeserializerArtifact::Data(self.finish(helper)?),
12594 event: DeserializerEvent::None,
12595 allow_any: false,
12596 });
12597 }
12598 (S::Init__, event) => {
12599 fallback.get_or_insert(S::Init__);
12600 *self.state__ = WildcardTypeDeserializerState::Annotation(None);
12601 event
12602 }
12603 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
12604 let output = helper.init_start_tag_deserializer(
12605 event,
12606 Some(&super::NS_XS),
12607 b"annotation",
12608 false,
12609 )?;
12610 match self.handle_annotation(helper, output, &mut fallback)? {
12611 ElementHandlerOutput::Continue { event, allow_any } => {
12612 allow_any_element = allow_any_element || allow_any;
12613 event
12614 }
12615 ElementHandlerOutput::Break { event, allow_any } => {
12616 break (event, allow_any)
12617 }
12618 }
12619 }
12620 (S::Done__, event) => {
12621 fallback.get_or_insert(S::Done__);
12622 break (DeserializerEvent::Continue(event), allow_any_element);
12623 }
12624 (state, event) => {
12625 *self.state__ = state;
12626 break (DeserializerEvent::Break(event), false);
12627 }
12628 }
12629 };
12630 if let Some(fallback) = fallback {
12631 *self.state__ = fallback;
12632 }
12633 Ok(DeserializerOutput {
12634 artifact: DeserializerArtifact::Deserializer(self),
12635 event,
12636 allow_any,
12637 })
12638 }
12639 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::WildcardType, Error> {
12640 let state = replace(&mut *self.state__, WildcardTypeDeserializerState::Unknown__);
12641 self.finish_state(helper, state)?;
12642 Ok(super::WildcardType {
12643 id: self.id,
12644 namespace: self.namespace,
12645 not_namespace: self.not_namespace,
12646 process_contents: self.process_contents,
12647 annotation: self.annotation,
12648 })
12649 }
12650 }
12651 #[derive(Debug)]
12652 pub struct RestrictionDeserializer {
12653 id: Option<String>,
12654 base: Option<QName>,
12655 content: Vec<super::RestrictionContent>,
12656 state__: Box<RestrictionDeserializerState>,
12657 }
12658 #[derive(Debug)]
12659 enum RestrictionDeserializerState {
12660 Init__,
12661 Next__,
12662 Content__(<super::RestrictionContent as WithDeserializer>::Deserializer),
12663 Unknown__,
12664 }
12665 impl RestrictionDeserializer {
12666 fn from_bytes_start(
12667 helper: &mut DeserializeHelper,
12668 bytes_start: &BytesStart<'_>,
12669 ) -> Result<Box<Self>, Error> {
12670 let mut id: Option<String> = None;
12671 let mut base: Option<QName> = None;
12672 for attrib in helper.filter_xmlns_attributes(bytes_start) {
12673 let attrib = attrib?;
12674 if matches!(
12675 helper.resolve_local_name(attrib.key, &super::NS_XS),
12676 Some(b"id")
12677 ) {
12678 helper.read_attrib(&mut id, b"id", &attrib.value)?;
12679 } else if matches!(
12680 helper.resolve_local_name(attrib.key, &super::NS_XS),
12681 Some(b"base")
12682 ) {
12683 helper.read_attrib(&mut base, b"base", &attrib.value)?;
12684 }
12685 }
12686 Ok(Box::new(Self {
12687 id: id,
12688 base: base,
12689 content: Vec::new(),
12690 state__: Box::new(RestrictionDeserializerState::Init__),
12691 }))
12692 }
12693 fn finish_state(
12694 &mut self,
12695 helper: &mut DeserializeHelper,
12696 state: RestrictionDeserializerState,
12697 ) -> Result<(), Error> {
12698 if let RestrictionDeserializerState::Content__(deserializer) = state {
12699 self.store_content(deserializer.finish(helper)?)?;
12700 }
12701 Ok(())
12702 }
12703 fn store_content(&mut self, value: super::RestrictionContent) -> Result<(), Error> {
12704 self.content.push(value);
12705 Ok(())
12706 }
12707 fn handle_content<'de>(
12708 &mut self,
12709 helper: &mut DeserializeHelper,
12710 output: DeserializerOutput<'de, super::RestrictionContent>,
12711 fallback: &mut Option<RestrictionDeserializerState>,
12712 ) -> Result<ElementHandlerOutput<'de>, Error> {
12713 let DeserializerOutput {
12714 artifact,
12715 event,
12716 allow_any,
12717 } = output;
12718 if artifact.is_none() {
12719 *self.state__ = fallback
12720 .take()
12721 .unwrap_or(RestrictionDeserializerState::Next__);
12722 return Ok(ElementHandlerOutput::break_(event, allow_any));
12723 }
12724 if let Some(fallback) = fallback.take() {
12725 self.finish_state(helper, fallback)?;
12726 }
12727 Ok(match artifact {
12728 DeserializerArtifact::None => unreachable!(),
12729 DeserializerArtifact::Data(data) => {
12730 self.store_content(data)?;
12731 *self.state__ = RestrictionDeserializerState::Next__;
12732 ElementHandlerOutput::from_event(event, allow_any)
12733 }
12734 DeserializerArtifact::Deserializer(deserializer) => {
12735 let ret = ElementHandlerOutput::from_event(event, allow_any);
12736 match &ret {
12737 ElementHandlerOutput::Break { .. } => {
12738 *self.state__ = RestrictionDeserializerState::Content__(deserializer);
12739 }
12740 ElementHandlerOutput::Continue { .. } => {
12741 fallback.get_or_insert(RestrictionDeserializerState::Content__(
12742 deserializer,
12743 ));
12744 *self.state__ = RestrictionDeserializerState::Next__;
12745 }
12746 }
12747 ret
12748 }
12749 })
12750 }
12751 }
12752 impl<'de> Deserializer<'de, super::Restriction> for Box<RestrictionDeserializer> {
12753 fn init(
12754 helper: &mut DeserializeHelper,
12755 event: Event<'de>,
12756 ) -> DeserializerResult<'de, super::Restriction> {
12757 helper.init_deserializer_from_start_event(
12758 event,
12759 RestrictionDeserializer::from_bytes_start,
12760 )
12761 }
12762 fn next(
12763 mut self,
12764 helper: &mut DeserializeHelper,
12765 event: Event<'de>,
12766 ) -> DeserializerResult<'de, super::Restriction> {
12767 use RestrictionDeserializerState as S;
12768 let mut event = event;
12769 let mut fallback = None;
12770 let (event, allow_any) = loop {
12771 let state = replace(&mut *self.state__, S::Unknown__);
12772 event = match (state, event) {
12773 (S::Unknown__, _) => unreachable!(),
12774 (S::Content__(deserializer), event) => {
12775 let output = deserializer.next(helper, event)?;
12776 match self.handle_content(helper, output, &mut fallback)? {
12777 ElementHandlerOutput::Break { event, allow_any } => {
12778 break (event, allow_any)
12779 }
12780 ElementHandlerOutput::Continue { event, .. } => event,
12781 }
12782 }
12783 (_, Event::End(_)) => {
12784 return Ok(DeserializerOutput {
12785 artifact: DeserializerArtifact::Data(self.finish(helper)?),
12786 event: DeserializerEvent::None,
12787 allow_any: false,
12788 });
12789 }
12790 (state @ (S::Init__ | S::Next__), event) => {
12791 fallback.get_or_insert(state);
12792 let output =
12793 <super::RestrictionContent as WithDeserializer>::Deserializer::init(
12794 helper, event,
12795 )?;
12796 match self.handle_content(helper, output, &mut fallback)? {
12797 ElementHandlerOutput::Break { event, allow_any } => {
12798 break (event, allow_any)
12799 }
12800 ElementHandlerOutput::Continue { event, .. } => event,
12801 }
12802 }
12803 }
12804 };
12805 let artifact = DeserializerArtifact::Deserializer(self);
12806 Ok(DeserializerOutput {
12807 artifact,
12808 event,
12809 allow_any,
12810 })
12811 }
12812 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::Restriction, Error> {
12813 let state = replace(&mut *self.state__, RestrictionDeserializerState::Unknown__);
12814 self.finish_state(helper, state)?;
12815 Ok(super::Restriction {
12816 id: self.id,
12817 base: self.base,
12818 content: self.content,
12819 })
12820 }
12821 }
12822 #[derive(Debug)]
12823 pub struct RestrictionContentDeserializer {
12824 state__: Box<RestrictionContentDeserializerState>,
12825 }
12826 #[derive(Debug)]
12827 pub enum RestrictionContentDeserializerState {
12828 Init__,
12829 Annotation(
12830 Option<super::Annotation>,
12831 Option<<super::Annotation as WithDeserializer>::Deserializer>,
12832 ),
12833 SimpleType(
12834 Option<super::SimpleBaseType>,
12835 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
12836 ),
12837 Facet(
12838 Option<super::Facet>,
12839 Option<<super::Facet as WithDeserializer>::Deserializer>,
12840 ),
12841 Done__(super::RestrictionContent),
12842 Unknown__,
12843 }
12844 impl RestrictionContentDeserializer {
12845 fn find_suitable<'de>(
12846 &mut self,
12847 helper: &mut DeserializeHelper,
12848 event: Event<'de>,
12849 fallback: &mut Option<RestrictionContentDeserializerState>,
12850 ) -> Result<ElementHandlerOutput<'de>, Error> {
12851 let mut event = event;
12852 if let Event::Start(x) | Event::Empty(x) = &event {
12853 if matches!(
12854 helper.resolve_local_name(x.name(), &super::NS_XS),
12855 Some(b"annotation")
12856 ) {
12857 let output =
12858 <super::Annotation as WithDeserializer>::Deserializer::init(helper, event)?;
12859 return self.handle_annotation(
12860 helper,
12861 Default::default(),
12862 output,
12863 &mut *fallback,
12864 );
12865 }
12866 if matches!(
12867 helper.resolve_local_name(x.name(), &super::NS_XS),
12868 Some(b"simpleType")
12869 ) {
12870 let output = <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
12871 helper, event,
12872 )?;
12873 return self.handle_simple_type(
12874 helper,
12875 Default::default(),
12876 output,
12877 &mut *fallback,
12878 );
12879 }
12880 event = {
12881 let output =
12882 <super::Facet as WithDeserializer>::Deserializer::init(helper, event)?;
12883 match self.handle_facet(helper, Default::default(), output, &mut *fallback)? {
12884 ElementHandlerOutput::Continue { event, .. } => event,
12885 output => {
12886 return Ok(output);
12887 }
12888 }
12889 };
12890 }
12891 *self.state__ = fallback
12892 .take()
12893 .unwrap_or(RestrictionContentDeserializerState::Init__);
12894 Ok(ElementHandlerOutput::return_to_parent(event, true))
12895 }
12896 fn finish_state(
12897 helper: &mut DeserializeHelper,
12898 state: RestrictionContentDeserializerState,
12899 ) -> Result<super::RestrictionContent, Error> {
12900 use RestrictionContentDeserializerState as S;
12901 match state {
12902 S::Unknown__ => unreachable!(),
12903 S::Init__ => Err(ErrorKind::MissingContent.into()),
12904 S::Annotation(mut values, deserializer) => {
12905 if let Some(deserializer) = deserializer {
12906 let value = deserializer.finish(helper)?;
12907 RestrictionContentDeserializer::store_annotation(&mut values, value)?;
12908 }
12909 Ok(super::RestrictionContent::Annotation(values.ok_or_else(
12910 || ErrorKind::MissingElement("annotation".into()),
12911 )?))
12912 }
12913 S::SimpleType(mut values, deserializer) => {
12914 if let Some(deserializer) = deserializer {
12915 let value = deserializer.finish(helper)?;
12916 RestrictionContentDeserializer::store_simple_type(&mut values, value)?;
12917 }
12918 Ok(super::RestrictionContent::SimpleType(values.ok_or_else(
12919 || ErrorKind::MissingElement("simpleType".into()),
12920 )?))
12921 }
12922 S::Facet(mut values, deserializer) => {
12923 if let Some(deserializer) = deserializer {
12924 let value = deserializer.finish(helper)?;
12925 RestrictionContentDeserializer::store_facet(&mut values, value)?;
12926 }
12927 Ok(super::RestrictionContent::Facet(values.ok_or_else(
12928 || ErrorKind::MissingElement("facet".into()),
12929 )?))
12930 }
12931 S::Done__(data) => Ok(data),
12932 }
12933 }
12934 fn store_annotation(
12935 values: &mut Option<super::Annotation>,
12936 value: super::Annotation,
12937 ) -> Result<(), Error> {
12938 if values.is_some() {
12939 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
12940 b"annotation",
12941 )))?;
12942 }
12943 *values = Some(value);
12944 Ok(())
12945 }
12946 fn store_simple_type(
12947 values: &mut Option<super::SimpleBaseType>,
12948 value: super::SimpleBaseType,
12949 ) -> Result<(), Error> {
12950 if values.is_some() {
12951 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
12952 b"simpleType",
12953 )))?;
12954 }
12955 *values = Some(value);
12956 Ok(())
12957 }
12958 fn store_facet(
12959 values: &mut Option<super::Facet>,
12960 value: super::Facet,
12961 ) -> Result<(), Error> {
12962 if values.is_some() {
12963 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
12964 b"facet",
12965 )))?;
12966 }
12967 *values = Some(value);
12968 Ok(())
12969 }
12970 fn handle_annotation<'de>(
12971 &mut self,
12972 helper: &mut DeserializeHelper,
12973 mut values: Option<super::Annotation>,
12974 output: DeserializerOutput<'de, super::Annotation>,
12975 fallback: &mut Option<RestrictionContentDeserializerState>,
12976 ) -> Result<ElementHandlerOutput<'de>, Error> {
12977 let DeserializerOutput {
12978 artifact,
12979 event,
12980 allow_any,
12981 } = output;
12982 if artifact.is_none() {
12983 *self.state__ = match fallback.take() {
12984 None if values.is_none() => {
12985 *self.state__ = RestrictionContentDeserializerState::Init__;
12986 return Ok(ElementHandlerOutput::from_event(event, allow_any));
12987 }
12988 None => RestrictionContentDeserializerState::Annotation(values, None),
12989 Some(RestrictionContentDeserializerState::Annotation(
12990 _,
12991 Some(deserializer),
12992 )) => {
12993 RestrictionContentDeserializerState::Annotation(values, Some(deserializer))
12994 }
12995 _ => unreachable!(),
12996 };
12997 return Ok(ElementHandlerOutput::break_(event, allow_any));
12998 }
12999 match fallback.take() {
13000 None => (),
13001 Some(RestrictionContentDeserializerState::Annotation(_, Some(deserializer))) => {
13002 let data = deserializer.finish(helper)?;
13003 RestrictionContentDeserializer::store_annotation(&mut values, data)?;
13004 }
13005 Some(_) => unreachable!(),
13006 }
13007 Ok(match artifact {
13008 DeserializerArtifact::None => unreachable!(),
13009 DeserializerArtifact::Data(data) => {
13010 RestrictionContentDeserializer::store_annotation(&mut values, data)?;
13011 let data = RestrictionContentDeserializer::finish_state(
13012 helper,
13013 RestrictionContentDeserializerState::Annotation(values, None),
13014 )?;
13015 *self.state__ = RestrictionContentDeserializerState::Done__(data);
13016 ElementHandlerOutput::Break { event, allow_any }
13017 }
13018 DeserializerArtifact::Deserializer(deserializer) => {
13019 *self.state__ =
13020 RestrictionContentDeserializerState::Annotation(values, Some(deserializer));
13021 ElementHandlerOutput::from_event_end(event, allow_any)
13022 }
13023 })
13024 }
13025 fn handle_simple_type<'de>(
13026 &mut self,
13027 helper: &mut DeserializeHelper,
13028 mut values: Option<super::SimpleBaseType>,
13029 output: DeserializerOutput<'de, super::SimpleBaseType>,
13030 fallback: &mut Option<RestrictionContentDeserializerState>,
13031 ) -> Result<ElementHandlerOutput<'de>, Error> {
13032 let DeserializerOutput {
13033 artifact,
13034 event,
13035 allow_any,
13036 } = output;
13037 if artifact.is_none() {
13038 *self.state__ = match fallback.take() {
13039 None if values.is_none() => {
13040 *self.state__ = RestrictionContentDeserializerState::Init__;
13041 return Ok(ElementHandlerOutput::from_event(event, allow_any));
13042 }
13043 None => RestrictionContentDeserializerState::SimpleType(values, None),
13044 Some(RestrictionContentDeserializerState::SimpleType(
13045 _,
13046 Some(deserializer),
13047 )) => {
13048 RestrictionContentDeserializerState::SimpleType(values, Some(deserializer))
13049 }
13050 _ => unreachable!(),
13051 };
13052 return Ok(ElementHandlerOutput::break_(event, allow_any));
13053 }
13054 match fallback.take() {
13055 None => (),
13056 Some(RestrictionContentDeserializerState::SimpleType(_, Some(deserializer))) => {
13057 let data = deserializer.finish(helper)?;
13058 RestrictionContentDeserializer::store_simple_type(&mut values, data)?;
13059 }
13060 Some(_) => unreachable!(),
13061 }
13062 Ok(match artifact {
13063 DeserializerArtifact::None => unreachable!(),
13064 DeserializerArtifact::Data(data) => {
13065 RestrictionContentDeserializer::store_simple_type(&mut values, data)?;
13066 let data = RestrictionContentDeserializer::finish_state(
13067 helper,
13068 RestrictionContentDeserializerState::SimpleType(values, None),
13069 )?;
13070 *self.state__ = RestrictionContentDeserializerState::Done__(data);
13071 ElementHandlerOutput::Break { event, allow_any }
13072 }
13073 DeserializerArtifact::Deserializer(deserializer) => {
13074 *self.state__ =
13075 RestrictionContentDeserializerState::SimpleType(values, Some(deserializer));
13076 ElementHandlerOutput::from_event_end(event, allow_any)
13077 }
13078 })
13079 }
13080 fn handle_facet<'de>(
13081 &mut self,
13082 helper: &mut DeserializeHelper,
13083 mut values: Option<super::Facet>,
13084 output: DeserializerOutput<'de, super::Facet>,
13085 fallback: &mut Option<RestrictionContentDeserializerState>,
13086 ) -> Result<ElementHandlerOutput<'de>, Error> {
13087 let DeserializerOutput {
13088 artifact,
13089 event,
13090 allow_any,
13091 } = output;
13092 if artifact.is_none() {
13093 *self.state__ = match fallback.take() {
13094 None if values.is_none() => {
13095 *self.state__ = RestrictionContentDeserializerState::Init__;
13096 return Ok(ElementHandlerOutput::from_event(event, allow_any));
13097 }
13098 None => RestrictionContentDeserializerState::Facet(values, None),
13099 Some(RestrictionContentDeserializerState::Facet(_, Some(deserializer))) => {
13100 RestrictionContentDeserializerState::Facet(values, Some(deserializer))
13101 }
13102 _ => unreachable!(),
13103 };
13104 return Ok(ElementHandlerOutput::break_(event, allow_any));
13105 }
13106 match fallback.take() {
13107 None => (),
13108 Some(RestrictionContentDeserializerState::Facet(_, Some(deserializer))) => {
13109 let data = deserializer.finish(helper)?;
13110 RestrictionContentDeserializer::store_facet(&mut values, data)?;
13111 }
13112 Some(_) => unreachable!(),
13113 }
13114 Ok(match artifact {
13115 DeserializerArtifact::None => unreachable!(),
13116 DeserializerArtifact::Data(data) => {
13117 RestrictionContentDeserializer::store_facet(&mut values, data)?;
13118 let data = RestrictionContentDeserializer::finish_state(
13119 helper,
13120 RestrictionContentDeserializerState::Facet(values, None),
13121 )?;
13122 *self.state__ = RestrictionContentDeserializerState::Done__(data);
13123 ElementHandlerOutput::Break { event, allow_any }
13124 }
13125 DeserializerArtifact::Deserializer(deserializer) => {
13126 *self.state__ =
13127 RestrictionContentDeserializerState::Facet(values, Some(deserializer));
13128 ElementHandlerOutput::from_event_end(event, allow_any)
13129 }
13130 })
13131 }
13132 }
13133 impl<'de> Deserializer<'de, super::RestrictionContent> for Box<RestrictionContentDeserializer> {
13134 fn init(
13135 helper: &mut DeserializeHelper,
13136 event: Event<'de>,
13137 ) -> DeserializerResult<'de, super::RestrictionContent> {
13138 let deserializer = Box::new(RestrictionContentDeserializer {
13139 state__: Box::new(RestrictionContentDeserializerState::Init__),
13140 });
13141 let mut output = deserializer.next(helper, event)?;
13142 output.artifact = match output.artifact {
13143 DeserializerArtifact::Deserializer(x)
13144 if matches!(&*x.state__, RestrictionContentDeserializerState::Init__) =>
13145 {
13146 DeserializerArtifact::None
13147 }
13148 artifact => artifact,
13149 };
13150 Ok(output)
13151 }
13152 fn next(
13153 mut self,
13154 helper: &mut DeserializeHelper,
13155 event: Event<'de>,
13156 ) -> DeserializerResult<'de, super::RestrictionContent> {
13157 use RestrictionContentDeserializerState as S;
13158 let mut event = event;
13159 let mut fallback = None;
13160 let (event, allow_any) = loop {
13161 let state = replace(&mut *self.state__, S::Unknown__);
13162 event = match (state, event) {
13163 (S::Unknown__, _) => unreachable!(),
13164 (S::Annotation(values, Some(deserializer)), event) => {
13165 let output = deserializer.next(helper, event)?;
13166 match self.handle_annotation(helper, values, output, &mut fallback)? {
13167 ElementHandlerOutput::Break { event, allow_any } => {
13168 break (event, allow_any)
13169 }
13170 ElementHandlerOutput::Continue { event, .. } => event,
13171 }
13172 }
13173 (S::SimpleType(values, Some(deserializer)), event) => {
13174 let output = deserializer.next(helper, event)?;
13175 match self.handle_simple_type(helper, values, output, &mut fallback)? {
13176 ElementHandlerOutput::Break { event, allow_any } => {
13177 break (event, allow_any)
13178 }
13179 ElementHandlerOutput::Continue { event, .. } => event,
13180 }
13181 }
13182 (S::Facet(values, Some(deserializer)), event) => {
13183 let output = deserializer.next(helper, event)?;
13184 match self.handle_facet(helper, values, output, &mut fallback)? {
13185 ElementHandlerOutput::Break { event, allow_any } => {
13186 break (event, allow_any)
13187 }
13188 ElementHandlerOutput::Continue { event, .. } => event,
13189 }
13190 }
13191 (state, event @ Event::End(_)) => {
13192 return Ok(DeserializerOutput {
13193 artifact: DeserializerArtifact::Data(
13194 RestrictionContentDeserializer::finish_state(helper, state)?,
13195 ),
13196 event: DeserializerEvent::Continue(event),
13197 allow_any: false,
13198 });
13199 }
13200 (S::Init__, event) => match self.find_suitable(helper, event, &mut fallback)? {
13201 ElementHandlerOutput::Break { event, allow_any } => {
13202 break (event, allow_any)
13203 }
13204 ElementHandlerOutput::Continue { event, .. } => event,
13205 },
13206 (S::Annotation(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
13207 let output = helper.init_start_tag_deserializer(
13208 event,
13209 Some(&super::NS_XS),
13210 b"annotation",
13211 false,
13212 )?;
13213 match self.handle_annotation(helper, values, output, &mut fallback)? {
13214 ElementHandlerOutput::Break { event, allow_any } => {
13215 break (event, allow_any)
13216 }
13217 ElementHandlerOutput::Continue { event, .. } => event,
13218 }
13219 }
13220 (S::SimpleType(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
13221 let output = helper.init_start_tag_deserializer(
13222 event,
13223 Some(&super::NS_XS),
13224 b"simpleType",
13225 true,
13226 )?;
13227 match self.handle_simple_type(helper, values, output, &mut fallback)? {
13228 ElementHandlerOutput::Break { event, allow_any } => {
13229 break (event, allow_any)
13230 }
13231 ElementHandlerOutput::Continue { event, .. } => event,
13232 }
13233 }
13234 (S::Facet(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
13235 let output =
13236 <super::Facet as WithDeserializer>::Deserializer::init(helper, event)?;
13237 match self.handle_facet(helper, values, output, &mut fallback)? {
13238 ElementHandlerOutput::Break { event, allow_any } => {
13239 break (event, allow_any)
13240 }
13241 ElementHandlerOutput::Continue { event, .. } => event,
13242 }
13243 }
13244 (s @ S::Done__(_), event) => {
13245 *self.state__ = s;
13246 break (DeserializerEvent::Continue(event), false);
13247 }
13248 (state, event) => {
13249 *self.state__ = state;
13250 break (DeserializerEvent::Break(event), false);
13251 }
13252 }
13253 };
13254 let artifact = if matches!(&*self.state__, S::Done__(_)) {
13255 DeserializerArtifact::Data(self.finish(helper)?)
13256 } else {
13257 DeserializerArtifact::Deserializer(self)
13258 };
13259 Ok(DeserializerOutput {
13260 artifact,
13261 event,
13262 allow_any,
13263 })
13264 }
13265 fn finish(
13266 self,
13267 helper: &mut DeserializeHelper,
13268 ) -> Result<super::RestrictionContent, Error> {
13269 RestrictionContentDeserializer::finish_state(helper, *self.state__)
13270 }
13271 }
13272 #[derive(Debug)]
13273 pub struct ListDeserializer {
13274 id: Option<String>,
13275 item_type: Option<QName>,
13276 annotation: Option<super::Annotation>,
13277 simple_type: Option<super::SimpleBaseType>,
13278 state__: Box<ListDeserializerState>,
13279 }
13280 #[derive(Debug)]
13281 enum ListDeserializerState {
13282 Init__,
13283 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
13284 SimpleType(Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>),
13285 Done__,
13286 Unknown__,
13287 }
13288 impl ListDeserializer {
13289 fn from_bytes_start(
13290 helper: &mut DeserializeHelper,
13291 bytes_start: &BytesStart<'_>,
13292 ) -> Result<Box<Self>, Error> {
13293 let mut id: Option<String> = None;
13294 let mut item_type: Option<QName> = None;
13295 for attrib in helper.filter_xmlns_attributes(bytes_start) {
13296 let attrib = attrib?;
13297 if matches!(
13298 helper.resolve_local_name(attrib.key, &super::NS_XS),
13299 Some(b"id")
13300 ) {
13301 helper.read_attrib(&mut id, b"id", &attrib.value)?;
13302 } else if matches!(
13303 helper.resolve_local_name(attrib.key, &super::NS_XS),
13304 Some(b"itemType")
13305 ) {
13306 helper.read_attrib(&mut item_type, b"itemType", &attrib.value)?;
13307 }
13308 }
13309 Ok(Box::new(Self {
13310 id: id,
13311 item_type: item_type,
13312 annotation: None,
13313 simple_type: None,
13314 state__: Box::new(ListDeserializerState::Init__),
13315 }))
13316 }
13317 fn finish_state(
13318 &mut self,
13319 helper: &mut DeserializeHelper,
13320 state: ListDeserializerState,
13321 ) -> Result<(), Error> {
13322 use ListDeserializerState as S;
13323 match state {
13324 S::Annotation(Some(deserializer)) => {
13325 self.store_annotation(deserializer.finish(helper)?)?
13326 }
13327 S::SimpleType(Some(deserializer)) => {
13328 self.store_simple_type(deserializer.finish(helper)?)?
13329 }
13330 _ => (),
13331 }
13332 Ok(())
13333 }
13334 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
13335 if self.annotation.is_some() {
13336 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
13337 b"annotation",
13338 )))?;
13339 }
13340 self.annotation = Some(value);
13341 Ok(())
13342 }
13343 fn store_simple_type(&mut self, value: super::SimpleBaseType) -> Result<(), Error> {
13344 if self.simple_type.is_some() {
13345 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
13346 b"simpleType",
13347 )))?;
13348 }
13349 self.simple_type = Some(value);
13350 Ok(())
13351 }
13352 fn handle_annotation<'de>(
13353 &mut self,
13354 helper: &mut DeserializeHelper,
13355 output: DeserializerOutput<'de, super::Annotation>,
13356 fallback: &mut Option<ListDeserializerState>,
13357 ) -> Result<ElementHandlerOutput<'de>, Error> {
13358 let DeserializerOutput {
13359 artifact,
13360 event,
13361 allow_any,
13362 } = output;
13363 if artifact.is_none() {
13364 fallback.get_or_insert(ListDeserializerState::Annotation(None));
13365 *self.state__ = ListDeserializerState::SimpleType(None);
13366 return Ok(ElementHandlerOutput::from_event(event, allow_any));
13367 }
13368 if let Some(fallback) = fallback.take() {
13369 self.finish_state(helper, fallback)?;
13370 }
13371 Ok(match artifact {
13372 DeserializerArtifact::None => unreachable!(),
13373 DeserializerArtifact::Data(data) => {
13374 self.store_annotation(data)?;
13375 *self.state__ = ListDeserializerState::SimpleType(None);
13376 ElementHandlerOutput::from_event(event, allow_any)
13377 }
13378 DeserializerArtifact::Deserializer(deserializer) => {
13379 let ret = ElementHandlerOutput::from_event(event, allow_any);
13380 match &ret {
13381 ElementHandlerOutput::Continue { .. } => {
13382 fallback.get_or_insert(ListDeserializerState::Annotation(Some(
13383 deserializer,
13384 )));
13385 *self.state__ = ListDeserializerState::SimpleType(None);
13386 }
13387 ElementHandlerOutput::Break { .. } => {
13388 *self.state__ = ListDeserializerState::Annotation(Some(deserializer));
13389 }
13390 }
13391 ret
13392 }
13393 })
13394 }
13395 fn handle_simple_type<'de>(
13396 &mut self,
13397 helper: &mut DeserializeHelper,
13398 output: DeserializerOutput<'de, super::SimpleBaseType>,
13399 fallback: &mut Option<ListDeserializerState>,
13400 ) -> Result<ElementHandlerOutput<'de>, Error> {
13401 let DeserializerOutput {
13402 artifact,
13403 event,
13404 allow_any,
13405 } = output;
13406 if artifact.is_none() {
13407 fallback.get_or_insert(ListDeserializerState::SimpleType(None));
13408 *self.state__ = ListDeserializerState::Done__;
13409 return Ok(ElementHandlerOutput::from_event(event, allow_any));
13410 }
13411 if let Some(fallback) = fallback.take() {
13412 self.finish_state(helper, fallback)?;
13413 }
13414 Ok(match artifact {
13415 DeserializerArtifact::None => unreachable!(),
13416 DeserializerArtifact::Data(data) => {
13417 self.store_simple_type(data)?;
13418 *self.state__ = ListDeserializerState::Done__;
13419 ElementHandlerOutput::from_event(event, allow_any)
13420 }
13421 DeserializerArtifact::Deserializer(deserializer) => {
13422 let ret = ElementHandlerOutput::from_event(event, allow_any);
13423 match &ret {
13424 ElementHandlerOutput::Continue { .. } => {
13425 fallback.get_or_insert(ListDeserializerState::SimpleType(Some(
13426 deserializer,
13427 )));
13428 *self.state__ = ListDeserializerState::Done__;
13429 }
13430 ElementHandlerOutput::Break { .. } => {
13431 *self.state__ = ListDeserializerState::SimpleType(Some(deserializer));
13432 }
13433 }
13434 ret
13435 }
13436 })
13437 }
13438 }
13439 impl<'de> Deserializer<'de, super::List> for Box<ListDeserializer> {
13440 fn init(
13441 helper: &mut DeserializeHelper,
13442 event: Event<'de>,
13443 ) -> DeserializerResult<'de, super::List> {
13444 helper.init_deserializer_from_start_event(event, ListDeserializer::from_bytes_start)
13445 }
13446 fn next(
13447 mut self,
13448 helper: &mut DeserializeHelper,
13449 event: Event<'de>,
13450 ) -> DeserializerResult<'de, super::List> {
13451 use ListDeserializerState as S;
13452 let mut event = event;
13453 let mut fallback = None;
13454 let mut allow_any_element = false;
13455 let (event, allow_any) = loop {
13456 let state = replace(&mut *self.state__, S::Unknown__);
13457 event = match (state, event) {
13458 (S::Unknown__, _) => unreachable!(),
13459 (S::Annotation(Some(deserializer)), event) => {
13460 let output = deserializer.next(helper, event)?;
13461 match self.handle_annotation(helper, output, &mut fallback)? {
13462 ElementHandlerOutput::Continue { event, allow_any } => {
13463 allow_any_element = allow_any_element || allow_any;
13464 event
13465 }
13466 ElementHandlerOutput::Break { event, allow_any } => {
13467 break (event, allow_any)
13468 }
13469 }
13470 }
13471 (S::SimpleType(Some(deserializer)), event) => {
13472 let output = deserializer.next(helper, event)?;
13473 match self.handle_simple_type(helper, output, &mut fallback)? {
13474 ElementHandlerOutput::Continue { event, allow_any } => {
13475 allow_any_element = allow_any_element || allow_any;
13476 event
13477 }
13478 ElementHandlerOutput::Break { event, allow_any } => {
13479 break (event, allow_any)
13480 }
13481 }
13482 }
13483 (_, Event::End(_)) => {
13484 if let Some(fallback) = fallback.take() {
13485 self.finish_state(helper, fallback)?;
13486 }
13487 return Ok(DeserializerOutput {
13488 artifact: DeserializerArtifact::Data(self.finish(helper)?),
13489 event: DeserializerEvent::None,
13490 allow_any: false,
13491 });
13492 }
13493 (S::Init__, event) => {
13494 fallback.get_or_insert(S::Init__);
13495 *self.state__ = ListDeserializerState::Annotation(None);
13496 event
13497 }
13498 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
13499 let output = helper.init_start_tag_deserializer(
13500 event,
13501 Some(&super::NS_XS),
13502 b"annotation",
13503 false,
13504 )?;
13505 match self.handle_annotation(helper, output, &mut fallback)? {
13506 ElementHandlerOutput::Continue { event, allow_any } => {
13507 allow_any_element = allow_any_element || allow_any;
13508 event
13509 }
13510 ElementHandlerOutput::Break { event, allow_any } => {
13511 break (event, allow_any)
13512 }
13513 }
13514 }
13515 (S::SimpleType(None), event @ (Event::Start(_) | Event::Empty(_))) => {
13516 let output = helper.init_start_tag_deserializer(
13517 event,
13518 Some(&super::NS_XS),
13519 b"simpleType",
13520 true,
13521 )?;
13522 match self.handle_simple_type(helper, output, &mut fallback)? {
13523 ElementHandlerOutput::Continue { event, allow_any } => {
13524 allow_any_element = allow_any_element || allow_any;
13525 event
13526 }
13527 ElementHandlerOutput::Break { event, allow_any } => {
13528 break (event, allow_any)
13529 }
13530 }
13531 }
13532 (S::Done__, event) => {
13533 fallback.get_or_insert(S::Done__);
13534 break (DeserializerEvent::Continue(event), allow_any_element);
13535 }
13536 (state, event) => {
13537 *self.state__ = state;
13538 break (DeserializerEvent::Break(event), false);
13539 }
13540 }
13541 };
13542 if let Some(fallback) = fallback {
13543 *self.state__ = fallback;
13544 }
13545 Ok(DeserializerOutput {
13546 artifact: DeserializerArtifact::Deserializer(self),
13547 event,
13548 allow_any,
13549 })
13550 }
13551 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::List, Error> {
13552 let state = replace(&mut *self.state__, ListDeserializerState::Unknown__);
13553 self.finish_state(helper, state)?;
13554 Ok(super::List {
13555 id: self.id,
13556 item_type: self.item_type,
13557 annotation: self.annotation,
13558 simple_type: self.simple_type.map(Box::new),
13559 })
13560 }
13561 }
13562 #[derive(Debug)]
13563 pub struct UnionDeserializer {
13564 id: Option<String>,
13565 member_types: Option<super::QNameList>,
13566 annotation: Option<super::Annotation>,
13567 simple_type: Vec<super::SimpleBaseType>,
13568 state__: Box<UnionDeserializerState>,
13569 }
13570 #[derive(Debug)]
13571 enum UnionDeserializerState {
13572 Init__,
13573 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
13574 SimpleType(Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>),
13575 Done__,
13576 Unknown__,
13577 }
13578 impl UnionDeserializer {
13579 fn from_bytes_start(
13580 helper: &mut DeserializeHelper,
13581 bytes_start: &BytesStart<'_>,
13582 ) -> Result<Box<Self>, Error> {
13583 let mut id: Option<String> = None;
13584 let mut member_types: Option<super::QNameList> = None;
13585 for attrib in helper.filter_xmlns_attributes(bytes_start) {
13586 let attrib = attrib?;
13587 if matches!(
13588 helper.resolve_local_name(attrib.key, &super::NS_XS),
13589 Some(b"id")
13590 ) {
13591 helper.read_attrib(&mut id, b"id", &attrib.value)?;
13592 } else if matches!(
13593 helper.resolve_local_name(attrib.key, &super::NS_XS),
13594 Some(b"memberTypes")
13595 ) {
13596 helper.read_attrib(&mut member_types, b"memberTypes", &attrib.value)?;
13597 }
13598 }
13599 Ok(Box::new(Self {
13600 id: id,
13601 member_types: member_types,
13602 annotation: None,
13603 simple_type: Vec::new(),
13604 state__: Box::new(UnionDeserializerState::Init__),
13605 }))
13606 }
13607 fn finish_state(
13608 &mut self,
13609 helper: &mut DeserializeHelper,
13610 state: UnionDeserializerState,
13611 ) -> Result<(), Error> {
13612 use UnionDeserializerState as S;
13613 match state {
13614 S::Annotation(Some(deserializer)) => {
13615 self.store_annotation(deserializer.finish(helper)?)?
13616 }
13617 S::SimpleType(Some(deserializer)) => {
13618 self.store_simple_type(deserializer.finish(helper)?)?
13619 }
13620 _ => (),
13621 }
13622 Ok(())
13623 }
13624 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
13625 if self.annotation.is_some() {
13626 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
13627 b"annotation",
13628 )))?;
13629 }
13630 self.annotation = Some(value);
13631 Ok(())
13632 }
13633 fn store_simple_type(&mut self, value: super::SimpleBaseType) -> Result<(), Error> {
13634 self.simple_type.push(value);
13635 Ok(())
13636 }
13637 fn handle_annotation<'de>(
13638 &mut self,
13639 helper: &mut DeserializeHelper,
13640 output: DeserializerOutput<'de, super::Annotation>,
13641 fallback: &mut Option<UnionDeserializerState>,
13642 ) -> Result<ElementHandlerOutput<'de>, Error> {
13643 let DeserializerOutput {
13644 artifact,
13645 event,
13646 allow_any,
13647 } = output;
13648 if artifact.is_none() {
13649 fallback.get_or_insert(UnionDeserializerState::Annotation(None));
13650 *self.state__ = UnionDeserializerState::SimpleType(None);
13651 return Ok(ElementHandlerOutput::from_event(event, allow_any));
13652 }
13653 if let Some(fallback) = fallback.take() {
13654 self.finish_state(helper, fallback)?;
13655 }
13656 Ok(match artifact {
13657 DeserializerArtifact::None => unreachable!(),
13658 DeserializerArtifact::Data(data) => {
13659 self.store_annotation(data)?;
13660 *self.state__ = UnionDeserializerState::SimpleType(None);
13661 ElementHandlerOutput::from_event(event, allow_any)
13662 }
13663 DeserializerArtifact::Deserializer(deserializer) => {
13664 let ret = ElementHandlerOutput::from_event(event, allow_any);
13665 match &ret {
13666 ElementHandlerOutput::Continue { .. } => {
13667 fallback.get_or_insert(UnionDeserializerState::Annotation(Some(
13668 deserializer,
13669 )));
13670 *self.state__ = UnionDeserializerState::SimpleType(None);
13671 }
13672 ElementHandlerOutput::Break { .. } => {
13673 *self.state__ = UnionDeserializerState::Annotation(Some(deserializer));
13674 }
13675 }
13676 ret
13677 }
13678 })
13679 }
13680 fn handle_simple_type<'de>(
13681 &mut self,
13682 helper: &mut DeserializeHelper,
13683 output: DeserializerOutput<'de, super::SimpleBaseType>,
13684 fallback: &mut Option<UnionDeserializerState>,
13685 ) -> Result<ElementHandlerOutput<'de>, Error> {
13686 let DeserializerOutput {
13687 artifact,
13688 event,
13689 allow_any,
13690 } = output;
13691 if artifact.is_none() {
13692 fallback.get_or_insert(UnionDeserializerState::SimpleType(None));
13693 *self.state__ = UnionDeserializerState::Done__;
13694 return Ok(ElementHandlerOutput::from_event(event, allow_any));
13695 }
13696 if let Some(fallback) = fallback.take() {
13697 self.finish_state(helper, fallback)?;
13698 }
13699 Ok(match artifact {
13700 DeserializerArtifact::None => unreachable!(),
13701 DeserializerArtifact::Data(data) => {
13702 self.store_simple_type(data)?;
13703 *self.state__ = UnionDeserializerState::SimpleType(None);
13704 ElementHandlerOutput::from_event(event, allow_any)
13705 }
13706 DeserializerArtifact::Deserializer(deserializer) => {
13707 let ret = ElementHandlerOutput::from_event(event, allow_any);
13708 match &ret {
13709 ElementHandlerOutput::Continue { .. } => {
13710 fallback.get_or_insert(UnionDeserializerState::SimpleType(Some(
13711 deserializer,
13712 )));
13713 *self.state__ = UnionDeserializerState::SimpleType(None);
13714 }
13715 ElementHandlerOutput::Break { .. } => {
13716 *self.state__ = UnionDeserializerState::SimpleType(Some(deserializer));
13717 }
13718 }
13719 ret
13720 }
13721 })
13722 }
13723 }
13724 impl<'de> Deserializer<'de, super::Union> for Box<UnionDeserializer> {
13725 fn init(
13726 helper: &mut DeserializeHelper,
13727 event: Event<'de>,
13728 ) -> DeserializerResult<'de, super::Union> {
13729 helper.init_deserializer_from_start_event(event, UnionDeserializer::from_bytes_start)
13730 }
13731 fn next(
13732 mut self,
13733 helper: &mut DeserializeHelper,
13734 event: Event<'de>,
13735 ) -> DeserializerResult<'de, super::Union> {
13736 use UnionDeserializerState as S;
13737 let mut event = event;
13738 let mut fallback = None;
13739 let mut allow_any_element = false;
13740 let (event, allow_any) = loop {
13741 let state = replace(&mut *self.state__, S::Unknown__);
13742 event = match (state, event) {
13743 (S::Unknown__, _) => unreachable!(),
13744 (S::Annotation(Some(deserializer)), event) => {
13745 let output = deserializer.next(helper, event)?;
13746 match self.handle_annotation(helper, output, &mut fallback)? {
13747 ElementHandlerOutput::Continue { event, allow_any } => {
13748 allow_any_element = allow_any_element || allow_any;
13749 event
13750 }
13751 ElementHandlerOutput::Break { event, allow_any } => {
13752 break (event, allow_any)
13753 }
13754 }
13755 }
13756 (S::SimpleType(Some(deserializer)), event) => {
13757 let output = deserializer.next(helper, event)?;
13758 match self.handle_simple_type(helper, output, &mut fallback)? {
13759 ElementHandlerOutput::Continue { event, allow_any } => {
13760 allow_any_element = allow_any_element || allow_any;
13761 event
13762 }
13763 ElementHandlerOutput::Break { event, allow_any } => {
13764 break (event, allow_any)
13765 }
13766 }
13767 }
13768 (_, Event::End(_)) => {
13769 if let Some(fallback) = fallback.take() {
13770 self.finish_state(helper, fallback)?;
13771 }
13772 return Ok(DeserializerOutput {
13773 artifact: DeserializerArtifact::Data(self.finish(helper)?),
13774 event: DeserializerEvent::None,
13775 allow_any: false,
13776 });
13777 }
13778 (S::Init__, event) => {
13779 fallback.get_or_insert(S::Init__);
13780 *self.state__ = UnionDeserializerState::Annotation(None);
13781 event
13782 }
13783 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
13784 let output = helper.init_start_tag_deserializer(
13785 event,
13786 Some(&super::NS_XS),
13787 b"annotation",
13788 false,
13789 )?;
13790 match self.handle_annotation(helper, output, &mut fallback)? {
13791 ElementHandlerOutput::Continue { event, allow_any } => {
13792 allow_any_element = allow_any_element || allow_any;
13793 event
13794 }
13795 ElementHandlerOutput::Break { event, allow_any } => {
13796 break (event, allow_any)
13797 }
13798 }
13799 }
13800 (S::SimpleType(None), event @ (Event::Start(_) | Event::Empty(_))) => {
13801 let output = helper.init_start_tag_deserializer(
13802 event,
13803 Some(&super::NS_XS),
13804 b"simpleType",
13805 true,
13806 )?;
13807 match self.handle_simple_type(helper, output, &mut fallback)? {
13808 ElementHandlerOutput::Continue { event, allow_any } => {
13809 allow_any_element = allow_any_element || allow_any;
13810 event
13811 }
13812 ElementHandlerOutput::Break { event, allow_any } => {
13813 break (event, allow_any)
13814 }
13815 }
13816 }
13817 (S::Done__, event) => {
13818 fallback.get_or_insert(S::Done__);
13819 break (DeserializerEvent::Continue(event), allow_any_element);
13820 }
13821 (state, event) => {
13822 *self.state__ = state;
13823 break (DeserializerEvent::Break(event), false);
13824 }
13825 }
13826 };
13827 if let Some(fallback) = fallback {
13828 *self.state__ = fallback;
13829 }
13830 Ok(DeserializerOutput {
13831 artifact: DeserializerArtifact::Deserializer(self),
13832 event,
13833 allow_any,
13834 })
13835 }
13836 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::Union, Error> {
13837 let state = replace(&mut *self.state__, UnionDeserializerState::Unknown__);
13838 self.finish_state(helper, state)?;
13839 Ok(super::Union {
13840 id: self.id,
13841 member_types: self.member_types,
13842 annotation: self.annotation,
13843 simple_type: self.simple_type,
13844 })
13845 }
13846 }
13847 #[derive(Debug)]
13848 pub struct SimpleContentDeserializer {
13849 id: Option<String>,
13850 content: Vec<super::SimpleContentContent>,
13851 state__: Box<SimpleContentDeserializerState>,
13852 }
13853 #[derive(Debug)]
13854 enum SimpleContentDeserializerState {
13855 Init__,
13856 Next__,
13857 Content__(<super::SimpleContentContent as WithDeserializer>::Deserializer),
13858 Unknown__,
13859 }
13860 impl SimpleContentDeserializer {
13861 fn from_bytes_start(
13862 helper: &mut DeserializeHelper,
13863 bytes_start: &BytesStart<'_>,
13864 ) -> Result<Box<Self>, Error> {
13865 let mut id: Option<String> = None;
13866 for attrib in helper.filter_xmlns_attributes(bytes_start) {
13867 let attrib = attrib?;
13868 if matches!(
13869 helper.resolve_local_name(attrib.key, &super::NS_XS),
13870 Some(b"id")
13871 ) {
13872 helper.read_attrib(&mut id, b"id", &attrib.value)?;
13873 }
13874 }
13875 Ok(Box::new(Self {
13876 id: id,
13877 content: Vec::new(),
13878 state__: Box::new(SimpleContentDeserializerState::Init__),
13879 }))
13880 }
13881 fn finish_state(
13882 &mut self,
13883 helper: &mut DeserializeHelper,
13884 state: SimpleContentDeserializerState,
13885 ) -> Result<(), Error> {
13886 if let SimpleContentDeserializerState::Content__(deserializer) = state {
13887 self.store_content(deserializer.finish(helper)?)?;
13888 }
13889 Ok(())
13890 }
13891 fn store_content(&mut self, value: super::SimpleContentContent) -> Result<(), Error> {
13892 self.content.push(value);
13893 Ok(())
13894 }
13895 fn handle_content<'de>(
13896 &mut self,
13897 helper: &mut DeserializeHelper,
13898 output: DeserializerOutput<'de, super::SimpleContentContent>,
13899 fallback: &mut Option<SimpleContentDeserializerState>,
13900 ) -> Result<ElementHandlerOutput<'de>, Error> {
13901 let DeserializerOutput {
13902 artifact,
13903 event,
13904 allow_any,
13905 } = output;
13906 if artifact.is_none() {
13907 *self.state__ = fallback
13908 .take()
13909 .unwrap_or(SimpleContentDeserializerState::Next__);
13910 return Ok(ElementHandlerOutput::break_(event, allow_any));
13911 }
13912 if let Some(fallback) = fallback.take() {
13913 self.finish_state(helper, fallback)?;
13914 }
13915 Ok(match artifact {
13916 DeserializerArtifact::None => unreachable!(),
13917 DeserializerArtifact::Data(data) => {
13918 self.store_content(data)?;
13919 *self.state__ = SimpleContentDeserializerState::Next__;
13920 ElementHandlerOutput::from_event(event, allow_any)
13921 }
13922 DeserializerArtifact::Deserializer(deserializer) => {
13923 let can_have_more = self.content.len().saturating_add(1) < 2usize;
13924 let ret = if can_have_more {
13925 ElementHandlerOutput::from_event(event, allow_any)
13926 } else {
13927 ElementHandlerOutput::from_event_end(event, allow_any)
13928 };
13929 match (can_have_more, &ret) {
13930 (true, ElementHandlerOutput::Continue { .. }) => {
13931 fallback.get_or_insert(SimpleContentDeserializerState::Content__(
13932 deserializer,
13933 ));
13934 *self.state__ = SimpleContentDeserializerState::Next__;
13935 }
13936 (false, _) | (_, ElementHandlerOutput::Break { .. }) => {
13937 *self.state__ = SimpleContentDeserializerState::Content__(deserializer);
13938 }
13939 }
13940 ret
13941 }
13942 })
13943 }
13944 }
13945 impl<'de> Deserializer<'de, super::SimpleContent> for Box<SimpleContentDeserializer> {
13946 fn init(
13947 helper: &mut DeserializeHelper,
13948 event: Event<'de>,
13949 ) -> DeserializerResult<'de, super::SimpleContent> {
13950 helper.init_deserializer_from_start_event(
13951 event,
13952 SimpleContentDeserializer::from_bytes_start,
13953 )
13954 }
13955 fn next(
13956 mut self,
13957 helper: &mut DeserializeHelper,
13958 event: Event<'de>,
13959 ) -> DeserializerResult<'de, super::SimpleContent> {
13960 use SimpleContentDeserializerState as S;
13961 let mut event = event;
13962 let mut fallback = None;
13963 let (event, allow_any) = loop {
13964 let state = replace(&mut *self.state__, S::Unknown__);
13965 event = match (state, event) {
13966 (S::Unknown__, _) => unreachable!(),
13967 (S::Content__(deserializer), event) => {
13968 let output = deserializer.next(helper, event)?;
13969 match self.handle_content(helper, output, &mut fallback)? {
13970 ElementHandlerOutput::Break { event, allow_any } => {
13971 break (event, allow_any)
13972 }
13973 ElementHandlerOutput::Continue { event, .. } => event,
13974 }
13975 }
13976 (_, Event::End(_)) => {
13977 return Ok(DeserializerOutput {
13978 artifact: DeserializerArtifact::Data(self.finish(helper)?),
13979 event: DeserializerEvent::None,
13980 allow_any: false,
13981 });
13982 }
13983 (state @ (S::Init__ | S::Next__), event) => {
13984 fallback.get_or_insert(state);
13985 let output =
13986 <super::SimpleContentContent as WithDeserializer>::Deserializer::init(
13987 helper, event,
13988 )?;
13989 match self.handle_content(helper, output, &mut fallback)? {
13990 ElementHandlerOutput::Break { event, allow_any } => {
13991 break (event, allow_any)
13992 }
13993 ElementHandlerOutput::Continue { event, .. } => event,
13994 }
13995 }
13996 }
13997 };
13998 let artifact = DeserializerArtifact::Deserializer(self);
13999 Ok(DeserializerOutput {
14000 artifact,
14001 event,
14002 allow_any,
14003 })
14004 }
14005 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::SimpleContent, Error> {
14006 let state = replace(
14007 &mut *self.state__,
14008 SimpleContentDeserializerState::Unknown__,
14009 );
14010 self.finish_state(helper, state)?;
14011 Ok(super::SimpleContent {
14012 id: self.id,
14013 content: self.content,
14014 })
14015 }
14016 }
14017 #[derive(Debug)]
14018 pub struct SimpleContentContentDeserializer {
14019 state__: Box<SimpleContentContentDeserializerState>,
14020 }
14021 #[derive(Debug)]
14022 pub enum SimpleContentContentDeserializerState {
14023 Init__,
14024 Annotation(
14025 Option<super::Annotation>,
14026 Option<<super::Annotation as WithDeserializer>::Deserializer>,
14027 ),
14028 Restriction(
14029 Option<super::RestrictionType>,
14030 Option<<super::RestrictionType as WithDeserializer>::Deserializer>,
14031 ),
14032 Extension(
14033 Option<super::ExtensionType>,
14034 Option<<super::ExtensionType as WithDeserializer>::Deserializer>,
14035 ),
14036 Done__(super::SimpleContentContent),
14037 Unknown__,
14038 }
14039 impl SimpleContentContentDeserializer {
14040 fn find_suitable<'de>(
14041 &mut self,
14042 helper: &mut DeserializeHelper,
14043 event: Event<'de>,
14044 fallback: &mut Option<SimpleContentContentDeserializerState>,
14045 ) -> Result<ElementHandlerOutput<'de>, Error> {
14046 if let Event::Start(x) | Event::Empty(x) = &event {
14047 if matches!(
14048 helper.resolve_local_name(x.name(), &super::NS_XS),
14049 Some(b"annotation")
14050 ) {
14051 let output =
14052 <super::Annotation as WithDeserializer>::Deserializer::init(helper, event)?;
14053 return self.handle_annotation(
14054 helper,
14055 Default::default(),
14056 output,
14057 &mut *fallback,
14058 );
14059 }
14060 if matches!(
14061 helper.resolve_local_name(x.name(), &super::NS_XS),
14062 Some(b"restriction")
14063 ) {
14064 let output = <super::RestrictionType as WithDeserializer>::Deserializer::init(
14065 helper, event,
14066 )?;
14067 return self.handle_restriction(
14068 helper,
14069 Default::default(),
14070 output,
14071 &mut *fallback,
14072 );
14073 }
14074 if matches!(
14075 helper.resolve_local_name(x.name(), &super::NS_XS),
14076 Some(b"extension")
14077 ) {
14078 let output = <super::ExtensionType as WithDeserializer>::Deserializer::init(
14079 helper, event,
14080 )?;
14081 return self.handle_extension(
14082 helper,
14083 Default::default(),
14084 output,
14085 &mut *fallback,
14086 );
14087 }
14088 }
14089 *self.state__ = fallback
14090 .take()
14091 .unwrap_or(SimpleContentContentDeserializerState::Init__);
14092 Ok(ElementHandlerOutput::return_to_parent(event, false))
14093 }
14094 fn finish_state(
14095 helper: &mut DeserializeHelper,
14096 state: SimpleContentContentDeserializerState,
14097 ) -> Result<super::SimpleContentContent, Error> {
14098 use SimpleContentContentDeserializerState as S;
14099 match state {
14100 S::Unknown__ => unreachable!(),
14101 S::Init__ => Err(ErrorKind::MissingContent.into()),
14102 S::Annotation(mut values, deserializer) => {
14103 if let Some(deserializer) = deserializer {
14104 let value = deserializer.finish(helper)?;
14105 SimpleContentContentDeserializer::store_annotation(&mut values, value)?;
14106 }
14107 Ok(super::SimpleContentContent::Annotation(values.ok_or_else(
14108 || ErrorKind::MissingElement("annotation".into()),
14109 )?))
14110 }
14111 S::Restriction(mut values, deserializer) => {
14112 if let Some(deserializer) = deserializer {
14113 let value = deserializer.finish(helper)?;
14114 SimpleContentContentDeserializer::store_restriction(&mut values, value)?;
14115 }
14116 Ok(super::SimpleContentContent::Restriction(
14117 values.ok_or_else(|| ErrorKind::MissingElement("restriction".into()))?,
14118 ))
14119 }
14120 S::Extension(mut values, deserializer) => {
14121 if let Some(deserializer) = deserializer {
14122 let value = deserializer.finish(helper)?;
14123 SimpleContentContentDeserializer::store_extension(&mut values, value)?;
14124 }
14125 Ok(super::SimpleContentContent::Extension(values.ok_or_else(
14126 || ErrorKind::MissingElement("extension".into()),
14127 )?))
14128 }
14129 S::Done__(data) => Ok(data),
14130 }
14131 }
14132 fn store_annotation(
14133 values: &mut Option<super::Annotation>,
14134 value: super::Annotation,
14135 ) -> Result<(), Error> {
14136 if values.is_some() {
14137 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
14138 b"annotation",
14139 )))?;
14140 }
14141 *values = Some(value);
14142 Ok(())
14143 }
14144 fn store_restriction(
14145 values: &mut Option<super::RestrictionType>,
14146 value: super::RestrictionType,
14147 ) -> Result<(), Error> {
14148 if values.is_some() {
14149 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
14150 b"restriction",
14151 )))?;
14152 }
14153 *values = Some(value);
14154 Ok(())
14155 }
14156 fn store_extension(
14157 values: &mut Option<super::ExtensionType>,
14158 value: super::ExtensionType,
14159 ) -> Result<(), Error> {
14160 if values.is_some() {
14161 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
14162 b"extension",
14163 )))?;
14164 }
14165 *values = Some(value);
14166 Ok(())
14167 }
14168 fn handle_annotation<'de>(
14169 &mut self,
14170 helper: &mut DeserializeHelper,
14171 mut values: Option<super::Annotation>,
14172 output: DeserializerOutput<'de, super::Annotation>,
14173 fallback: &mut Option<SimpleContentContentDeserializerState>,
14174 ) -> Result<ElementHandlerOutput<'de>, Error> {
14175 let DeserializerOutput {
14176 artifact,
14177 event,
14178 allow_any,
14179 } = output;
14180 if artifact.is_none() {
14181 *self.state__ = match fallback.take() {
14182 None if values.is_none() => {
14183 *self.state__ = SimpleContentContentDeserializerState::Init__;
14184 return Ok(ElementHandlerOutput::from_event(event, allow_any));
14185 }
14186 None => SimpleContentContentDeserializerState::Annotation(values, None),
14187 Some(SimpleContentContentDeserializerState::Annotation(
14188 _,
14189 Some(deserializer),
14190 )) => SimpleContentContentDeserializerState::Annotation(
14191 values,
14192 Some(deserializer),
14193 ),
14194 _ => unreachable!(),
14195 };
14196 return Ok(ElementHandlerOutput::break_(event, allow_any));
14197 }
14198 match fallback.take() {
14199 None => (),
14200 Some(SimpleContentContentDeserializerState::Annotation(_, Some(deserializer))) => {
14201 let data = deserializer.finish(helper)?;
14202 SimpleContentContentDeserializer::store_annotation(&mut values, data)?;
14203 }
14204 Some(_) => unreachable!(),
14205 }
14206 Ok(match artifact {
14207 DeserializerArtifact::None => unreachable!(),
14208 DeserializerArtifact::Data(data) => {
14209 SimpleContentContentDeserializer::store_annotation(&mut values, data)?;
14210 let data = SimpleContentContentDeserializer::finish_state(
14211 helper,
14212 SimpleContentContentDeserializerState::Annotation(values, None),
14213 )?;
14214 *self.state__ = SimpleContentContentDeserializerState::Done__(data);
14215 ElementHandlerOutput::Break { event, allow_any }
14216 }
14217 DeserializerArtifact::Deserializer(deserializer) => {
14218 *self.state__ = SimpleContentContentDeserializerState::Annotation(
14219 values,
14220 Some(deserializer),
14221 );
14222 ElementHandlerOutput::from_event_end(event, allow_any)
14223 }
14224 })
14225 }
14226 fn handle_restriction<'de>(
14227 &mut self,
14228 helper: &mut DeserializeHelper,
14229 mut values: Option<super::RestrictionType>,
14230 output: DeserializerOutput<'de, super::RestrictionType>,
14231 fallback: &mut Option<SimpleContentContentDeserializerState>,
14232 ) -> Result<ElementHandlerOutput<'de>, Error> {
14233 let DeserializerOutput {
14234 artifact,
14235 event,
14236 allow_any,
14237 } = output;
14238 if artifact.is_none() {
14239 *self.state__ = match fallback.take() {
14240 None if values.is_none() => {
14241 *self.state__ = SimpleContentContentDeserializerState::Init__;
14242 return Ok(ElementHandlerOutput::from_event(event, allow_any));
14243 }
14244 None => SimpleContentContentDeserializerState::Restriction(values, None),
14245 Some(SimpleContentContentDeserializerState::Restriction(
14246 _,
14247 Some(deserializer),
14248 )) => SimpleContentContentDeserializerState::Restriction(
14249 values,
14250 Some(deserializer),
14251 ),
14252 _ => unreachable!(),
14253 };
14254 return Ok(ElementHandlerOutput::break_(event, allow_any));
14255 }
14256 match fallback.take() {
14257 None => (),
14258 Some(SimpleContentContentDeserializerState::Restriction(_, Some(deserializer))) => {
14259 let data = deserializer.finish(helper)?;
14260 SimpleContentContentDeserializer::store_restriction(&mut values, data)?;
14261 }
14262 Some(_) => unreachable!(),
14263 }
14264 Ok(match artifact {
14265 DeserializerArtifact::None => unreachable!(),
14266 DeserializerArtifact::Data(data) => {
14267 SimpleContentContentDeserializer::store_restriction(&mut values, data)?;
14268 let data = SimpleContentContentDeserializer::finish_state(
14269 helper,
14270 SimpleContentContentDeserializerState::Restriction(values, None),
14271 )?;
14272 *self.state__ = SimpleContentContentDeserializerState::Done__(data);
14273 ElementHandlerOutput::Break { event, allow_any }
14274 }
14275 DeserializerArtifact::Deserializer(deserializer) => {
14276 *self.state__ = SimpleContentContentDeserializerState::Restriction(
14277 values,
14278 Some(deserializer),
14279 );
14280 ElementHandlerOutput::from_event_end(event, allow_any)
14281 }
14282 })
14283 }
14284 fn handle_extension<'de>(
14285 &mut self,
14286 helper: &mut DeserializeHelper,
14287 mut values: Option<super::ExtensionType>,
14288 output: DeserializerOutput<'de, super::ExtensionType>,
14289 fallback: &mut Option<SimpleContentContentDeserializerState>,
14290 ) -> Result<ElementHandlerOutput<'de>, Error> {
14291 let DeserializerOutput {
14292 artifact,
14293 event,
14294 allow_any,
14295 } = output;
14296 if artifact.is_none() {
14297 *self.state__ = match fallback.take() {
14298 None if values.is_none() => {
14299 *self.state__ = SimpleContentContentDeserializerState::Init__;
14300 return Ok(ElementHandlerOutput::from_event(event, allow_any));
14301 }
14302 None => SimpleContentContentDeserializerState::Extension(values, None),
14303 Some(SimpleContentContentDeserializerState::Extension(
14304 _,
14305 Some(deserializer),
14306 )) => {
14307 SimpleContentContentDeserializerState::Extension(values, Some(deserializer))
14308 }
14309 _ => unreachable!(),
14310 };
14311 return Ok(ElementHandlerOutput::break_(event, allow_any));
14312 }
14313 match fallback.take() {
14314 None => (),
14315 Some(SimpleContentContentDeserializerState::Extension(_, Some(deserializer))) => {
14316 let data = deserializer.finish(helper)?;
14317 SimpleContentContentDeserializer::store_extension(&mut values, data)?;
14318 }
14319 Some(_) => unreachable!(),
14320 }
14321 Ok(match artifact {
14322 DeserializerArtifact::None => unreachable!(),
14323 DeserializerArtifact::Data(data) => {
14324 SimpleContentContentDeserializer::store_extension(&mut values, data)?;
14325 let data = SimpleContentContentDeserializer::finish_state(
14326 helper,
14327 SimpleContentContentDeserializerState::Extension(values, None),
14328 )?;
14329 *self.state__ = SimpleContentContentDeserializerState::Done__(data);
14330 ElementHandlerOutput::Break { event, allow_any }
14331 }
14332 DeserializerArtifact::Deserializer(deserializer) => {
14333 *self.state__ = SimpleContentContentDeserializerState::Extension(
14334 values,
14335 Some(deserializer),
14336 );
14337 ElementHandlerOutput::from_event_end(event, allow_any)
14338 }
14339 })
14340 }
14341 }
14342 impl<'de> Deserializer<'de, super::SimpleContentContent> for Box<SimpleContentContentDeserializer> {
14343 fn init(
14344 helper: &mut DeserializeHelper,
14345 event: Event<'de>,
14346 ) -> DeserializerResult<'de, super::SimpleContentContent> {
14347 let deserializer = Box::new(SimpleContentContentDeserializer {
14348 state__: Box::new(SimpleContentContentDeserializerState::Init__),
14349 });
14350 let mut output = deserializer.next(helper, event)?;
14351 output.artifact = match output.artifact {
14352 DeserializerArtifact::Deserializer(x)
14353 if matches!(&*x.state__, SimpleContentContentDeserializerState::Init__) =>
14354 {
14355 DeserializerArtifact::None
14356 }
14357 artifact => artifact,
14358 };
14359 Ok(output)
14360 }
14361 fn next(
14362 mut self,
14363 helper: &mut DeserializeHelper,
14364 event: Event<'de>,
14365 ) -> DeserializerResult<'de, super::SimpleContentContent> {
14366 use SimpleContentContentDeserializerState as S;
14367 let mut event = event;
14368 let mut fallback = None;
14369 let (event, allow_any) = loop {
14370 let state = replace(&mut *self.state__, S::Unknown__);
14371 event = match (state, event) {
14372 (S::Unknown__, _) => unreachable!(),
14373 (S::Annotation(values, Some(deserializer)), event) => {
14374 let output = deserializer.next(helper, event)?;
14375 match self.handle_annotation(helper, values, output, &mut fallback)? {
14376 ElementHandlerOutput::Break { event, allow_any } => {
14377 break (event, allow_any)
14378 }
14379 ElementHandlerOutput::Continue { event, .. } => event,
14380 }
14381 }
14382 (S::Restriction(values, Some(deserializer)), event) => {
14383 let output = deserializer.next(helper, event)?;
14384 match self.handle_restriction(helper, values, output, &mut fallback)? {
14385 ElementHandlerOutput::Break { event, allow_any } => {
14386 break (event, allow_any)
14387 }
14388 ElementHandlerOutput::Continue { event, .. } => event,
14389 }
14390 }
14391 (S::Extension(values, Some(deserializer)), event) => {
14392 let output = deserializer.next(helper, event)?;
14393 match self.handle_extension(helper, values, output, &mut fallback)? {
14394 ElementHandlerOutput::Break { event, allow_any } => {
14395 break (event, allow_any)
14396 }
14397 ElementHandlerOutput::Continue { event, .. } => event,
14398 }
14399 }
14400 (state, event @ Event::End(_)) => {
14401 return Ok(DeserializerOutput {
14402 artifact: DeserializerArtifact::Data(
14403 SimpleContentContentDeserializer::finish_state(helper, state)?,
14404 ),
14405 event: DeserializerEvent::Continue(event),
14406 allow_any: false,
14407 });
14408 }
14409 (S::Init__, event) => match self.find_suitable(helper, event, &mut fallback)? {
14410 ElementHandlerOutput::Break { event, allow_any } => {
14411 break (event, allow_any)
14412 }
14413 ElementHandlerOutput::Continue { event, .. } => event,
14414 },
14415 (S::Annotation(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
14416 let output = helper.init_start_tag_deserializer(
14417 event,
14418 Some(&super::NS_XS),
14419 b"annotation",
14420 false,
14421 )?;
14422 match self.handle_annotation(helper, values, output, &mut fallback)? {
14423 ElementHandlerOutput::Break { event, allow_any } => {
14424 break (event, allow_any)
14425 }
14426 ElementHandlerOutput::Continue { event, .. } => event,
14427 }
14428 }
14429 (S::Restriction(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
14430 let output = helper.init_start_tag_deserializer(
14431 event,
14432 Some(&super::NS_XS),
14433 b"restriction",
14434 true,
14435 )?;
14436 match self.handle_restriction(helper, values, output, &mut fallback)? {
14437 ElementHandlerOutput::Break { event, allow_any } => {
14438 break (event, allow_any)
14439 }
14440 ElementHandlerOutput::Continue { event, .. } => event,
14441 }
14442 }
14443 (S::Extension(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
14444 let output = helper.init_start_tag_deserializer(
14445 event,
14446 Some(&super::NS_XS),
14447 b"extension",
14448 true,
14449 )?;
14450 match self.handle_extension(helper, values, output, &mut fallback)? {
14451 ElementHandlerOutput::Break { event, allow_any } => {
14452 break (event, allow_any)
14453 }
14454 ElementHandlerOutput::Continue { event, .. } => event,
14455 }
14456 }
14457 (s @ S::Done__(_), event) => {
14458 *self.state__ = s;
14459 break (DeserializerEvent::Continue(event), false);
14460 }
14461 (state, event) => {
14462 *self.state__ = state;
14463 break (DeserializerEvent::Break(event), false);
14464 }
14465 }
14466 };
14467 let artifact = if matches!(&*self.state__, S::Done__(_)) {
14468 DeserializerArtifact::Data(self.finish(helper)?)
14469 } else {
14470 DeserializerArtifact::Deserializer(self)
14471 };
14472 Ok(DeserializerOutput {
14473 artifact,
14474 event,
14475 allow_any,
14476 })
14477 }
14478 fn finish(
14479 self,
14480 helper: &mut DeserializeHelper,
14481 ) -> Result<super::SimpleContentContent, Error> {
14482 SimpleContentContentDeserializer::finish_state(helper, *self.state__)
14483 }
14484 }
14485 #[derive(Debug)]
14486 pub struct ComplexContentDeserializer {
14487 id: Option<String>,
14488 mixed: Option<bool>,
14489 content: Vec<super::ComplexContentContent>,
14490 state__: Box<ComplexContentDeserializerState>,
14491 }
14492 #[derive(Debug)]
14493 enum ComplexContentDeserializerState {
14494 Init__,
14495 Next__,
14496 Content__(<super::ComplexContentContent as WithDeserializer>::Deserializer),
14497 Unknown__,
14498 }
14499 impl ComplexContentDeserializer {
14500 fn from_bytes_start(
14501 helper: &mut DeserializeHelper,
14502 bytes_start: &BytesStart<'_>,
14503 ) -> Result<Box<Self>, Error> {
14504 let mut id: Option<String> = None;
14505 let mut mixed: Option<bool> = None;
14506 for attrib in helper.filter_xmlns_attributes(bytes_start) {
14507 let attrib = attrib?;
14508 if matches!(
14509 helper.resolve_local_name(attrib.key, &super::NS_XS),
14510 Some(b"id")
14511 ) {
14512 helper.read_attrib(&mut id, b"id", &attrib.value)?;
14513 } else if matches!(
14514 helper.resolve_local_name(attrib.key, &super::NS_XS),
14515 Some(b"mixed")
14516 ) {
14517 helper.read_attrib(&mut mixed, b"mixed", &attrib.value)?;
14518 }
14519 }
14520 Ok(Box::new(Self {
14521 id: id,
14522 mixed: mixed,
14523 content: Vec::new(),
14524 state__: Box::new(ComplexContentDeserializerState::Init__),
14525 }))
14526 }
14527 fn finish_state(
14528 &mut self,
14529 helper: &mut DeserializeHelper,
14530 state: ComplexContentDeserializerState,
14531 ) -> Result<(), Error> {
14532 if let ComplexContentDeserializerState::Content__(deserializer) = state {
14533 self.store_content(deserializer.finish(helper)?)?;
14534 }
14535 Ok(())
14536 }
14537 fn store_content(&mut self, value: super::ComplexContentContent) -> Result<(), Error> {
14538 self.content.push(value);
14539 Ok(())
14540 }
14541 fn handle_content<'de>(
14542 &mut self,
14543 helper: &mut DeserializeHelper,
14544 output: DeserializerOutput<'de, super::ComplexContentContent>,
14545 fallback: &mut Option<ComplexContentDeserializerState>,
14546 ) -> Result<ElementHandlerOutput<'de>, Error> {
14547 let DeserializerOutput {
14548 artifact,
14549 event,
14550 allow_any,
14551 } = output;
14552 if artifact.is_none() {
14553 *self.state__ = fallback
14554 .take()
14555 .unwrap_or(ComplexContentDeserializerState::Next__);
14556 return Ok(ElementHandlerOutput::break_(event, allow_any));
14557 }
14558 if let Some(fallback) = fallback.take() {
14559 self.finish_state(helper, fallback)?;
14560 }
14561 Ok(match artifact {
14562 DeserializerArtifact::None => unreachable!(),
14563 DeserializerArtifact::Data(data) => {
14564 self.store_content(data)?;
14565 *self.state__ = ComplexContentDeserializerState::Next__;
14566 ElementHandlerOutput::from_event(event, allow_any)
14567 }
14568 DeserializerArtifact::Deserializer(deserializer) => {
14569 let can_have_more = self.content.len().saturating_add(1) < 2usize;
14570 let ret = if can_have_more {
14571 ElementHandlerOutput::from_event(event, allow_any)
14572 } else {
14573 ElementHandlerOutput::from_event_end(event, allow_any)
14574 };
14575 match (can_have_more, &ret) {
14576 (true, ElementHandlerOutput::Continue { .. }) => {
14577 fallback.get_or_insert(ComplexContentDeserializerState::Content__(
14578 deserializer,
14579 ));
14580 *self.state__ = ComplexContentDeserializerState::Next__;
14581 }
14582 (false, _) | (_, ElementHandlerOutput::Break { .. }) => {
14583 *self.state__ =
14584 ComplexContentDeserializerState::Content__(deserializer);
14585 }
14586 }
14587 ret
14588 }
14589 })
14590 }
14591 }
14592 impl<'de> Deserializer<'de, super::ComplexContent> for Box<ComplexContentDeserializer> {
14593 fn init(
14594 helper: &mut DeserializeHelper,
14595 event: Event<'de>,
14596 ) -> DeserializerResult<'de, super::ComplexContent> {
14597 helper.init_deserializer_from_start_event(
14598 event,
14599 ComplexContentDeserializer::from_bytes_start,
14600 )
14601 }
14602 fn next(
14603 mut self,
14604 helper: &mut DeserializeHelper,
14605 event: Event<'de>,
14606 ) -> DeserializerResult<'de, super::ComplexContent> {
14607 use ComplexContentDeserializerState as S;
14608 let mut event = event;
14609 let mut fallback = None;
14610 let (event, allow_any) = loop {
14611 let state = replace(&mut *self.state__, S::Unknown__);
14612 event = match (state, event) {
14613 (S::Unknown__, _) => unreachable!(),
14614 (S::Content__(deserializer), event) => {
14615 let output = deserializer.next(helper, event)?;
14616 match self.handle_content(helper, output, &mut fallback)? {
14617 ElementHandlerOutput::Break { event, allow_any } => {
14618 break (event, allow_any)
14619 }
14620 ElementHandlerOutput::Continue { event, .. } => event,
14621 }
14622 }
14623 (_, Event::End(_)) => {
14624 return Ok(DeserializerOutput {
14625 artifact: DeserializerArtifact::Data(self.finish(helper)?),
14626 event: DeserializerEvent::None,
14627 allow_any: false,
14628 });
14629 }
14630 (state @ (S::Init__ | S::Next__), event) => {
14631 fallback.get_or_insert(state);
14632 let output =
14633 <super::ComplexContentContent as WithDeserializer>::Deserializer::init(
14634 helper, event,
14635 )?;
14636 match self.handle_content(helper, output, &mut fallback)? {
14637 ElementHandlerOutput::Break { event, allow_any } => {
14638 break (event, allow_any)
14639 }
14640 ElementHandlerOutput::Continue { event, .. } => event,
14641 }
14642 }
14643 }
14644 };
14645 let artifact = DeserializerArtifact::Deserializer(self);
14646 Ok(DeserializerOutput {
14647 artifact,
14648 event,
14649 allow_any,
14650 })
14651 }
14652 fn finish(
14653 mut self,
14654 helper: &mut DeserializeHelper,
14655 ) -> Result<super::ComplexContent, Error> {
14656 let state = replace(
14657 &mut *self.state__,
14658 ComplexContentDeserializerState::Unknown__,
14659 );
14660 self.finish_state(helper, state)?;
14661 Ok(super::ComplexContent {
14662 id: self.id,
14663 mixed: self.mixed,
14664 content: self.content,
14665 })
14666 }
14667 }
14668 #[derive(Debug)]
14669 pub struct ComplexContentContentDeserializer {
14670 state__: Box<ComplexContentContentDeserializerState>,
14671 }
14672 #[derive(Debug)]
14673 pub enum ComplexContentContentDeserializerState {
14674 Init__,
14675 Annotation(
14676 Option<super::Annotation>,
14677 Option<<super::Annotation as WithDeserializer>::Deserializer>,
14678 ),
14679 Restriction(
14680 Option<super::RestrictionType>,
14681 Option<<super::RestrictionType as WithDeserializer>::Deserializer>,
14682 ),
14683 Extension(
14684 Option<super::ExtensionType>,
14685 Option<<super::ExtensionType as WithDeserializer>::Deserializer>,
14686 ),
14687 Done__(super::ComplexContentContent),
14688 Unknown__,
14689 }
14690 impl ComplexContentContentDeserializer {
14691 fn find_suitable<'de>(
14692 &mut self,
14693 helper: &mut DeserializeHelper,
14694 event: Event<'de>,
14695 fallback: &mut Option<ComplexContentContentDeserializerState>,
14696 ) -> Result<ElementHandlerOutput<'de>, Error> {
14697 if let Event::Start(x) | Event::Empty(x) = &event {
14698 if matches!(
14699 helper.resolve_local_name(x.name(), &super::NS_XS),
14700 Some(b"annotation")
14701 ) {
14702 let output =
14703 <super::Annotation as WithDeserializer>::Deserializer::init(helper, event)?;
14704 return self.handle_annotation(
14705 helper,
14706 Default::default(),
14707 output,
14708 &mut *fallback,
14709 );
14710 }
14711 if matches!(
14712 helper.resolve_local_name(x.name(), &super::NS_XS),
14713 Some(b"restriction")
14714 ) {
14715 let output = <super::RestrictionType as WithDeserializer>::Deserializer::init(
14716 helper, event,
14717 )?;
14718 return self.handle_restriction(
14719 helper,
14720 Default::default(),
14721 output,
14722 &mut *fallback,
14723 );
14724 }
14725 if matches!(
14726 helper.resolve_local_name(x.name(), &super::NS_XS),
14727 Some(b"extension")
14728 ) {
14729 let output = <super::ExtensionType as WithDeserializer>::Deserializer::init(
14730 helper, event,
14731 )?;
14732 return self.handle_extension(
14733 helper,
14734 Default::default(),
14735 output,
14736 &mut *fallback,
14737 );
14738 }
14739 }
14740 *self.state__ = fallback
14741 .take()
14742 .unwrap_or(ComplexContentContentDeserializerState::Init__);
14743 Ok(ElementHandlerOutput::return_to_parent(event, false))
14744 }
14745 fn finish_state(
14746 helper: &mut DeserializeHelper,
14747 state: ComplexContentContentDeserializerState,
14748 ) -> Result<super::ComplexContentContent, Error> {
14749 use ComplexContentContentDeserializerState as S;
14750 match state {
14751 S::Unknown__ => unreachable!(),
14752 S::Init__ => Err(ErrorKind::MissingContent.into()),
14753 S::Annotation(mut values, deserializer) => {
14754 if let Some(deserializer) = deserializer {
14755 let value = deserializer.finish(helper)?;
14756 ComplexContentContentDeserializer::store_annotation(&mut values, value)?;
14757 }
14758 Ok(super::ComplexContentContent::Annotation(
14759 values.ok_or_else(|| ErrorKind::MissingElement("annotation".into()))?,
14760 ))
14761 }
14762 S::Restriction(mut values, deserializer) => {
14763 if let Some(deserializer) = deserializer {
14764 let value = deserializer.finish(helper)?;
14765 ComplexContentContentDeserializer::store_restriction(&mut values, value)?;
14766 }
14767 Ok(super::ComplexContentContent::Restriction(
14768 values.ok_or_else(|| ErrorKind::MissingElement("restriction".into()))?,
14769 ))
14770 }
14771 S::Extension(mut values, deserializer) => {
14772 if let Some(deserializer) = deserializer {
14773 let value = deserializer.finish(helper)?;
14774 ComplexContentContentDeserializer::store_extension(&mut values, value)?;
14775 }
14776 Ok(super::ComplexContentContent::Extension(values.ok_or_else(
14777 || ErrorKind::MissingElement("extension".into()),
14778 )?))
14779 }
14780 S::Done__(data) => Ok(data),
14781 }
14782 }
14783 fn store_annotation(
14784 values: &mut Option<super::Annotation>,
14785 value: super::Annotation,
14786 ) -> Result<(), Error> {
14787 if values.is_some() {
14788 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
14789 b"annotation",
14790 )))?;
14791 }
14792 *values = Some(value);
14793 Ok(())
14794 }
14795 fn store_restriction(
14796 values: &mut Option<super::RestrictionType>,
14797 value: super::RestrictionType,
14798 ) -> Result<(), Error> {
14799 if values.is_some() {
14800 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
14801 b"restriction",
14802 )))?;
14803 }
14804 *values = Some(value);
14805 Ok(())
14806 }
14807 fn store_extension(
14808 values: &mut Option<super::ExtensionType>,
14809 value: super::ExtensionType,
14810 ) -> Result<(), Error> {
14811 if values.is_some() {
14812 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
14813 b"extension",
14814 )))?;
14815 }
14816 *values = Some(value);
14817 Ok(())
14818 }
14819 fn handle_annotation<'de>(
14820 &mut self,
14821 helper: &mut DeserializeHelper,
14822 mut values: Option<super::Annotation>,
14823 output: DeserializerOutput<'de, super::Annotation>,
14824 fallback: &mut Option<ComplexContentContentDeserializerState>,
14825 ) -> Result<ElementHandlerOutput<'de>, Error> {
14826 let DeserializerOutput {
14827 artifact,
14828 event,
14829 allow_any,
14830 } = output;
14831 if artifact.is_none() {
14832 *self.state__ = match fallback.take() {
14833 None if values.is_none() => {
14834 *self.state__ = ComplexContentContentDeserializerState::Init__;
14835 return Ok(ElementHandlerOutput::from_event(event, allow_any));
14836 }
14837 None => ComplexContentContentDeserializerState::Annotation(values, None),
14838 Some(ComplexContentContentDeserializerState::Annotation(
14839 _,
14840 Some(deserializer),
14841 )) => ComplexContentContentDeserializerState::Annotation(
14842 values,
14843 Some(deserializer),
14844 ),
14845 _ => unreachable!(),
14846 };
14847 return Ok(ElementHandlerOutput::break_(event, allow_any));
14848 }
14849 match fallback.take() {
14850 None => (),
14851 Some(ComplexContentContentDeserializerState::Annotation(_, Some(deserializer))) => {
14852 let data = deserializer.finish(helper)?;
14853 ComplexContentContentDeserializer::store_annotation(&mut values, data)?;
14854 }
14855 Some(_) => unreachable!(),
14856 }
14857 Ok(match artifact {
14858 DeserializerArtifact::None => unreachable!(),
14859 DeserializerArtifact::Data(data) => {
14860 ComplexContentContentDeserializer::store_annotation(&mut values, data)?;
14861 let data = ComplexContentContentDeserializer::finish_state(
14862 helper,
14863 ComplexContentContentDeserializerState::Annotation(values, None),
14864 )?;
14865 *self.state__ = ComplexContentContentDeserializerState::Done__(data);
14866 ElementHandlerOutput::Break { event, allow_any }
14867 }
14868 DeserializerArtifact::Deserializer(deserializer) => {
14869 *self.state__ = ComplexContentContentDeserializerState::Annotation(
14870 values,
14871 Some(deserializer),
14872 );
14873 ElementHandlerOutput::from_event_end(event, allow_any)
14874 }
14875 })
14876 }
14877 fn handle_restriction<'de>(
14878 &mut self,
14879 helper: &mut DeserializeHelper,
14880 mut values: Option<super::RestrictionType>,
14881 output: DeserializerOutput<'de, super::RestrictionType>,
14882 fallback: &mut Option<ComplexContentContentDeserializerState>,
14883 ) -> Result<ElementHandlerOutput<'de>, Error> {
14884 let DeserializerOutput {
14885 artifact,
14886 event,
14887 allow_any,
14888 } = output;
14889 if artifact.is_none() {
14890 *self.state__ = match fallback.take() {
14891 None if values.is_none() => {
14892 *self.state__ = ComplexContentContentDeserializerState::Init__;
14893 return Ok(ElementHandlerOutput::from_event(event, allow_any));
14894 }
14895 None => ComplexContentContentDeserializerState::Restriction(values, None),
14896 Some(ComplexContentContentDeserializerState::Restriction(
14897 _,
14898 Some(deserializer),
14899 )) => ComplexContentContentDeserializerState::Restriction(
14900 values,
14901 Some(deserializer),
14902 ),
14903 _ => unreachable!(),
14904 };
14905 return Ok(ElementHandlerOutput::break_(event, allow_any));
14906 }
14907 match fallback.take() {
14908 None => (),
14909 Some(ComplexContentContentDeserializerState::Restriction(
14910 _,
14911 Some(deserializer),
14912 )) => {
14913 let data = deserializer.finish(helper)?;
14914 ComplexContentContentDeserializer::store_restriction(&mut values, data)?;
14915 }
14916 Some(_) => unreachable!(),
14917 }
14918 Ok(match artifact {
14919 DeserializerArtifact::None => unreachable!(),
14920 DeserializerArtifact::Data(data) => {
14921 ComplexContentContentDeserializer::store_restriction(&mut values, data)?;
14922 let data = ComplexContentContentDeserializer::finish_state(
14923 helper,
14924 ComplexContentContentDeserializerState::Restriction(values, None),
14925 )?;
14926 *self.state__ = ComplexContentContentDeserializerState::Done__(data);
14927 ElementHandlerOutput::Break { event, allow_any }
14928 }
14929 DeserializerArtifact::Deserializer(deserializer) => {
14930 *self.state__ = ComplexContentContentDeserializerState::Restriction(
14931 values,
14932 Some(deserializer),
14933 );
14934 ElementHandlerOutput::from_event_end(event, allow_any)
14935 }
14936 })
14937 }
14938 fn handle_extension<'de>(
14939 &mut self,
14940 helper: &mut DeserializeHelper,
14941 mut values: Option<super::ExtensionType>,
14942 output: DeserializerOutput<'de, super::ExtensionType>,
14943 fallback: &mut Option<ComplexContentContentDeserializerState>,
14944 ) -> Result<ElementHandlerOutput<'de>, Error> {
14945 let DeserializerOutput {
14946 artifact,
14947 event,
14948 allow_any,
14949 } = output;
14950 if artifact.is_none() {
14951 *self.state__ = match fallback.take() {
14952 None if values.is_none() => {
14953 *self.state__ = ComplexContentContentDeserializerState::Init__;
14954 return Ok(ElementHandlerOutput::from_event(event, allow_any));
14955 }
14956 None => ComplexContentContentDeserializerState::Extension(values, None),
14957 Some(ComplexContentContentDeserializerState::Extension(
14958 _,
14959 Some(deserializer),
14960 )) => ComplexContentContentDeserializerState::Extension(
14961 values,
14962 Some(deserializer),
14963 ),
14964 _ => unreachable!(),
14965 };
14966 return Ok(ElementHandlerOutput::break_(event, allow_any));
14967 }
14968 match fallback.take() {
14969 None => (),
14970 Some(ComplexContentContentDeserializerState::Extension(_, Some(deserializer))) => {
14971 let data = deserializer.finish(helper)?;
14972 ComplexContentContentDeserializer::store_extension(&mut values, data)?;
14973 }
14974 Some(_) => unreachable!(),
14975 }
14976 Ok(match artifact {
14977 DeserializerArtifact::None => unreachable!(),
14978 DeserializerArtifact::Data(data) => {
14979 ComplexContentContentDeserializer::store_extension(&mut values, data)?;
14980 let data = ComplexContentContentDeserializer::finish_state(
14981 helper,
14982 ComplexContentContentDeserializerState::Extension(values, None),
14983 )?;
14984 *self.state__ = ComplexContentContentDeserializerState::Done__(data);
14985 ElementHandlerOutput::Break { event, allow_any }
14986 }
14987 DeserializerArtifact::Deserializer(deserializer) => {
14988 *self.state__ = ComplexContentContentDeserializerState::Extension(
14989 values,
14990 Some(deserializer),
14991 );
14992 ElementHandlerOutput::from_event_end(event, allow_any)
14993 }
14994 })
14995 }
14996 }
14997 impl<'de> Deserializer<'de, super::ComplexContentContent>
14998 for Box<ComplexContentContentDeserializer>
14999 {
15000 fn init(
15001 helper: &mut DeserializeHelper,
15002 event: Event<'de>,
15003 ) -> DeserializerResult<'de, super::ComplexContentContent> {
15004 let deserializer = Box::new(ComplexContentContentDeserializer {
15005 state__: Box::new(ComplexContentContentDeserializerState::Init__),
15006 });
15007 let mut output = deserializer.next(helper, event)?;
15008 output.artifact = match output.artifact {
15009 DeserializerArtifact::Deserializer(x)
15010 if matches!(&*x.state__, ComplexContentContentDeserializerState::Init__) =>
15011 {
15012 DeserializerArtifact::None
15013 }
15014 artifact => artifact,
15015 };
15016 Ok(output)
15017 }
15018 fn next(
15019 mut self,
15020 helper: &mut DeserializeHelper,
15021 event: Event<'de>,
15022 ) -> DeserializerResult<'de, super::ComplexContentContent> {
15023 use ComplexContentContentDeserializerState as S;
15024 let mut event = event;
15025 let mut fallback = None;
15026 let (event, allow_any) = loop {
15027 let state = replace(&mut *self.state__, S::Unknown__);
15028 event = match (state, event) {
15029 (S::Unknown__, _) => unreachable!(),
15030 (S::Annotation(values, Some(deserializer)), event) => {
15031 let output = deserializer.next(helper, event)?;
15032 match self.handle_annotation(helper, values, output, &mut fallback)? {
15033 ElementHandlerOutput::Break { event, allow_any } => {
15034 break (event, allow_any)
15035 }
15036 ElementHandlerOutput::Continue { event, .. } => event,
15037 }
15038 }
15039 (S::Restriction(values, Some(deserializer)), event) => {
15040 let output = deserializer.next(helper, event)?;
15041 match self.handle_restriction(helper, values, output, &mut fallback)? {
15042 ElementHandlerOutput::Break { event, allow_any } => {
15043 break (event, allow_any)
15044 }
15045 ElementHandlerOutput::Continue { event, .. } => event,
15046 }
15047 }
15048 (S::Extension(values, Some(deserializer)), event) => {
15049 let output = deserializer.next(helper, event)?;
15050 match self.handle_extension(helper, values, output, &mut fallback)? {
15051 ElementHandlerOutput::Break { event, allow_any } => {
15052 break (event, allow_any)
15053 }
15054 ElementHandlerOutput::Continue { event, .. } => event,
15055 }
15056 }
15057 (state, event @ Event::End(_)) => {
15058 return Ok(DeserializerOutput {
15059 artifact: DeserializerArtifact::Data(
15060 ComplexContentContentDeserializer::finish_state(helper, state)?,
15061 ),
15062 event: DeserializerEvent::Continue(event),
15063 allow_any: false,
15064 });
15065 }
15066 (S::Init__, event) => match self.find_suitable(helper, event, &mut fallback)? {
15067 ElementHandlerOutput::Break { event, allow_any } => {
15068 break (event, allow_any)
15069 }
15070 ElementHandlerOutput::Continue { event, .. } => event,
15071 },
15072 (S::Annotation(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
15073 let output = helper.init_start_tag_deserializer(
15074 event,
15075 Some(&super::NS_XS),
15076 b"annotation",
15077 false,
15078 )?;
15079 match self.handle_annotation(helper, values, output, &mut fallback)? {
15080 ElementHandlerOutput::Break { event, allow_any } => {
15081 break (event, allow_any)
15082 }
15083 ElementHandlerOutput::Continue { event, .. } => event,
15084 }
15085 }
15086 (S::Restriction(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
15087 let output = helper.init_start_tag_deserializer(
15088 event,
15089 Some(&super::NS_XS),
15090 b"restriction",
15091 true,
15092 )?;
15093 match self.handle_restriction(helper, values, output, &mut fallback)? {
15094 ElementHandlerOutput::Break { event, allow_any } => {
15095 break (event, allow_any)
15096 }
15097 ElementHandlerOutput::Continue { event, .. } => event,
15098 }
15099 }
15100 (S::Extension(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
15101 let output = helper.init_start_tag_deserializer(
15102 event,
15103 Some(&super::NS_XS),
15104 b"extension",
15105 true,
15106 )?;
15107 match self.handle_extension(helper, values, output, &mut fallback)? {
15108 ElementHandlerOutput::Break { event, allow_any } => {
15109 break (event, allow_any)
15110 }
15111 ElementHandlerOutput::Continue { event, .. } => event,
15112 }
15113 }
15114 (s @ S::Done__(_), event) => {
15115 *self.state__ = s;
15116 break (DeserializerEvent::Continue(event), false);
15117 }
15118 (state, event) => {
15119 *self.state__ = state;
15120 break (DeserializerEvent::Break(event), false);
15121 }
15122 }
15123 };
15124 let artifact = if matches!(&*self.state__, S::Done__(_)) {
15125 DeserializerArtifact::Data(self.finish(helper)?)
15126 } else {
15127 DeserializerArtifact::Deserializer(self)
15128 };
15129 Ok(DeserializerOutput {
15130 artifact,
15131 event,
15132 allow_any,
15133 })
15134 }
15135 fn finish(
15136 self,
15137 helper: &mut DeserializeHelper,
15138 ) -> Result<super::ComplexContentContent, Error> {
15139 ComplexContentContentDeserializer::finish_state(helper, *self.state__)
15140 }
15141 }
15142 #[derive(Debug)]
15143 pub struct OpenContentDeserializer {
15144 id: Option<String>,
15145 mode: super::OpenContentModeType,
15146 annotation: Option<super::Annotation>,
15147 any: Option<super::WildcardType>,
15148 state__: Box<OpenContentDeserializerState>,
15149 }
15150 #[derive(Debug)]
15151 enum OpenContentDeserializerState {
15152 Init__,
15153 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
15154 Any(Option<<super::WildcardType as WithDeserializer>::Deserializer>),
15155 Done__,
15156 Unknown__,
15157 }
15158 impl OpenContentDeserializer {
15159 fn from_bytes_start(
15160 helper: &mut DeserializeHelper,
15161 bytes_start: &BytesStart<'_>,
15162 ) -> Result<Box<Self>, Error> {
15163 let mut id: Option<String> = None;
15164 let mut mode: Option<super::OpenContentModeType> = None;
15165 for attrib in helper.filter_xmlns_attributes(bytes_start) {
15166 let attrib = attrib?;
15167 if matches!(
15168 helper.resolve_local_name(attrib.key, &super::NS_XS),
15169 Some(b"id")
15170 ) {
15171 helper.read_attrib(&mut id, b"id", &attrib.value)?;
15172 } else if matches!(
15173 helper.resolve_local_name(attrib.key, &super::NS_XS),
15174 Some(b"mode")
15175 ) {
15176 helper.read_attrib(&mut mode, b"mode", &attrib.value)?;
15177 }
15178 }
15179 Ok(Box::new(Self {
15180 id: id,
15181 mode: mode.unwrap_or_else(super::OpenContent::default_mode),
15182 annotation: None,
15183 any: None,
15184 state__: Box::new(OpenContentDeserializerState::Init__),
15185 }))
15186 }
15187 fn finish_state(
15188 &mut self,
15189 helper: &mut DeserializeHelper,
15190 state: OpenContentDeserializerState,
15191 ) -> Result<(), Error> {
15192 use OpenContentDeserializerState as S;
15193 match state {
15194 S::Annotation(Some(deserializer)) => {
15195 self.store_annotation(deserializer.finish(helper)?)?
15196 }
15197 S::Any(Some(deserializer)) => self.store_any(deserializer.finish(helper)?)?,
15198 _ => (),
15199 }
15200 Ok(())
15201 }
15202 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
15203 if self.annotation.is_some() {
15204 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
15205 b"annotation",
15206 )))?;
15207 }
15208 self.annotation = Some(value);
15209 Ok(())
15210 }
15211 fn store_any(&mut self, value: super::WildcardType) -> Result<(), Error> {
15212 if self.any.is_some() {
15213 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"any")))?;
15214 }
15215 self.any = Some(value);
15216 Ok(())
15217 }
15218 fn handle_annotation<'de>(
15219 &mut self,
15220 helper: &mut DeserializeHelper,
15221 output: DeserializerOutput<'de, super::Annotation>,
15222 fallback: &mut Option<OpenContentDeserializerState>,
15223 ) -> Result<ElementHandlerOutput<'de>, Error> {
15224 let DeserializerOutput {
15225 artifact,
15226 event,
15227 allow_any,
15228 } = output;
15229 if artifact.is_none() {
15230 fallback.get_or_insert(OpenContentDeserializerState::Annotation(None));
15231 *self.state__ = OpenContentDeserializerState::Any(None);
15232 return Ok(ElementHandlerOutput::from_event(event, allow_any));
15233 }
15234 if let Some(fallback) = fallback.take() {
15235 self.finish_state(helper, fallback)?;
15236 }
15237 Ok(match artifact {
15238 DeserializerArtifact::None => unreachable!(),
15239 DeserializerArtifact::Data(data) => {
15240 self.store_annotation(data)?;
15241 *self.state__ = OpenContentDeserializerState::Any(None);
15242 ElementHandlerOutput::from_event(event, allow_any)
15243 }
15244 DeserializerArtifact::Deserializer(deserializer) => {
15245 let ret = ElementHandlerOutput::from_event(event, allow_any);
15246 match &ret {
15247 ElementHandlerOutput::Continue { .. } => {
15248 fallback.get_or_insert(OpenContentDeserializerState::Annotation(Some(
15249 deserializer,
15250 )));
15251 *self.state__ = OpenContentDeserializerState::Any(None);
15252 }
15253 ElementHandlerOutput::Break { .. } => {
15254 *self.state__ =
15255 OpenContentDeserializerState::Annotation(Some(deserializer));
15256 }
15257 }
15258 ret
15259 }
15260 })
15261 }
15262 fn handle_any<'de>(
15263 &mut self,
15264 helper: &mut DeserializeHelper,
15265 output: DeserializerOutput<'de, super::WildcardType>,
15266 fallback: &mut Option<OpenContentDeserializerState>,
15267 ) -> Result<ElementHandlerOutput<'de>, Error> {
15268 let DeserializerOutput {
15269 artifact,
15270 event,
15271 allow_any,
15272 } = output;
15273 if artifact.is_none() {
15274 fallback.get_or_insert(OpenContentDeserializerState::Any(None));
15275 *self.state__ = OpenContentDeserializerState::Done__;
15276 return Ok(ElementHandlerOutput::from_event(event, allow_any));
15277 }
15278 if let Some(fallback) = fallback.take() {
15279 self.finish_state(helper, fallback)?;
15280 }
15281 Ok(match artifact {
15282 DeserializerArtifact::None => unreachable!(),
15283 DeserializerArtifact::Data(data) => {
15284 self.store_any(data)?;
15285 *self.state__ = OpenContentDeserializerState::Done__;
15286 ElementHandlerOutput::from_event(event, allow_any)
15287 }
15288 DeserializerArtifact::Deserializer(deserializer) => {
15289 let ret = ElementHandlerOutput::from_event(event, allow_any);
15290 match &ret {
15291 ElementHandlerOutput::Continue { .. } => {
15292 fallback.get_or_insert(OpenContentDeserializerState::Any(Some(
15293 deserializer,
15294 )));
15295 *self.state__ = OpenContentDeserializerState::Done__;
15296 }
15297 ElementHandlerOutput::Break { .. } => {
15298 *self.state__ = OpenContentDeserializerState::Any(Some(deserializer));
15299 }
15300 }
15301 ret
15302 }
15303 })
15304 }
15305 }
15306 impl<'de> Deserializer<'de, super::OpenContent> for Box<OpenContentDeserializer> {
15307 fn init(
15308 helper: &mut DeserializeHelper,
15309 event: Event<'de>,
15310 ) -> DeserializerResult<'de, super::OpenContent> {
15311 helper.init_deserializer_from_start_event(
15312 event,
15313 OpenContentDeserializer::from_bytes_start,
15314 )
15315 }
15316 fn next(
15317 mut self,
15318 helper: &mut DeserializeHelper,
15319 event: Event<'de>,
15320 ) -> DeserializerResult<'de, super::OpenContent> {
15321 use OpenContentDeserializerState as S;
15322 let mut event = event;
15323 let mut fallback = None;
15324 let mut allow_any_element = false;
15325 let (event, allow_any) = loop {
15326 let state = replace(&mut *self.state__, S::Unknown__);
15327 event = match (state, event) {
15328 (S::Unknown__, _) => unreachable!(),
15329 (S::Annotation(Some(deserializer)), event) => {
15330 let output = deserializer.next(helper, event)?;
15331 match self.handle_annotation(helper, output, &mut fallback)? {
15332 ElementHandlerOutput::Continue { event, allow_any } => {
15333 allow_any_element = allow_any_element || allow_any;
15334 event
15335 }
15336 ElementHandlerOutput::Break { event, allow_any } => {
15337 break (event, allow_any)
15338 }
15339 }
15340 }
15341 (S::Any(Some(deserializer)), event) => {
15342 let output = deserializer.next(helper, event)?;
15343 match self.handle_any(helper, output, &mut fallback)? {
15344 ElementHandlerOutput::Continue { event, allow_any } => {
15345 allow_any_element = allow_any_element || allow_any;
15346 event
15347 }
15348 ElementHandlerOutput::Break { event, allow_any } => {
15349 break (event, allow_any)
15350 }
15351 }
15352 }
15353 (_, Event::End(_)) => {
15354 if let Some(fallback) = fallback.take() {
15355 self.finish_state(helper, fallback)?;
15356 }
15357 return Ok(DeserializerOutput {
15358 artifact: DeserializerArtifact::Data(self.finish(helper)?),
15359 event: DeserializerEvent::None,
15360 allow_any: false,
15361 });
15362 }
15363 (S::Init__, event) => {
15364 fallback.get_or_insert(S::Init__);
15365 *self.state__ = OpenContentDeserializerState::Annotation(None);
15366 event
15367 }
15368 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
15369 let output = helper.init_start_tag_deserializer(
15370 event,
15371 Some(&super::NS_XS),
15372 b"annotation",
15373 false,
15374 )?;
15375 match self.handle_annotation(helper, output, &mut fallback)? {
15376 ElementHandlerOutput::Continue { event, allow_any } => {
15377 allow_any_element = allow_any_element || allow_any;
15378 event
15379 }
15380 ElementHandlerOutput::Break { event, allow_any } => {
15381 break (event, allow_any)
15382 }
15383 }
15384 }
15385 (S::Any(None), event @ (Event::Start(_) | Event::Empty(_))) => {
15386 let output = helper.init_start_tag_deserializer(
15387 event,
15388 Some(&super::NS_XS),
15389 b"any",
15390 false,
15391 )?;
15392 match self.handle_any(helper, output, &mut fallback)? {
15393 ElementHandlerOutput::Continue { event, allow_any } => {
15394 allow_any_element = allow_any_element || allow_any;
15395 event
15396 }
15397 ElementHandlerOutput::Break { event, allow_any } => {
15398 break (event, allow_any)
15399 }
15400 }
15401 }
15402 (S::Done__, event) => {
15403 fallback.get_or_insert(S::Done__);
15404 break (DeserializerEvent::Continue(event), allow_any_element);
15405 }
15406 (state, event) => {
15407 *self.state__ = state;
15408 break (DeserializerEvent::Break(event), false);
15409 }
15410 }
15411 };
15412 if let Some(fallback) = fallback {
15413 *self.state__ = fallback;
15414 }
15415 Ok(DeserializerOutput {
15416 artifact: DeserializerArtifact::Deserializer(self),
15417 event,
15418 allow_any,
15419 })
15420 }
15421 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::OpenContent, Error> {
15422 let state = replace(&mut *self.state__, OpenContentDeserializerState::Unknown__);
15423 self.finish_state(helper, state)?;
15424 Ok(super::OpenContent {
15425 id: self.id,
15426 mode: self.mode,
15427 annotation: self.annotation,
15428 any: self.any,
15429 })
15430 }
15431 }
15432 #[derive(Debug)]
15433 pub struct AnyAttributeDeserializer {
15434 id: Option<String>,
15435 namespace: Option<super::NamespaceListType>,
15436 not_namespace: Option<super::NotNamespaceType>,
15437 process_contents: super::ProcessContentsType,
15438 not_q_name: Option<super::QnameListAType>,
15439 annotation: Option<super::Annotation>,
15440 state__: Box<AnyAttributeDeserializerState>,
15441 }
15442 #[derive(Debug)]
15443 enum AnyAttributeDeserializerState {
15444 Init__,
15445 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
15446 Done__,
15447 Unknown__,
15448 }
15449 impl AnyAttributeDeserializer {
15450 fn from_bytes_start(
15451 helper: &mut DeserializeHelper,
15452 bytes_start: &BytesStart<'_>,
15453 ) -> Result<Box<Self>, Error> {
15454 let mut id: Option<String> = None;
15455 let mut namespace: Option<super::NamespaceListType> = None;
15456 let mut not_namespace: Option<super::NotNamespaceType> = None;
15457 let mut process_contents: Option<super::ProcessContentsType> = None;
15458 let mut not_q_name: Option<super::QnameListAType> = None;
15459 for attrib in helper.filter_xmlns_attributes(bytes_start) {
15460 let attrib = attrib?;
15461 if matches!(
15462 helper.resolve_local_name(attrib.key, &super::NS_XS),
15463 Some(b"id")
15464 ) {
15465 helper.read_attrib(&mut id, b"id", &attrib.value)?;
15466 } else if matches!(
15467 helper.resolve_local_name(attrib.key, &super::NS_XS),
15468 Some(b"namespace")
15469 ) {
15470 helper.read_attrib(&mut namespace, b"namespace", &attrib.value)?;
15471 } else if matches!(
15472 helper.resolve_local_name(attrib.key, &super::NS_XS),
15473 Some(b"notNamespace")
15474 ) {
15475 helper.read_attrib(&mut not_namespace, b"notNamespace", &attrib.value)?;
15476 } else if matches!(
15477 helper.resolve_local_name(attrib.key, &super::NS_XS),
15478 Some(b"processContents")
15479 ) {
15480 helper.read_attrib(&mut process_contents, b"processContents", &attrib.value)?;
15481 } else if matches!(
15482 helper.resolve_local_name(attrib.key, &super::NS_XS),
15483 Some(b"notQName")
15484 ) {
15485 helper.read_attrib(&mut not_q_name, b"notQName", &attrib.value)?;
15486 }
15487 }
15488 Ok(Box::new(Self {
15489 id: id,
15490 namespace: namespace,
15491 not_namespace: not_namespace,
15492 process_contents: process_contents
15493 .unwrap_or_else(super::AnyAttribute::default_process_contents),
15494 not_q_name: not_q_name,
15495 annotation: None,
15496 state__: Box::new(AnyAttributeDeserializerState::Init__),
15497 }))
15498 }
15499 fn finish_state(
15500 &mut self,
15501 helper: &mut DeserializeHelper,
15502 state: AnyAttributeDeserializerState,
15503 ) -> Result<(), Error> {
15504 use AnyAttributeDeserializerState as S;
15505 match state {
15506 S::Annotation(Some(deserializer)) => {
15507 self.store_annotation(deserializer.finish(helper)?)?
15508 }
15509 _ => (),
15510 }
15511 Ok(())
15512 }
15513 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
15514 if self.annotation.is_some() {
15515 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
15516 b"annotation",
15517 )))?;
15518 }
15519 self.annotation = Some(value);
15520 Ok(())
15521 }
15522 fn handle_annotation<'de>(
15523 &mut self,
15524 helper: &mut DeserializeHelper,
15525 output: DeserializerOutput<'de, super::Annotation>,
15526 fallback: &mut Option<AnyAttributeDeserializerState>,
15527 ) -> Result<ElementHandlerOutput<'de>, Error> {
15528 let DeserializerOutput {
15529 artifact,
15530 event,
15531 allow_any,
15532 } = output;
15533 if artifact.is_none() {
15534 fallback.get_or_insert(AnyAttributeDeserializerState::Annotation(None));
15535 *self.state__ = AnyAttributeDeserializerState::Done__;
15536 return Ok(ElementHandlerOutput::from_event(event, allow_any));
15537 }
15538 if let Some(fallback) = fallback.take() {
15539 self.finish_state(helper, fallback)?;
15540 }
15541 Ok(match artifact {
15542 DeserializerArtifact::None => unreachable!(),
15543 DeserializerArtifact::Data(data) => {
15544 self.store_annotation(data)?;
15545 *self.state__ = AnyAttributeDeserializerState::Done__;
15546 ElementHandlerOutput::from_event(event, allow_any)
15547 }
15548 DeserializerArtifact::Deserializer(deserializer) => {
15549 let ret = ElementHandlerOutput::from_event(event, allow_any);
15550 match &ret {
15551 ElementHandlerOutput::Continue { .. } => {
15552 fallback.get_or_insert(AnyAttributeDeserializerState::Annotation(
15553 Some(deserializer),
15554 ));
15555 *self.state__ = AnyAttributeDeserializerState::Done__;
15556 }
15557 ElementHandlerOutput::Break { .. } => {
15558 *self.state__ =
15559 AnyAttributeDeserializerState::Annotation(Some(deserializer));
15560 }
15561 }
15562 ret
15563 }
15564 })
15565 }
15566 }
15567 impl<'de> Deserializer<'de, super::AnyAttribute> for Box<AnyAttributeDeserializer> {
15568 fn init(
15569 helper: &mut DeserializeHelper,
15570 event: Event<'de>,
15571 ) -> DeserializerResult<'de, super::AnyAttribute> {
15572 helper.init_deserializer_from_start_event(
15573 event,
15574 AnyAttributeDeserializer::from_bytes_start,
15575 )
15576 }
15577 fn next(
15578 mut self,
15579 helper: &mut DeserializeHelper,
15580 event: Event<'de>,
15581 ) -> DeserializerResult<'de, super::AnyAttribute> {
15582 use AnyAttributeDeserializerState as S;
15583 let mut event = event;
15584 let mut fallback = None;
15585 let mut allow_any_element = false;
15586 let (event, allow_any) = loop {
15587 let state = replace(&mut *self.state__, S::Unknown__);
15588 event = match (state, event) {
15589 (S::Unknown__, _) => unreachable!(),
15590 (S::Annotation(Some(deserializer)), event) => {
15591 let output = deserializer.next(helper, event)?;
15592 match self.handle_annotation(helper, output, &mut fallback)? {
15593 ElementHandlerOutput::Continue { event, allow_any } => {
15594 allow_any_element = allow_any_element || allow_any;
15595 event
15596 }
15597 ElementHandlerOutput::Break { event, allow_any } => {
15598 break (event, allow_any)
15599 }
15600 }
15601 }
15602 (_, Event::End(_)) => {
15603 if let Some(fallback) = fallback.take() {
15604 self.finish_state(helper, fallback)?;
15605 }
15606 return Ok(DeserializerOutput {
15607 artifact: DeserializerArtifact::Data(self.finish(helper)?),
15608 event: DeserializerEvent::None,
15609 allow_any: false,
15610 });
15611 }
15612 (S::Init__, event) => {
15613 fallback.get_or_insert(S::Init__);
15614 *self.state__ = AnyAttributeDeserializerState::Annotation(None);
15615 event
15616 }
15617 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
15618 let output = helper.init_start_tag_deserializer(
15619 event,
15620 Some(&super::NS_XS),
15621 b"annotation",
15622 false,
15623 )?;
15624 match self.handle_annotation(helper, output, &mut fallback)? {
15625 ElementHandlerOutput::Continue { event, allow_any } => {
15626 allow_any_element = allow_any_element || allow_any;
15627 event
15628 }
15629 ElementHandlerOutput::Break { event, allow_any } => {
15630 break (event, allow_any)
15631 }
15632 }
15633 }
15634 (S::Done__, event) => {
15635 fallback.get_or_insert(S::Done__);
15636 break (DeserializerEvent::Continue(event), allow_any_element);
15637 }
15638 (state, event) => {
15639 *self.state__ = state;
15640 break (DeserializerEvent::Break(event), false);
15641 }
15642 }
15643 };
15644 if let Some(fallback) = fallback {
15645 *self.state__ = fallback;
15646 }
15647 Ok(DeserializerOutput {
15648 artifact: DeserializerArtifact::Deserializer(self),
15649 event,
15650 allow_any,
15651 })
15652 }
15653 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::AnyAttribute, Error> {
15654 let state = replace(&mut *self.state__, AnyAttributeDeserializerState::Unknown__);
15655 self.finish_state(helper, state)?;
15656 Ok(super::AnyAttribute {
15657 id: self.id,
15658 namespace: self.namespace,
15659 not_namespace: self.not_namespace,
15660 process_contents: self.process_contents,
15661 not_q_name: self.not_q_name,
15662 annotation: self.annotation,
15663 })
15664 }
15665 }
15666 #[derive(Debug)]
15667 pub struct AssertionTypeDeserializer {
15668 id: Option<String>,
15669 test: Option<String>,
15670 xpath_default_namespace: Option<super::XpathDefaultNamespaceType>,
15671 annotation: Option<super::Annotation>,
15672 state__: Box<AssertionTypeDeserializerState>,
15673 }
15674 #[derive(Debug)]
15675 enum AssertionTypeDeserializerState {
15676 Init__,
15677 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
15678 Done__,
15679 Unknown__,
15680 }
15681 impl AssertionTypeDeserializer {
15682 fn from_bytes_start(
15683 helper: &mut DeserializeHelper,
15684 bytes_start: &BytesStart<'_>,
15685 ) -> Result<Box<Self>, Error> {
15686 let mut id: Option<String> = None;
15687 let mut test: Option<String> = None;
15688 let mut xpath_default_namespace: Option<super::XpathDefaultNamespaceType> = None;
15689 for attrib in helper.filter_xmlns_attributes(bytes_start) {
15690 let attrib = attrib?;
15691 if matches!(
15692 helper.resolve_local_name(attrib.key, &super::NS_XS),
15693 Some(b"id")
15694 ) {
15695 helper.read_attrib(&mut id, b"id", &attrib.value)?;
15696 } else if matches!(
15697 helper.resolve_local_name(attrib.key, &super::NS_XS),
15698 Some(b"test")
15699 ) {
15700 helper.read_attrib(&mut test, b"test", &attrib.value)?;
15701 } else if matches!(
15702 helper.resolve_local_name(attrib.key, &super::NS_XS),
15703 Some(b"xpathDefaultNamespace")
15704 ) {
15705 helper.read_attrib(
15706 &mut xpath_default_namespace,
15707 b"xpathDefaultNamespace",
15708 &attrib.value,
15709 )?;
15710 }
15711 }
15712 Ok(Box::new(Self {
15713 id: id,
15714 test: test,
15715 xpath_default_namespace: xpath_default_namespace,
15716 annotation: None,
15717 state__: Box::new(AssertionTypeDeserializerState::Init__),
15718 }))
15719 }
15720 fn finish_state(
15721 &mut self,
15722 helper: &mut DeserializeHelper,
15723 state: AssertionTypeDeserializerState,
15724 ) -> Result<(), Error> {
15725 use AssertionTypeDeserializerState as S;
15726 match state {
15727 S::Annotation(Some(deserializer)) => {
15728 self.store_annotation(deserializer.finish(helper)?)?
15729 }
15730 _ => (),
15731 }
15732 Ok(())
15733 }
15734 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
15735 if self.annotation.is_some() {
15736 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
15737 b"annotation",
15738 )))?;
15739 }
15740 self.annotation = Some(value);
15741 Ok(())
15742 }
15743 fn handle_annotation<'de>(
15744 &mut self,
15745 helper: &mut DeserializeHelper,
15746 output: DeserializerOutput<'de, super::Annotation>,
15747 fallback: &mut Option<AssertionTypeDeserializerState>,
15748 ) -> Result<ElementHandlerOutput<'de>, Error> {
15749 let DeserializerOutput {
15750 artifact,
15751 event,
15752 allow_any,
15753 } = output;
15754 if artifact.is_none() {
15755 fallback.get_or_insert(AssertionTypeDeserializerState::Annotation(None));
15756 *self.state__ = AssertionTypeDeserializerState::Done__;
15757 return Ok(ElementHandlerOutput::from_event(event, allow_any));
15758 }
15759 if let Some(fallback) = fallback.take() {
15760 self.finish_state(helper, fallback)?;
15761 }
15762 Ok(match artifact {
15763 DeserializerArtifact::None => unreachable!(),
15764 DeserializerArtifact::Data(data) => {
15765 self.store_annotation(data)?;
15766 *self.state__ = AssertionTypeDeserializerState::Done__;
15767 ElementHandlerOutput::from_event(event, allow_any)
15768 }
15769 DeserializerArtifact::Deserializer(deserializer) => {
15770 let ret = ElementHandlerOutput::from_event(event, allow_any);
15771 match &ret {
15772 ElementHandlerOutput::Continue { .. } => {
15773 fallback.get_or_insert(AssertionTypeDeserializerState::Annotation(
15774 Some(deserializer),
15775 ));
15776 *self.state__ = AssertionTypeDeserializerState::Done__;
15777 }
15778 ElementHandlerOutput::Break { .. } => {
15779 *self.state__ =
15780 AssertionTypeDeserializerState::Annotation(Some(deserializer));
15781 }
15782 }
15783 ret
15784 }
15785 })
15786 }
15787 }
15788 impl<'de> Deserializer<'de, super::AssertionType> for Box<AssertionTypeDeserializer> {
15789 fn init(
15790 helper: &mut DeserializeHelper,
15791 event: Event<'de>,
15792 ) -> DeserializerResult<'de, super::AssertionType> {
15793 helper.init_deserializer_from_start_event(
15794 event,
15795 AssertionTypeDeserializer::from_bytes_start,
15796 )
15797 }
15798 fn next(
15799 mut self,
15800 helper: &mut DeserializeHelper,
15801 event: Event<'de>,
15802 ) -> DeserializerResult<'de, super::AssertionType> {
15803 use AssertionTypeDeserializerState as S;
15804 let mut event = event;
15805 let mut fallback = None;
15806 let mut allow_any_element = false;
15807 let (event, allow_any) = loop {
15808 let state = replace(&mut *self.state__, S::Unknown__);
15809 event = match (state, event) {
15810 (S::Unknown__, _) => unreachable!(),
15811 (S::Annotation(Some(deserializer)), event) => {
15812 let output = deserializer.next(helper, event)?;
15813 match self.handle_annotation(helper, output, &mut fallback)? {
15814 ElementHandlerOutput::Continue { event, allow_any } => {
15815 allow_any_element = allow_any_element || allow_any;
15816 event
15817 }
15818 ElementHandlerOutput::Break { event, allow_any } => {
15819 break (event, allow_any)
15820 }
15821 }
15822 }
15823 (_, Event::End(_)) => {
15824 if let Some(fallback) = fallback.take() {
15825 self.finish_state(helper, fallback)?;
15826 }
15827 return Ok(DeserializerOutput {
15828 artifact: DeserializerArtifact::Data(self.finish(helper)?),
15829 event: DeserializerEvent::None,
15830 allow_any: false,
15831 });
15832 }
15833 (S::Init__, event) => {
15834 fallback.get_or_insert(S::Init__);
15835 *self.state__ = AssertionTypeDeserializerState::Annotation(None);
15836 event
15837 }
15838 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
15839 let output = helper.init_start_tag_deserializer(
15840 event,
15841 Some(&super::NS_XS),
15842 b"annotation",
15843 false,
15844 )?;
15845 match self.handle_annotation(helper, output, &mut fallback)? {
15846 ElementHandlerOutput::Continue { event, allow_any } => {
15847 allow_any_element = allow_any_element || allow_any;
15848 event
15849 }
15850 ElementHandlerOutput::Break { event, allow_any } => {
15851 break (event, allow_any)
15852 }
15853 }
15854 }
15855 (S::Done__, event) => {
15856 fallback.get_or_insert(S::Done__);
15857 break (DeserializerEvent::Continue(event), allow_any_element);
15858 }
15859 (state, event) => {
15860 *self.state__ = state;
15861 break (DeserializerEvent::Break(event), false);
15862 }
15863 }
15864 };
15865 if let Some(fallback) = fallback {
15866 *self.state__ = fallback;
15867 }
15868 Ok(DeserializerOutput {
15869 artifact: DeserializerArtifact::Deserializer(self),
15870 event,
15871 allow_any,
15872 })
15873 }
15874 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::AssertionType, Error> {
15875 let state = replace(
15876 &mut *self.state__,
15877 AssertionTypeDeserializerState::Unknown__,
15878 );
15879 self.finish_state(helper, state)?;
15880 Ok(super::AssertionType {
15881 id: self.id,
15882 test: self.test,
15883 xpath_default_namespace: self.xpath_default_namespace,
15884 annotation: self.annotation,
15885 })
15886 }
15887 }
15888 #[derive(Debug)]
15889 pub struct AnyDeserializer {
15890 id: Option<String>,
15891 namespace: Option<super::NamespaceListType>,
15892 not_namespace: Option<super::NotNamespaceType>,
15893 process_contents: super::ProcessContentsType,
15894 not_q_name: Option<super::QnameListType>,
15895 min_occurs: usize,
15896 max_occurs: MaxOccurs,
15897 annotation: Option<super::Annotation>,
15898 state__: Box<AnyDeserializerState>,
15899 }
15900 #[derive(Debug)]
15901 enum AnyDeserializerState {
15902 Init__,
15903 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
15904 Done__,
15905 Unknown__,
15906 }
15907 impl AnyDeserializer {
15908 fn from_bytes_start(
15909 helper: &mut DeserializeHelper,
15910 bytes_start: &BytesStart<'_>,
15911 ) -> Result<Box<Self>, Error> {
15912 let mut id: Option<String> = None;
15913 let mut namespace: Option<super::NamespaceListType> = None;
15914 let mut not_namespace: Option<super::NotNamespaceType> = None;
15915 let mut process_contents: Option<super::ProcessContentsType> = None;
15916 let mut not_q_name: Option<super::QnameListType> = None;
15917 let mut min_occurs: Option<usize> = None;
15918 let mut max_occurs: Option<MaxOccurs> = None;
15919 for attrib in helper.filter_xmlns_attributes(bytes_start) {
15920 let attrib = attrib?;
15921 if matches!(
15922 helper.resolve_local_name(attrib.key, &super::NS_XS),
15923 Some(b"id")
15924 ) {
15925 helper.read_attrib(&mut id, b"id", &attrib.value)?;
15926 } else if matches!(
15927 helper.resolve_local_name(attrib.key, &super::NS_XS),
15928 Some(b"namespace")
15929 ) {
15930 helper.read_attrib(&mut namespace, b"namespace", &attrib.value)?;
15931 } else if matches!(
15932 helper.resolve_local_name(attrib.key, &super::NS_XS),
15933 Some(b"notNamespace")
15934 ) {
15935 helper.read_attrib(&mut not_namespace, b"notNamespace", &attrib.value)?;
15936 } else if matches!(
15937 helper.resolve_local_name(attrib.key, &super::NS_XS),
15938 Some(b"processContents")
15939 ) {
15940 helper.read_attrib(&mut process_contents, b"processContents", &attrib.value)?;
15941 } else if matches!(
15942 helper.resolve_local_name(attrib.key, &super::NS_XS),
15943 Some(b"notQName")
15944 ) {
15945 helper.read_attrib(&mut not_q_name, b"notQName", &attrib.value)?;
15946 } else if matches!(
15947 helper.resolve_local_name(attrib.key, &super::NS_XS),
15948 Some(b"minOccurs")
15949 ) {
15950 helper.read_attrib(&mut min_occurs, b"minOccurs", &attrib.value)?;
15951 } else if matches!(
15952 helper.resolve_local_name(attrib.key, &super::NS_XS),
15953 Some(b"maxOccurs")
15954 ) {
15955 helper.read_attrib(&mut max_occurs, b"maxOccurs", &attrib.value)?;
15956 }
15957 }
15958 Ok(Box::new(Self {
15959 id: id,
15960 namespace: namespace,
15961 not_namespace: not_namespace,
15962 process_contents: process_contents
15963 .unwrap_or_else(super::Any::default_process_contents),
15964 not_q_name: not_q_name,
15965 min_occurs: min_occurs.unwrap_or_else(super::Any::default_min_occurs),
15966 max_occurs: max_occurs.unwrap_or_else(super::Any::default_max_occurs),
15967 annotation: None,
15968 state__: Box::new(AnyDeserializerState::Init__),
15969 }))
15970 }
15971 fn finish_state(
15972 &mut self,
15973 helper: &mut DeserializeHelper,
15974 state: AnyDeserializerState,
15975 ) -> Result<(), Error> {
15976 use AnyDeserializerState as S;
15977 match state {
15978 S::Annotation(Some(deserializer)) => {
15979 self.store_annotation(deserializer.finish(helper)?)?
15980 }
15981 _ => (),
15982 }
15983 Ok(())
15984 }
15985 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
15986 if self.annotation.is_some() {
15987 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
15988 b"annotation",
15989 )))?;
15990 }
15991 self.annotation = Some(value);
15992 Ok(())
15993 }
15994 fn handle_annotation<'de>(
15995 &mut self,
15996 helper: &mut DeserializeHelper,
15997 output: DeserializerOutput<'de, super::Annotation>,
15998 fallback: &mut Option<AnyDeserializerState>,
15999 ) -> Result<ElementHandlerOutput<'de>, Error> {
16000 let DeserializerOutput {
16001 artifact,
16002 event,
16003 allow_any,
16004 } = output;
16005 if artifact.is_none() {
16006 fallback.get_or_insert(AnyDeserializerState::Annotation(None));
16007 *self.state__ = AnyDeserializerState::Done__;
16008 return Ok(ElementHandlerOutput::from_event(event, allow_any));
16009 }
16010 if let Some(fallback) = fallback.take() {
16011 self.finish_state(helper, fallback)?;
16012 }
16013 Ok(match artifact {
16014 DeserializerArtifact::None => unreachable!(),
16015 DeserializerArtifact::Data(data) => {
16016 self.store_annotation(data)?;
16017 *self.state__ = AnyDeserializerState::Done__;
16018 ElementHandlerOutput::from_event(event, allow_any)
16019 }
16020 DeserializerArtifact::Deserializer(deserializer) => {
16021 let ret = ElementHandlerOutput::from_event(event, allow_any);
16022 match &ret {
16023 ElementHandlerOutput::Continue { .. } => {
16024 fallback.get_or_insert(AnyDeserializerState::Annotation(Some(
16025 deserializer,
16026 )));
16027 *self.state__ = AnyDeserializerState::Done__;
16028 }
16029 ElementHandlerOutput::Break { .. } => {
16030 *self.state__ = AnyDeserializerState::Annotation(Some(deserializer));
16031 }
16032 }
16033 ret
16034 }
16035 })
16036 }
16037 }
16038 impl<'de> Deserializer<'de, super::Any> for Box<AnyDeserializer> {
16039 fn init(
16040 helper: &mut DeserializeHelper,
16041 event: Event<'de>,
16042 ) -> DeserializerResult<'de, super::Any> {
16043 helper.init_deserializer_from_start_event(event, AnyDeserializer::from_bytes_start)
16044 }
16045 fn next(
16046 mut self,
16047 helper: &mut DeserializeHelper,
16048 event: Event<'de>,
16049 ) -> DeserializerResult<'de, super::Any> {
16050 use AnyDeserializerState as S;
16051 let mut event = event;
16052 let mut fallback = None;
16053 let mut allow_any_element = false;
16054 let (event, allow_any) = loop {
16055 let state = replace(&mut *self.state__, S::Unknown__);
16056 event = match (state, event) {
16057 (S::Unknown__, _) => unreachable!(),
16058 (S::Annotation(Some(deserializer)), event) => {
16059 let output = deserializer.next(helper, event)?;
16060 match self.handle_annotation(helper, output, &mut fallback)? {
16061 ElementHandlerOutput::Continue { event, allow_any } => {
16062 allow_any_element = allow_any_element || allow_any;
16063 event
16064 }
16065 ElementHandlerOutput::Break { event, allow_any } => {
16066 break (event, allow_any)
16067 }
16068 }
16069 }
16070 (_, Event::End(_)) => {
16071 if let Some(fallback) = fallback.take() {
16072 self.finish_state(helper, fallback)?;
16073 }
16074 return Ok(DeserializerOutput {
16075 artifact: DeserializerArtifact::Data(self.finish(helper)?),
16076 event: DeserializerEvent::None,
16077 allow_any: false,
16078 });
16079 }
16080 (S::Init__, event) => {
16081 fallback.get_or_insert(S::Init__);
16082 *self.state__ = AnyDeserializerState::Annotation(None);
16083 event
16084 }
16085 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
16086 let output = helper.init_start_tag_deserializer(
16087 event,
16088 Some(&super::NS_XS),
16089 b"annotation",
16090 false,
16091 )?;
16092 match self.handle_annotation(helper, output, &mut fallback)? {
16093 ElementHandlerOutput::Continue { event, allow_any } => {
16094 allow_any_element = allow_any_element || allow_any;
16095 event
16096 }
16097 ElementHandlerOutput::Break { event, allow_any } => {
16098 break (event, allow_any)
16099 }
16100 }
16101 }
16102 (S::Done__, event) => {
16103 fallback.get_or_insert(S::Done__);
16104 break (DeserializerEvent::Continue(event), allow_any_element);
16105 }
16106 (state, event) => {
16107 *self.state__ = state;
16108 break (DeserializerEvent::Break(event), false);
16109 }
16110 }
16111 };
16112 if let Some(fallback) = fallback {
16113 *self.state__ = fallback;
16114 }
16115 Ok(DeserializerOutput {
16116 artifact: DeserializerArtifact::Deserializer(self),
16117 event,
16118 allow_any,
16119 })
16120 }
16121 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::Any, Error> {
16122 let state = replace(&mut *self.state__, AnyDeserializerState::Unknown__);
16123 self.finish_state(helper, state)?;
16124 Ok(super::Any {
16125 id: self.id,
16126 namespace: self.namespace,
16127 not_namespace: self.not_namespace,
16128 process_contents: self.process_contents,
16129 not_q_name: self.not_q_name,
16130 min_occurs: self.min_occurs,
16131 max_occurs: self.max_occurs,
16132 annotation: self.annotation,
16133 })
16134 }
16135 }
16136 #[derive(Debug)]
16137 pub struct AltTypeDeserializer {
16138 id: Option<String>,
16139 test: Option<String>,
16140 type_: Option<QName>,
16141 xpath_default_namespace: Option<super::XpathDefaultNamespaceType>,
16142 content: Vec<super::AltTypeContent>,
16143 state__: Box<AltTypeDeserializerState>,
16144 }
16145 #[derive(Debug)]
16146 enum AltTypeDeserializerState {
16147 Init__,
16148 Next__,
16149 Content__(<super::AltTypeContent as WithDeserializer>::Deserializer),
16150 Unknown__,
16151 }
16152 impl AltTypeDeserializer {
16153 fn from_bytes_start(
16154 helper: &mut DeserializeHelper,
16155 bytes_start: &BytesStart<'_>,
16156 ) -> Result<Box<Self>, Error> {
16157 let mut id: Option<String> = None;
16158 let mut test: Option<String> = None;
16159 let mut type_: Option<QName> = None;
16160 let mut xpath_default_namespace: Option<super::XpathDefaultNamespaceType> = None;
16161 for attrib in helper.filter_xmlns_attributes(bytes_start) {
16162 let attrib = attrib?;
16163 if matches!(
16164 helper.resolve_local_name(attrib.key, &super::NS_XS),
16165 Some(b"id")
16166 ) {
16167 helper.read_attrib(&mut id, b"id", &attrib.value)?;
16168 } else if matches!(
16169 helper.resolve_local_name(attrib.key, &super::NS_XS),
16170 Some(b"test")
16171 ) {
16172 helper.read_attrib(&mut test, b"test", &attrib.value)?;
16173 } else if matches!(
16174 helper.resolve_local_name(attrib.key, &super::NS_XS),
16175 Some(b"type")
16176 ) {
16177 helper.read_attrib(&mut type_, b"type", &attrib.value)?;
16178 } else if matches!(
16179 helper.resolve_local_name(attrib.key, &super::NS_XS),
16180 Some(b"xpathDefaultNamespace")
16181 ) {
16182 helper.read_attrib(
16183 &mut xpath_default_namespace,
16184 b"xpathDefaultNamespace",
16185 &attrib.value,
16186 )?;
16187 }
16188 }
16189 Ok(Box::new(Self {
16190 id: id,
16191 test: test,
16192 type_: type_,
16193 xpath_default_namespace: xpath_default_namespace,
16194 content: Vec::new(),
16195 state__: Box::new(AltTypeDeserializerState::Init__),
16196 }))
16197 }
16198 fn finish_state(
16199 &mut self,
16200 helper: &mut DeserializeHelper,
16201 state: AltTypeDeserializerState,
16202 ) -> Result<(), Error> {
16203 if let AltTypeDeserializerState::Content__(deserializer) = state {
16204 self.store_content(deserializer.finish(helper)?)?;
16205 }
16206 Ok(())
16207 }
16208 fn store_content(&mut self, value: super::AltTypeContent) -> Result<(), Error> {
16209 self.content.push(value);
16210 Ok(())
16211 }
16212 fn handle_content<'de>(
16213 &mut self,
16214 helper: &mut DeserializeHelper,
16215 output: DeserializerOutput<'de, super::AltTypeContent>,
16216 fallback: &mut Option<AltTypeDeserializerState>,
16217 ) -> Result<ElementHandlerOutput<'de>, Error> {
16218 let DeserializerOutput {
16219 artifact,
16220 event,
16221 allow_any,
16222 } = output;
16223 if artifact.is_none() {
16224 *self.state__ = fallback.take().unwrap_or(AltTypeDeserializerState::Next__);
16225 return Ok(ElementHandlerOutput::break_(event, allow_any));
16226 }
16227 if let Some(fallback) = fallback.take() {
16228 self.finish_state(helper, fallback)?;
16229 }
16230 Ok(match artifact {
16231 DeserializerArtifact::None => unreachable!(),
16232 DeserializerArtifact::Data(data) => {
16233 self.store_content(data)?;
16234 *self.state__ = AltTypeDeserializerState::Next__;
16235 ElementHandlerOutput::from_event(event, allow_any)
16236 }
16237 DeserializerArtifact::Deserializer(deserializer) => {
16238 let can_have_more = self.content.len().saturating_add(1) < 2usize;
16239 let ret = if can_have_more {
16240 ElementHandlerOutput::from_event(event, allow_any)
16241 } else {
16242 ElementHandlerOutput::from_event_end(event, allow_any)
16243 };
16244 match (can_have_more, &ret) {
16245 (true, ElementHandlerOutput::Continue { .. }) => {
16246 fallback
16247 .get_or_insert(AltTypeDeserializerState::Content__(deserializer));
16248 *self.state__ = AltTypeDeserializerState::Next__;
16249 }
16250 (false, _) | (_, ElementHandlerOutput::Break { .. }) => {
16251 *self.state__ = AltTypeDeserializerState::Content__(deserializer);
16252 }
16253 }
16254 ret
16255 }
16256 })
16257 }
16258 }
16259 impl<'de> Deserializer<'de, super::AltType> for Box<AltTypeDeserializer> {
16260 fn init(
16261 helper: &mut DeserializeHelper,
16262 event: Event<'de>,
16263 ) -> DeserializerResult<'de, super::AltType> {
16264 helper.init_deserializer_from_start_event(event, AltTypeDeserializer::from_bytes_start)
16265 }
16266 fn next(
16267 mut self,
16268 helper: &mut DeserializeHelper,
16269 event: Event<'de>,
16270 ) -> DeserializerResult<'de, super::AltType> {
16271 use AltTypeDeserializerState as S;
16272 let mut event = event;
16273 let mut fallback = None;
16274 let (event, allow_any) = loop {
16275 let state = replace(&mut *self.state__, S::Unknown__);
16276 event = match (state, event) {
16277 (S::Unknown__, _) => unreachable!(),
16278 (S::Content__(deserializer), event) => {
16279 let output = deserializer.next(helper, event)?;
16280 match self.handle_content(helper, output, &mut fallback)? {
16281 ElementHandlerOutput::Break { event, allow_any } => {
16282 break (event, allow_any)
16283 }
16284 ElementHandlerOutput::Continue { event, .. } => event,
16285 }
16286 }
16287 (_, Event::End(_)) => {
16288 return Ok(DeserializerOutput {
16289 artifact: DeserializerArtifact::Data(self.finish(helper)?),
16290 event: DeserializerEvent::None,
16291 allow_any: false,
16292 });
16293 }
16294 (state @ (S::Init__ | S::Next__), event) => {
16295 fallback.get_or_insert(state);
16296 let output =
16297 <super::AltTypeContent as WithDeserializer>::Deserializer::init(
16298 helper, event,
16299 )?;
16300 match self.handle_content(helper, output, &mut fallback)? {
16301 ElementHandlerOutput::Break { event, allow_any } => {
16302 break (event, allow_any)
16303 }
16304 ElementHandlerOutput::Continue { event, .. } => event,
16305 }
16306 }
16307 }
16308 };
16309 let artifact = DeserializerArtifact::Deserializer(self);
16310 Ok(DeserializerOutput {
16311 artifact,
16312 event,
16313 allow_any,
16314 })
16315 }
16316 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::AltType, Error> {
16317 let state = replace(&mut *self.state__, AltTypeDeserializerState::Unknown__);
16318 self.finish_state(helper, state)?;
16319 Ok(super::AltType {
16320 id: self.id,
16321 test: self.test,
16322 type_: self.type_,
16323 xpath_default_namespace: self.xpath_default_namespace,
16324 content: self.content,
16325 })
16326 }
16327 }
16328 #[derive(Debug)]
16329 pub struct AltTypeContentDeserializer {
16330 state__: Box<AltTypeContentDeserializerState>,
16331 }
16332 #[derive(Debug)]
16333 pub enum AltTypeContentDeserializerState {
16334 Init__,
16335 Annotation(
16336 Option<super::Annotation>,
16337 Option<<super::Annotation as WithDeserializer>::Deserializer>,
16338 ),
16339 SimpleType(
16340 Option<super::SimpleBaseType>,
16341 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
16342 ),
16343 ComplexType(
16344 Option<super::ComplexBaseType>,
16345 Option<<super::ComplexBaseType as WithDeserializer>::Deserializer>,
16346 ),
16347 Done__(super::AltTypeContent),
16348 Unknown__,
16349 }
16350 impl AltTypeContentDeserializer {
16351 fn find_suitable<'de>(
16352 &mut self,
16353 helper: &mut DeserializeHelper,
16354 event: Event<'de>,
16355 fallback: &mut Option<AltTypeContentDeserializerState>,
16356 ) -> Result<ElementHandlerOutput<'de>, Error> {
16357 if let Event::Start(x) | Event::Empty(x) = &event {
16358 if matches!(
16359 helper.resolve_local_name(x.name(), &super::NS_XS),
16360 Some(b"annotation")
16361 ) {
16362 let output =
16363 <super::Annotation as WithDeserializer>::Deserializer::init(helper, event)?;
16364 return self.handle_annotation(
16365 helper,
16366 Default::default(),
16367 output,
16368 &mut *fallback,
16369 );
16370 }
16371 if matches!(
16372 helper.resolve_local_name(x.name(), &super::NS_XS),
16373 Some(b"simpleType")
16374 ) {
16375 let output = <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
16376 helper, event,
16377 )?;
16378 return self.handle_simple_type(
16379 helper,
16380 Default::default(),
16381 output,
16382 &mut *fallback,
16383 );
16384 }
16385 if matches!(
16386 helper.resolve_local_name(x.name(), &super::NS_XS),
16387 Some(b"complexType")
16388 ) {
16389 let output = <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
16390 helper, event,
16391 )?;
16392 return self.handle_complex_type(
16393 helper,
16394 Default::default(),
16395 output,
16396 &mut *fallback,
16397 );
16398 }
16399 }
16400 *self.state__ = fallback
16401 .take()
16402 .unwrap_or(AltTypeContentDeserializerState::Init__);
16403 Ok(ElementHandlerOutput::return_to_parent(event, false))
16404 }
16405 fn finish_state(
16406 helper: &mut DeserializeHelper,
16407 state: AltTypeContentDeserializerState,
16408 ) -> Result<super::AltTypeContent, Error> {
16409 use AltTypeContentDeserializerState as S;
16410 match state {
16411 S::Unknown__ => unreachable!(),
16412 S::Init__ => Err(ErrorKind::MissingContent.into()),
16413 S::Annotation(mut values, deserializer) => {
16414 if let Some(deserializer) = deserializer {
16415 let value = deserializer.finish(helper)?;
16416 AltTypeContentDeserializer::store_annotation(&mut values, value)?;
16417 }
16418 Ok(super::AltTypeContent::Annotation(values.ok_or_else(
16419 || ErrorKind::MissingElement("annotation".into()),
16420 )?))
16421 }
16422 S::SimpleType(mut values, deserializer) => {
16423 if let Some(deserializer) = deserializer {
16424 let value = deserializer.finish(helper)?;
16425 AltTypeContentDeserializer::store_simple_type(&mut values, value)?;
16426 }
16427 Ok(super::AltTypeContent::SimpleType(values.ok_or_else(
16428 || ErrorKind::MissingElement("simpleType".into()),
16429 )?))
16430 }
16431 S::ComplexType(mut values, deserializer) => {
16432 if let Some(deserializer) = deserializer {
16433 let value = deserializer.finish(helper)?;
16434 AltTypeContentDeserializer::store_complex_type(&mut values, value)?;
16435 }
16436 Ok(super::AltTypeContent::ComplexType(values.ok_or_else(
16437 || ErrorKind::MissingElement("complexType".into()),
16438 )?))
16439 }
16440 S::Done__(data) => Ok(data),
16441 }
16442 }
16443 fn store_annotation(
16444 values: &mut Option<super::Annotation>,
16445 value: super::Annotation,
16446 ) -> Result<(), Error> {
16447 if values.is_some() {
16448 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
16449 b"annotation",
16450 )))?;
16451 }
16452 *values = Some(value);
16453 Ok(())
16454 }
16455 fn store_simple_type(
16456 values: &mut Option<super::SimpleBaseType>,
16457 value: super::SimpleBaseType,
16458 ) -> Result<(), Error> {
16459 if values.is_some() {
16460 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
16461 b"simpleType",
16462 )))?;
16463 }
16464 *values = Some(value);
16465 Ok(())
16466 }
16467 fn store_complex_type(
16468 values: &mut Option<super::ComplexBaseType>,
16469 value: super::ComplexBaseType,
16470 ) -> Result<(), Error> {
16471 if values.is_some() {
16472 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
16473 b"complexType",
16474 )))?;
16475 }
16476 *values = Some(value);
16477 Ok(())
16478 }
16479 fn handle_annotation<'de>(
16480 &mut self,
16481 helper: &mut DeserializeHelper,
16482 mut values: Option<super::Annotation>,
16483 output: DeserializerOutput<'de, super::Annotation>,
16484 fallback: &mut Option<AltTypeContentDeserializerState>,
16485 ) -> Result<ElementHandlerOutput<'de>, Error> {
16486 let DeserializerOutput {
16487 artifact,
16488 event,
16489 allow_any,
16490 } = output;
16491 if artifact.is_none() {
16492 *self.state__ = match fallback.take() {
16493 None if values.is_none() => {
16494 *self.state__ = AltTypeContentDeserializerState::Init__;
16495 return Ok(ElementHandlerOutput::from_event(event, allow_any));
16496 }
16497 None => AltTypeContentDeserializerState::Annotation(values, None),
16498 Some(AltTypeContentDeserializerState::Annotation(_, Some(deserializer))) => {
16499 AltTypeContentDeserializerState::Annotation(values, Some(deserializer))
16500 }
16501 _ => unreachable!(),
16502 };
16503 return Ok(ElementHandlerOutput::break_(event, allow_any));
16504 }
16505 match fallback.take() {
16506 None => (),
16507 Some(AltTypeContentDeserializerState::Annotation(_, Some(deserializer))) => {
16508 let data = deserializer.finish(helper)?;
16509 AltTypeContentDeserializer::store_annotation(&mut values, data)?;
16510 }
16511 Some(_) => unreachable!(),
16512 }
16513 Ok(match artifact {
16514 DeserializerArtifact::None => unreachable!(),
16515 DeserializerArtifact::Data(data) => {
16516 AltTypeContentDeserializer::store_annotation(&mut values, data)?;
16517 let data = AltTypeContentDeserializer::finish_state(
16518 helper,
16519 AltTypeContentDeserializerState::Annotation(values, None),
16520 )?;
16521 *self.state__ = AltTypeContentDeserializerState::Done__(data);
16522 ElementHandlerOutput::Break { event, allow_any }
16523 }
16524 DeserializerArtifact::Deserializer(deserializer) => {
16525 *self.state__ =
16526 AltTypeContentDeserializerState::Annotation(values, Some(deserializer));
16527 ElementHandlerOutput::from_event_end(event, allow_any)
16528 }
16529 })
16530 }
16531 fn handle_simple_type<'de>(
16532 &mut self,
16533 helper: &mut DeserializeHelper,
16534 mut values: Option<super::SimpleBaseType>,
16535 output: DeserializerOutput<'de, super::SimpleBaseType>,
16536 fallback: &mut Option<AltTypeContentDeserializerState>,
16537 ) -> Result<ElementHandlerOutput<'de>, Error> {
16538 let DeserializerOutput {
16539 artifact,
16540 event,
16541 allow_any,
16542 } = output;
16543 if artifact.is_none() {
16544 *self.state__ = match fallback.take() {
16545 None if values.is_none() => {
16546 *self.state__ = AltTypeContentDeserializerState::Init__;
16547 return Ok(ElementHandlerOutput::from_event(event, allow_any));
16548 }
16549 None => AltTypeContentDeserializerState::SimpleType(values, None),
16550 Some(AltTypeContentDeserializerState::SimpleType(_, Some(deserializer))) => {
16551 AltTypeContentDeserializerState::SimpleType(values, Some(deserializer))
16552 }
16553 _ => unreachable!(),
16554 };
16555 return Ok(ElementHandlerOutput::break_(event, allow_any));
16556 }
16557 match fallback.take() {
16558 None => (),
16559 Some(AltTypeContentDeserializerState::SimpleType(_, Some(deserializer))) => {
16560 let data = deserializer.finish(helper)?;
16561 AltTypeContentDeserializer::store_simple_type(&mut values, data)?;
16562 }
16563 Some(_) => unreachable!(),
16564 }
16565 Ok(match artifact {
16566 DeserializerArtifact::None => unreachable!(),
16567 DeserializerArtifact::Data(data) => {
16568 AltTypeContentDeserializer::store_simple_type(&mut values, data)?;
16569 let data = AltTypeContentDeserializer::finish_state(
16570 helper,
16571 AltTypeContentDeserializerState::SimpleType(values, None),
16572 )?;
16573 *self.state__ = AltTypeContentDeserializerState::Done__(data);
16574 ElementHandlerOutput::Break { event, allow_any }
16575 }
16576 DeserializerArtifact::Deserializer(deserializer) => {
16577 *self.state__ =
16578 AltTypeContentDeserializerState::SimpleType(values, Some(deserializer));
16579 ElementHandlerOutput::from_event_end(event, allow_any)
16580 }
16581 })
16582 }
16583 fn handle_complex_type<'de>(
16584 &mut self,
16585 helper: &mut DeserializeHelper,
16586 mut values: Option<super::ComplexBaseType>,
16587 output: DeserializerOutput<'de, super::ComplexBaseType>,
16588 fallback: &mut Option<AltTypeContentDeserializerState>,
16589 ) -> Result<ElementHandlerOutput<'de>, Error> {
16590 let DeserializerOutput {
16591 artifact,
16592 event,
16593 allow_any,
16594 } = output;
16595 if artifact.is_none() {
16596 *self.state__ = match fallback.take() {
16597 None if values.is_none() => {
16598 *self.state__ = AltTypeContentDeserializerState::Init__;
16599 return Ok(ElementHandlerOutput::from_event(event, allow_any));
16600 }
16601 None => AltTypeContentDeserializerState::ComplexType(values, None),
16602 Some(AltTypeContentDeserializerState::ComplexType(_, Some(deserializer))) => {
16603 AltTypeContentDeserializerState::ComplexType(values, Some(deserializer))
16604 }
16605 _ => unreachable!(),
16606 };
16607 return Ok(ElementHandlerOutput::break_(event, allow_any));
16608 }
16609 match fallback.take() {
16610 None => (),
16611 Some(AltTypeContentDeserializerState::ComplexType(_, Some(deserializer))) => {
16612 let data = deserializer.finish(helper)?;
16613 AltTypeContentDeserializer::store_complex_type(&mut values, data)?;
16614 }
16615 Some(_) => unreachable!(),
16616 }
16617 Ok(match artifact {
16618 DeserializerArtifact::None => unreachable!(),
16619 DeserializerArtifact::Data(data) => {
16620 AltTypeContentDeserializer::store_complex_type(&mut values, data)?;
16621 let data = AltTypeContentDeserializer::finish_state(
16622 helper,
16623 AltTypeContentDeserializerState::ComplexType(values, None),
16624 )?;
16625 *self.state__ = AltTypeContentDeserializerState::Done__(data);
16626 ElementHandlerOutput::Break { event, allow_any }
16627 }
16628 DeserializerArtifact::Deserializer(deserializer) => {
16629 *self.state__ =
16630 AltTypeContentDeserializerState::ComplexType(values, Some(deserializer));
16631 ElementHandlerOutput::from_event_end(event, allow_any)
16632 }
16633 })
16634 }
16635 }
16636 impl<'de> Deserializer<'de, super::AltTypeContent> for Box<AltTypeContentDeserializer> {
16637 fn init(
16638 helper: &mut DeserializeHelper,
16639 event: Event<'de>,
16640 ) -> DeserializerResult<'de, super::AltTypeContent> {
16641 let deserializer = Box::new(AltTypeContentDeserializer {
16642 state__: Box::new(AltTypeContentDeserializerState::Init__),
16643 });
16644 let mut output = deserializer.next(helper, event)?;
16645 output.artifact = match output.artifact {
16646 DeserializerArtifact::Deserializer(x)
16647 if matches!(&*x.state__, AltTypeContentDeserializerState::Init__) =>
16648 {
16649 DeserializerArtifact::None
16650 }
16651 artifact => artifact,
16652 };
16653 Ok(output)
16654 }
16655 fn next(
16656 mut self,
16657 helper: &mut DeserializeHelper,
16658 event: Event<'de>,
16659 ) -> DeserializerResult<'de, super::AltTypeContent> {
16660 use AltTypeContentDeserializerState as S;
16661 let mut event = event;
16662 let mut fallback = None;
16663 let (event, allow_any) = loop {
16664 let state = replace(&mut *self.state__, S::Unknown__);
16665 event = match (state, event) {
16666 (S::Unknown__, _) => unreachable!(),
16667 (S::Annotation(values, Some(deserializer)), event) => {
16668 let output = deserializer.next(helper, event)?;
16669 match self.handle_annotation(helper, values, output, &mut fallback)? {
16670 ElementHandlerOutput::Break { event, allow_any } => {
16671 break (event, allow_any)
16672 }
16673 ElementHandlerOutput::Continue { event, .. } => event,
16674 }
16675 }
16676 (S::SimpleType(values, Some(deserializer)), event) => {
16677 let output = deserializer.next(helper, event)?;
16678 match self.handle_simple_type(helper, values, output, &mut fallback)? {
16679 ElementHandlerOutput::Break { event, allow_any } => {
16680 break (event, allow_any)
16681 }
16682 ElementHandlerOutput::Continue { event, .. } => event,
16683 }
16684 }
16685 (S::ComplexType(values, Some(deserializer)), event) => {
16686 let output = deserializer.next(helper, event)?;
16687 match self.handle_complex_type(helper, values, output, &mut fallback)? {
16688 ElementHandlerOutput::Break { event, allow_any } => {
16689 break (event, allow_any)
16690 }
16691 ElementHandlerOutput::Continue { event, .. } => event,
16692 }
16693 }
16694 (state, event @ Event::End(_)) => {
16695 return Ok(DeserializerOutput {
16696 artifact: DeserializerArtifact::Data(
16697 AltTypeContentDeserializer::finish_state(helper, state)?,
16698 ),
16699 event: DeserializerEvent::Continue(event),
16700 allow_any: false,
16701 });
16702 }
16703 (S::Init__, event) => match self.find_suitable(helper, event, &mut fallback)? {
16704 ElementHandlerOutput::Break { event, allow_any } => {
16705 break (event, allow_any)
16706 }
16707 ElementHandlerOutput::Continue { event, .. } => event,
16708 },
16709 (S::Annotation(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
16710 let output = helper.init_start_tag_deserializer(
16711 event,
16712 Some(&super::NS_XS),
16713 b"annotation",
16714 false,
16715 )?;
16716 match self.handle_annotation(helper, values, output, &mut fallback)? {
16717 ElementHandlerOutput::Break { event, allow_any } => {
16718 break (event, allow_any)
16719 }
16720 ElementHandlerOutput::Continue { event, .. } => event,
16721 }
16722 }
16723 (S::SimpleType(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
16724 let output = helper.init_start_tag_deserializer(
16725 event,
16726 Some(&super::NS_XS),
16727 b"simpleType",
16728 true,
16729 )?;
16730 match self.handle_simple_type(helper, values, output, &mut fallback)? {
16731 ElementHandlerOutput::Break { event, allow_any } => {
16732 break (event, allow_any)
16733 }
16734 ElementHandlerOutput::Continue { event, .. } => event,
16735 }
16736 }
16737 (S::ComplexType(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
16738 let output = helper.init_start_tag_deserializer(
16739 event,
16740 Some(&super::NS_XS),
16741 b"complexType",
16742 true,
16743 )?;
16744 match self.handle_complex_type(helper, values, output, &mut fallback)? {
16745 ElementHandlerOutput::Break { event, allow_any } => {
16746 break (event, allow_any)
16747 }
16748 ElementHandlerOutput::Continue { event, .. } => event,
16749 }
16750 }
16751 (s @ S::Done__(_), event) => {
16752 *self.state__ = s;
16753 break (DeserializerEvent::Continue(event), false);
16754 }
16755 (state, event) => {
16756 *self.state__ = state;
16757 break (DeserializerEvent::Break(event), false);
16758 }
16759 }
16760 };
16761 let artifact = if matches!(&*self.state__, S::Done__(_)) {
16762 DeserializerArtifact::Data(self.finish(helper)?)
16763 } else {
16764 DeserializerArtifact::Deserializer(self)
16765 };
16766 Ok(DeserializerOutput {
16767 artifact,
16768 event,
16769 allow_any,
16770 })
16771 }
16772 fn finish(self, helper: &mut DeserializeHelper) -> Result<super::AltTypeContent, Error> {
16773 AltTypeContentDeserializer::finish_state(helper, *self.state__)
16774 }
16775 }
16776 #[derive(Debug)]
16777 pub struct KeybaseTypeDeserializer {
16778 id: Option<String>,
16779 name: Option<String>,
16780 ref_: Option<QName>,
16781 content: Option<super::KeybaseTypeContent>,
16782 state__: Box<KeybaseTypeDeserializerState>,
16783 }
16784 #[derive(Debug)]
16785 enum KeybaseTypeDeserializerState {
16786 Init__,
16787 Next__,
16788 Content__(<super::KeybaseTypeContent as WithDeserializer>::Deserializer),
16789 Unknown__,
16790 }
16791 impl KeybaseTypeDeserializer {
16792 fn from_bytes_start(
16793 helper: &mut DeserializeHelper,
16794 bytes_start: &BytesStart<'_>,
16795 ) -> Result<Box<Self>, Error> {
16796 let mut id: Option<String> = None;
16797 let mut name: Option<String> = None;
16798 let mut ref_: Option<QName> = None;
16799 for attrib in helper.filter_xmlns_attributes(bytes_start) {
16800 let attrib = attrib?;
16801 if matches!(
16802 helper.resolve_local_name(attrib.key, &super::NS_XS),
16803 Some(b"id")
16804 ) {
16805 helper.read_attrib(&mut id, b"id", &attrib.value)?;
16806 } else if matches!(
16807 helper.resolve_local_name(attrib.key, &super::NS_XS),
16808 Some(b"name")
16809 ) {
16810 helper.read_attrib(&mut name, b"name", &attrib.value)?;
16811 } else if matches!(
16812 helper.resolve_local_name(attrib.key, &super::NS_XS),
16813 Some(b"ref")
16814 ) {
16815 helper.read_attrib(&mut ref_, b"ref", &attrib.value)?;
16816 }
16817 }
16818 Ok(Box::new(Self {
16819 id: id,
16820 name: name,
16821 ref_: ref_,
16822 content: None,
16823 state__: Box::new(KeybaseTypeDeserializerState::Init__),
16824 }))
16825 }
16826 fn finish_state(
16827 &mut self,
16828 helper: &mut DeserializeHelper,
16829 state: KeybaseTypeDeserializerState,
16830 ) -> Result<(), Error> {
16831 if let KeybaseTypeDeserializerState::Content__(deserializer) = state {
16832 self.store_content(deserializer.finish(helper)?)?;
16833 }
16834 Ok(())
16835 }
16836 fn store_content(&mut self, value: super::KeybaseTypeContent) -> Result<(), Error> {
16837 if self.content.is_some() {
16838 Err(ErrorKind::DuplicateContent)?;
16839 }
16840 self.content = Some(value);
16841 Ok(())
16842 }
16843 fn handle_content<'de>(
16844 &mut self,
16845 helper: &mut DeserializeHelper,
16846 output: DeserializerOutput<'de, super::KeybaseTypeContent>,
16847 fallback: &mut Option<KeybaseTypeDeserializerState>,
16848 ) -> Result<ElementHandlerOutput<'de>, Error> {
16849 let DeserializerOutput {
16850 artifact,
16851 event,
16852 allow_any,
16853 } = output;
16854 if artifact.is_none() {
16855 *self.state__ = fallback
16856 .take()
16857 .unwrap_or(KeybaseTypeDeserializerState::Next__);
16858 return Ok(ElementHandlerOutput::break_(event, allow_any));
16859 }
16860 if let Some(fallback) = fallback.take() {
16861 self.finish_state(helper, fallback)?;
16862 }
16863 Ok(match artifact {
16864 DeserializerArtifact::None => unreachable!(),
16865 DeserializerArtifact::Data(data) => {
16866 self.store_content(data)?;
16867 *self.state__ = KeybaseTypeDeserializerState::Next__;
16868 ElementHandlerOutput::from_event(event, allow_any)
16869 }
16870 DeserializerArtifact::Deserializer(deserializer) => {
16871 *self.state__ = KeybaseTypeDeserializerState::Content__(deserializer);
16872 ElementHandlerOutput::from_event_end(event, allow_any)
16873 }
16874 })
16875 }
16876 }
16877 impl<'de> Deserializer<'de, super::KeybaseType> for Box<KeybaseTypeDeserializer> {
16878 fn init(
16879 helper: &mut DeserializeHelper,
16880 event: Event<'de>,
16881 ) -> DeserializerResult<'de, super::KeybaseType> {
16882 helper.init_deserializer_from_start_event(
16883 event,
16884 KeybaseTypeDeserializer::from_bytes_start,
16885 )
16886 }
16887 fn next(
16888 mut self,
16889 helper: &mut DeserializeHelper,
16890 event: Event<'de>,
16891 ) -> DeserializerResult<'de, super::KeybaseType> {
16892 use KeybaseTypeDeserializerState as S;
16893 let mut event = event;
16894 let mut fallback = None;
16895 let (event, allow_any) = loop {
16896 let state = replace(&mut *self.state__, S::Unknown__);
16897 event = match (state, event) {
16898 (S::Unknown__, _) => unreachable!(),
16899 (S::Content__(deserializer), event) => {
16900 let output = deserializer.next(helper, event)?;
16901 match self.handle_content(helper, output, &mut fallback)? {
16902 ElementHandlerOutput::Break { event, allow_any } => {
16903 break (event, allow_any)
16904 }
16905 ElementHandlerOutput::Continue { event, .. } => event,
16906 }
16907 }
16908 (_, Event::End(_)) => {
16909 return Ok(DeserializerOutput {
16910 artifact: DeserializerArtifact::Data(self.finish(helper)?),
16911 event: DeserializerEvent::None,
16912 allow_any: false,
16913 });
16914 }
16915 (state @ (S::Init__ | S::Next__), event) => {
16916 fallback.get_or_insert(state);
16917 let output =
16918 <super::KeybaseTypeContent as WithDeserializer>::Deserializer::init(
16919 helper, event,
16920 )?;
16921 match self.handle_content(helper, output, &mut fallback)? {
16922 ElementHandlerOutput::Break { event, allow_any } => {
16923 break (event, allow_any)
16924 }
16925 ElementHandlerOutput::Continue { event, .. } => event,
16926 }
16927 }
16928 }
16929 };
16930 let artifact = DeserializerArtifact::Deserializer(self);
16931 Ok(DeserializerOutput {
16932 artifact,
16933 event,
16934 allow_any,
16935 })
16936 }
16937 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::KeybaseType, Error> {
16938 let state = replace(&mut *self.state__, KeybaseTypeDeserializerState::Unknown__);
16939 self.finish_state(helper, state)?;
16940 Ok(super::KeybaseType {
16941 id: self.id,
16942 name: self.name,
16943 ref_: self.ref_,
16944 content: self.content,
16945 })
16946 }
16947 }
16948 #[derive(Debug)]
16949 pub struct KeybaseTypeContentDeserializer {
16950 annotation: Option<super::Annotation>,
16951 selector: Option<super::Field>,
16952 field: Vec<super::Field>,
16953 state__: Box<KeybaseTypeContentDeserializerState>,
16954 }
16955 #[derive(Debug)]
16956 enum KeybaseTypeContentDeserializerState {
16957 Init__,
16958 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
16959 Selector(Option<<super::Field as WithDeserializer>::Deserializer>),
16960 Field(Option<<super::Field as WithDeserializer>::Deserializer>),
16961 Done__,
16962 Unknown__,
16963 }
16964 impl KeybaseTypeContentDeserializer {
16965 fn finish_state(
16966 &mut self,
16967 helper: &mut DeserializeHelper,
16968 state: KeybaseTypeContentDeserializerState,
16969 ) -> Result<(), Error> {
16970 use KeybaseTypeContentDeserializerState as S;
16971 match state {
16972 S::Annotation(Some(deserializer)) => {
16973 self.store_annotation(deserializer.finish(helper)?)?
16974 }
16975 S::Selector(Some(deserializer)) => {
16976 self.store_selector(deserializer.finish(helper)?)?
16977 }
16978 S::Field(Some(deserializer)) => self.store_field(deserializer.finish(helper)?)?,
16979 _ => (),
16980 }
16981 Ok(())
16982 }
16983 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
16984 if self.annotation.is_some() {
16985 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
16986 b"annotation",
16987 )))?;
16988 }
16989 self.annotation = Some(value);
16990 Ok(())
16991 }
16992 fn store_selector(&mut self, value: super::Field) -> Result<(), Error> {
16993 if self.selector.is_some() {
16994 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
16995 b"selector",
16996 )))?;
16997 }
16998 self.selector = Some(value);
16999 Ok(())
17000 }
17001 fn store_field(&mut self, value: super::Field) -> Result<(), Error> {
17002 self.field.push(value);
17003 Ok(())
17004 }
17005 fn handle_annotation<'de>(
17006 &mut self,
17007 helper: &mut DeserializeHelper,
17008 output: DeserializerOutput<'de, super::Annotation>,
17009 fallback: &mut Option<KeybaseTypeContentDeserializerState>,
17010 ) -> Result<ElementHandlerOutput<'de>, Error> {
17011 let DeserializerOutput {
17012 artifact,
17013 event,
17014 allow_any,
17015 } = output;
17016 if artifact.is_none() {
17017 fallback.get_or_insert(KeybaseTypeContentDeserializerState::Annotation(None));
17018 *self.state__ = KeybaseTypeContentDeserializerState::Selector(None);
17019 return Ok(ElementHandlerOutput::from_event(event, allow_any));
17020 }
17021 if let Some(fallback) = fallback.take() {
17022 self.finish_state(helper, fallback)?;
17023 }
17024 Ok(match artifact {
17025 DeserializerArtifact::None => unreachable!(),
17026 DeserializerArtifact::Data(data) => {
17027 self.store_annotation(data)?;
17028 *self.state__ = KeybaseTypeContentDeserializerState::Selector(None);
17029 ElementHandlerOutput::from_event(event, allow_any)
17030 }
17031 DeserializerArtifact::Deserializer(deserializer) => {
17032 let ret = ElementHandlerOutput::from_event(event, allow_any);
17033 match &ret {
17034 ElementHandlerOutput::Continue { .. } => {
17035 fallback.get_or_insert(
17036 KeybaseTypeContentDeserializerState::Annotation(Some(deserializer)),
17037 );
17038 *self.state__ = KeybaseTypeContentDeserializerState::Selector(None);
17039 }
17040 ElementHandlerOutput::Break { .. } => {
17041 *self.state__ =
17042 KeybaseTypeContentDeserializerState::Annotation(Some(deserializer));
17043 }
17044 }
17045 ret
17046 }
17047 })
17048 }
17049 fn handle_selector<'de>(
17050 &mut self,
17051 helper: &mut DeserializeHelper,
17052 output: DeserializerOutput<'de, super::Field>,
17053 fallback: &mut Option<KeybaseTypeContentDeserializerState>,
17054 ) -> Result<ElementHandlerOutput<'de>, Error> {
17055 let DeserializerOutput {
17056 artifact,
17057 event,
17058 allow_any,
17059 } = output;
17060 if artifact.is_none() {
17061 if self.selector.is_some() {
17062 fallback.get_or_insert(KeybaseTypeContentDeserializerState::Selector(None));
17063 *self.state__ = KeybaseTypeContentDeserializerState::Field(None);
17064 return Ok(ElementHandlerOutput::from_event(event, allow_any));
17065 } else {
17066 *self.state__ = KeybaseTypeContentDeserializerState::Selector(None);
17067 return Ok(ElementHandlerOutput::break_(event, allow_any));
17068 }
17069 }
17070 if let Some(fallback) = fallback.take() {
17071 self.finish_state(helper, fallback)?;
17072 }
17073 Ok(match artifact {
17074 DeserializerArtifact::None => unreachable!(),
17075 DeserializerArtifact::Data(data) => {
17076 self.store_selector(data)?;
17077 *self.state__ = KeybaseTypeContentDeserializerState::Field(None);
17078 ElementHandlerOutput::from_event(event, allow_any)
17079 }
17080 DeserializerArtifact::Deserializer(deserializer) => {
17081 let ret = ElementHandlerOutput::from_event(event, allow_any);
17082 match &ret {
17083 ElementHandlerOutput::Continue { .. } => {
17084 fallback.get_or_insert(KeybaseTypeContentDeserializerState::Selector(
17085 Some(deserializer),
17086 ));
17087 *self.state__ = KeybaseTypeContentDeserializerState::Field(None);
17088 }
17089 ElementHandlerOutput::Break { .. } => {
17090 *self.state__ =
17091 KeybaseTypeContentDeserializerState::Selector(Some(deserializer));
17092 }
17093 }
17094 ret
17095 }
17096 })
17097 }
17098 fn handle_field<'de>(
17099 &mut self,
17100 helper: &mut DeserializeHelper,
17101 output: DeserializerOutput<'de, super::Field>,
17102 fallback: &mut Option<KeybaseTypeContentDeserializerState>,
17103 ) -> Result<ElementHandlerOutput<'de>, Error> {
17104 let DeserializerOutput {
17105 artifact,
17106 event,
17107 allow_any,
17108 } = output;
17109 if artifact.is_none() {
17110 if self.field.len() < 1usize {
17111 *self.state__ = KeybaseTypeContentDeserializerState::Field(None);
17112 return Ok(ElementHandlerOutput::break_(event, allow_any));
17113 } else {
17114 fallback.get_or_insert(KeybaseTypeContentDeserializerState::Field(None));
17115 *self.state__ = KeybaseTypeContentDeserializerState::Done__;
17116 return Ok(ElementHandlerOutput::from_event(event, allow_any));
17117 }
17118 }
17119 if let Some(fallback) = fallback.take() {
17120 self.finish_state(helper, fallback)?;
17121 }
17122 Ok(match artifact {
17123 DeserializerArtifact::None => unreachable!(),
17124 DeserializerArtifact::Data(data) => {
17125 self.store_field(data)?;
17126 *self.state__ = KeybaseTypeContentDeserializerState::Field(None);
17127 ElementHandlerOutput::from_event(event, allow_any)
17128 }
17129 DeserializerArtifact::Deserializer(deserializer) => {
17130 let ret = ElementHandlerOutput::from_event(event, allow_any);
17131 match &ret {
17132 ElementHandlerOutput::Continue { .. } => {
17133 fallback.get_or_insert(KeybaseTypeContentDeserializerState::Field(
17134 Some(deserializer),
17135 ));
17136 *self.state__ = KeybaseTypeContentDeserializerState::Field(None);
17137 }
17138 ElementHandlerOutput::Break { .. } => {
17139 *self.state__ =
17140 KeybaseTypeContentDeserializerState::Field(Some(deserializer));
17141 }
17142 }
17143 ret
17144 }
17145 })
17146 }
17147 }
17148 impl<'de> Deserializer<'de, super::KeybaseTypeContent> for Box<KeybaseTypeContentDeserializer> {
17149 fn init(
17150 helper: &mut DeserializeHelper,
17151 event: Event<'de>,
17152 ) -> DeserializerResult<'de, super::KeybaseTypeContent> {
17153 let deserializer = Box::new(KeybaseTypeContentDeserializer {
17154 annotation: None,
17155 selector: None,
17156 field: Vec::new(),
17157 state__: Box::new(KeybaseTypeContentDeserializerState::Init__),
17158 });
17159 let mut output = deserializer.next(helper, event)?;
17160 output.artifact = match output.artifact {
17161 DeserializerArtifact::Deserializer(x)
17162 if matches!(&*x.state__, KeybaseTypeContentDeserializerState::Init__) =>
17163 {
17164 DeserializerArtifact::None
17165 }
17166 artifact => artifact,
17167 };
17168 Ok(output)
17169 }
17170 fn next(
17171 mut self,
17172 helper: &mut DeserializeHelper,
17173 event: Event<'de>,
17174 ) -> DeserializerResult<'de, super::KeybaseTypeContent> {
17175 use KeybaseTypeContentDeserializerState as S;
17176 let mut event = event;
17177 let mut fallback = None;
17178 let mut allow_any_element = false;
17179 let (event, allow_any) = loop {
17180 let state = replace(&mut *self.state__, S::Unknown__);
17181 event = match (state, event) {
17182 (S::Unknown__, _) => unreachable!(),
17183 (S::Annotation(Some(deserializer)), event) => {
17184 let output = deserializer.next(helper, event)?;
17185 match self.handle_annotation(helper, output, &mut fallback)? {
17186 ElementHandlerOutput::Continue { event, allow_any } => {
17187 allow_any_element = allow_any_element || allow_any;
17188 event
17189 }
17190 ElementHandlerOutput::Break { event, allow_any } => {
17191 break (event, allow_any)
17192 }
17193 }
17194 }
17195 (S::Selector(Some(deserializer)), event) => {
17196 let output = deserializer.next(helper, event)?;
17197 match self.handle_selector(helper, output, &mut fallback)? {
17198 ElementHandlerOutput::Continue { event, allow_any } => {
17199 allow_any_element = allow_any_element || allow_any;
17200 event
17201 }
17202 ElementHandlerOutput::Break { event, allow_any } => {
17203 break (event, allow_any)
17204 }
17205 }
17206 }
17207 (S::Field(Some(deserializer)), event) => {
17208 let output = deserializer.next(helper, event)?;
17209 match self.handle_field(helper, output, &mut fallback)? {
17210 ElementHandlerOutput::Continue { event, allow_any } => {
17211 allow_any_element = allow_any_element || allow_any;
17212 event
17213 }
17214 ElementHandlerOutput::Break { event, allow_any } => {
17215 break (event, allow_any)
17216 }
17217 }
17218 }
17219 (_, event @ Event::End(_)) => {
17220 if let Some(fallback) = fallback.take() {
17221 self.finish_state(helper, fallback)?;
17222 }
17223 return Ok(DeserializerOutput {
17224 artifact: DeserializerArtifact::Data(self.finish(helper)?),
17225 event: DeserializerEvent::Continue(event),
17226 allow_any: false,
17227 });
17228 }
17229 (S::Init__, event) => {
17230 fallback.get_or_insert(S::Init__);
17231 *self.state__ = KeybaseTypeContentDeserializerState::Annotation(None);
17232 event
17233 }
17234 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
17235 let output = helper.init_start_tag_deserializer(
17236 event,
17237 Some(&super::NS_XS),
17238 b"annotation",
17239 false,
17240 )?;
17241 match self.handle_annotation(helper, output, &mut fallback)? {
17242 ElementHandlerOutput::Continue { event, allow_any } => {
17243 allow_any_element = allow_any_element || allow_any;
17244 event
17245 }
17246 ElementHandlerOutput::Break { event, allow_any } => {
17247 break (event, allow_any)
17248 }
17249 }
17250 }
17251 (S::Selector(None), event @ (Event::Start(_) | Event::Empty(_))) => {
17252 let output = helper.init_start_tag_deserializer(
17253 event,
17254 Some(&super::NS_XS),
17255 b"selector",
17256 false,
17257 )?;
17258 match self.handle_selector(helper, output, &mut fallback)? {
17259 ElementHandlerOutput::Continue { event, allow_any } => {
17260 allow_any_element = allow_any_element || allow_any;
17261 event
17262 }
17263 ElementHandlerOutput::Break { event, allow_any } => {
17264 break (event, allow_any)
17265 }
17266 }
17267 }
17268 (S::Field(None), event @ (Event::Start(_) | Event::Empty(_))) => {
17269 let output = helper.init_start_tag_deserializer(
17270 event,
17271 Some(&super::NS_XS),
17272 b"field",
17273 false,
17274 )?;
17275 match self.handle_field(helper, output, &mut fallback)? {
17276 ElementHandlerOutput::Continue { event, allow_any } => {
17277 allow_any_element = allow_any_element || allow_any;
17278 event
17279 }
17280 ElementHandlerOutput::Break { event, allow_any } => {
17281 break (event, allow_any)
17282 }
17283 }
17284 }
17285 (S::Done__, event) => {
17286 fallback.get_or_insert(S::Done__);
17287 break (DeserializerEvent::Continue(event), allow_any_element);
17288 }
17289 (state, event) => {
17290 *self.state__ = state;
17291 break (DeserializerEvent::Break(event), false);
17292 }
17293 }
17294 };
17295 if let Some(fallback) = fallback {
17296 *self.state__ = fallback;
17297 }
17298 Ok(DeserializerOutput {
17299 artifact: DeserializerArtifact::Deserializer(self),
17300 event,
17301 allow_any,
17302 })
17303 }
17304 fn finish(
17305 mut self,
17306 helper: &mut DeserializeHelper,
17307 ) -> Result<super::KeybaseTypeContent, Error> {
17308 let state = replace(
17309 &mut *self.state__,
17310 KeybaseTypeContentDeserializerState::Unknown__,
17311 );
17312 self.finish_state(helper, state)?;
17313 Ok(super::KeybaseTypeContent {
17314 annotation: self.annotation,
17315 selector: self
17316 .selector
17317 .ok_or_else(|| ErrorKind::MissingElement("selector".into()))?,
17318 field: self.field,
17319 })
17320 }
17321 }
17322 #[derive(Debug)]
17323 pub struct KeyrefDeserializer {
17324 id: Option<String>,
17325 name: Option<String>,
17326 ref_: Option<QName>,
17327 refer: Option<QName>,
17328 content: Option<super::KeyrefContent>,
17329 state__: Box<KeyrefDeserializerState>,
17330 }
17331 #[derive(Debug)]
17332 enum KeyrefDeserializerState {
17333 Init__,
17334 Next__,
17335 Content__(<super::KeyrefContent as WithDeserializer>::Deserializer),
17336 Unknown__,
17337 }
17338 impl KeyrefDeserializer {
17339 fn from_bytes_start(
17340 helper: &mut DeserializeHelper,
17341 bytes_start: &BytesStart<'_>,
17342 ) -> Result<Box<Self>, Error> {
17343 let mut id: Option<String> = None;
17344 let mut name: Option<String> = None;
17345 let mut ref_: Option<QName> = None;
17346 let mut refer: Option<QName> = None;
17347 for attrib in helper.filter_xmlns_attributes(bytes_start) {
17348 let attrib = attrib?;
17349 if matches!(
17350 helper.resolve_local_name(attrib.key, &super::NS_XS),
17351 Some(b"id")
17352 ) {
17353 helper.read_attrib(&mut id, b"id", &attrib.value)?;
17354 } else if matches!(
17355 helper.resolve_local_name(attrib.key, &super::NS_XS),
17356 Some(b"name")
17357 ) {
17358 helper.read_attrib(&mut name, b"name", &attrib.value)?;
17359 } else if matches!(
17360 helper.resolve_local_name(attrib.key, &super::NS_XS),
17361 Some(b"ref")
17362 ) {
17363 helper.read_attrib(&mut ref_, b"ref", &attrib.value)?;
17364 } else if matches!(
17365 helper.resolve_local_name(attrib.key, &super::NS_XS),
17366 Some(b"refer")
17367 ) {
17368 helper.read_attrib(&mut refer, b"refer", &attrib.value)?;
17369 }
17370 }
17371 Ok(Box::new(Self {
17372 id: id,
17373 name: name,
17374 ref_: ref_,
17375 refer: refer,
17376 content: None,
17377 state__: Box::new(KeyrefDeserializerState::Init__),
17378 }))
17379 }
17380 fn finish_state(
17381 &mut self,
17382 helper: &mut DeserializeHelper,
17383 state: KeyrefDeserializerState,
17384 ) -> Result<(), Error> {
17385 if let KeyrefDeserializerState::Content__(deserializer) = state {
17386 self.store_content(deserializer.finish(helper)?)?;
17387 }
17388 Ok(())
17389 }
17390 fn store_content(&mut self, value: super::KeyrefContent) -> Result<(), Error> {
17391 if self.content.is_some() {
17392 Err(ErrorKind::DuplicateContent)?;
17393 }
17394 self.content = Some(value);
17395 Ok(())
17396 }
17397 fn handle_content<'de>(
17398 &mut self,
17399 helper: &mut DeserializeHelper,
17400 output: DeserializerOutput<'de, super::KeyrefContent>,
17401 fallback: &mut Option<KeyrefDeserializerState>,
17402 ) -> Result<ElementHandlerOutput<'de>, Error> {
17403 let DeserializerOutput {
17404 artifact,
17405 event,
17406 allow_any,
17407 } = output;
17408 if artifact.is_none() {
17409 *self.state__ = fallback.take().unwrap_or(KeyrefDeserializerState::Next__);
17410 return Ok(ElementHandlerOutput::break_(event, allow_any));
17411 }
17412 if let Some(fallback) = fallback.take() {
17413 self.finish_state(helper, fallback)?;
17414 }
17415 Ok(match artifact {
17416 DeserializerArtifact::None => unreachable!(),
17417 DeserializerArtifact::Data(data) => {
17418 self.store_content(data)?;
17419 *self.state__ = KeyrefDeserializerState::Next__;
17420 ElementHandlerOutput::from_event(event, allow_any)
17421 }
17422 DeserializerArtifact::Deserializer(deserializer) => {
17423 *self.state__ = KeyrefDeserializerState::Content__(deserializer);
17424 ElementHandlerOutput::from_event_end(event, allow_any)
17425 }
17426 })
17427 }
17428 }
17429 impl<'de> Deserializer<'de, super::Keyref> for Box<KeyrefDeserializer> {
17430 fn init(
17431 helper: &mut DeserializeHelper,
17432 event: Event<'de>,
17433 ) -> DeserializerResult<'de, super::Keyref> {
17434 helper.init_deserializer_from_start_event(event, KeyrefDeserializer::from_bytes_start)
17435 }
17436 fn next(
17437 mut self,
17438 helper: &mut DeserializeHelper,
17439 event: Event<'de>,
17440 ) -> DeserializerResult<'de, super::Keyref> {
17441 use KeyrefDeserializerState as S;
17442 let mut event = event;
17443 let mut fallback = None;
17444 let (event, allow_any) = loop {
17445 let state = replace(&mut *self.state__, S::Unknown__);
17446 event = match (state, event) {
17447 (S::Unknown__, _) => unreachable!(),
17448 (S::Content__(deserializer), event) => {
17449 let output = deserializer.next(helper, event)?;
17450 match self.handle_content(helper, output, &mut fallback)? {
17451 ElementHandlerOutput::Break { event, allow_any } => {
17452 break (event, allow_any)
17453 }
17454 ElementHandlerOutput::Continue { event, .. } => event,
17455 }
17456 }
17457 (_, Event::End(_)) => {
17458 return Ok(DeserializerOutput {
17459 artifact: DeserializerArtifact::Data(self.finish(helper)?),
17460 event: DeserializerEvent::None,
17461 allow_any: false,
17462 });
17463 }
17464 (state @ (S::Init__ | S::Next__), event) => {
17465 fallback.get_or_insert(state);
17466 let output =
17467 <super::KeyrefContent as WithDeserializer>::Deserializer::init(
17468 helper, event,
17469 )?;
17470 match self.handle_content(helper, output, &mut fallback)? {
17471 ElementHandlerOutput::Break { event, allow_any } => {
17472 break (event, allow_any)
17473 }
17474 ElementHandlerOutput::Continue { event, .. } => event,
17475 }
17476 }
17477 }
17478 };
17479 let artifact = DeserializerArtifact::Deserializer(self);
17480 Ok(DeserializerOutput {
17481 artifact,
17482 event,
17483 allow_any,
17484 })
17485 }
17486 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::Keyref, Error> {
17487 let state = replace(&mut *self.state__, KeyrefDeserializerState::Unknown__);
17488 self.finish_state(helper, state)?;
17489 Ok(super::Keyref {
17490 id: self.id,
17491 name: self.name,
17492 ref_: self.ref_,
17493 refer: self.refer,
17494 content: self.content,
17495 })
17496 }
17497 }
17498 #[derive(Debug)]
17499 pub struct KeyrefContentDeserializer {
17500 annotation: Option<super::Annotation>,
17501 selector: Option<super::Field>,
17502 field: Vec<super::Field>,
17503 state__: Box<KeyrefContentDeserializerState>,
17504 }
17505 #[derive(Debug)]
17506 enum KeyrefContentDeserializerState {
17507 Init__,
17508 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
17509 Selector(Option<<super::Field as WithDeserializer>::Deserializer>),
17510 Field(Option<<super::Field as WithDeserializer>::Deserializer>),
17511 Done__,
17512 Unknown__,
17513 }
17514 impl KeyrefContentDeserializer {
17515 fn finish_state(
17516 &mut self,
17517 helper: &mut DeserializeHelper,
17518 state: KeyrefContentDeserializerState,
17519 ) -> Result<(), Error> {
17520 use KeyrefContentDeserializerState as S;
17521 match state {
17522 S::Annotation(Some(deserializer)) => {
17523 self.store_annotation(deserializer.finish(helper)?)?
17524 }
17525 S::Selector(Some(deserializer)) => {
17526 self.store_selector(deserializer.finish(helper)?)?
17527 }
17528 S::Field(Some(deserializer)) => self.store_field(deserializer.finish(helper)?)?,
17529 _ => (),
17530 }
17531 Ok(())
17532 }
17533 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
17534 if self.annotation.is_some() {
17535 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17536 b"annotation",
17537 )))?;
17538 }
17539 self.annotation = Some(value);
17540 Ok(())
17541 }
17542 fn store_selector(&mut self, value: super::Field) -> Result<(), Error> {
17543 if self.selector.is_some() {
17544 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17545 b"selector",
17546 )))?;
17547 }
17548 self.selector = Some(value);
17549 Ok(())
17550 }
17551 fn store_field(&mut self, value: super::Field) -> Result<(), Error> {
17552 self.field.push(value);
17553 Ok(())
17554 }
17555 fn handle_annotation<'de>(
17556 &mut self,
17557 helper: &mut DeserializeHelper,
17558 output: DeserializerOutput<'de, super::Annotation>,
17559 fallback: &mut Option<KeyrefContentDeserializerState>,
17560 ) -> Result<ElementHandlerOutput<'de>, Error> {
17561 let DeserializerOutput {
17562 artifact,
17563 event,
17564 allow_any,
17565 } = output;
17566 if artifact.is_none() {
17567 fallback.get_or_insert(KeyrefContentDeserializerState::Annotation(None));
17568 *self.state__ = KeyrefContentDeserializerState::Selector(None);
17569 return Ok(ElementHandlerOutput::from_event(event, allow_any));
17570 }
17571 if let Some(fallback) = fallback.take() {
17572 self.finish_state(helper, fallback)?;
17573 }
17574 Ok(match artifact {
17575 DeserializerArtifact::None => unreachable!(),
17576 DeserializerArtifact::Data(data) => {
17577 self.store_annotation(data)?;
17578 *self.state__ = KeyrefContentDeserializerState::Selector(None);
17579 ElementHandlerOutput::from_event(event, allow_any)
17580 }
17581 DeserializerArtifact::Deserializer(deserializer) => {
17582 let ret = ElementHandlerOutput::from_event(event, allow_any);
17583 match &ret {
17584 ElementHandlerOutput::Continue { .. } => {
17585 fallback.get_or_insert(KeyrefContentDeserializerState::Annotation(
17586 Some(deserializer),
17587 ));
17588 *self.state__ = KeyrefContentDeserializerState::Selector(None);
17589 }
17590 ElementHandlerOutput::Break { .. } => {
17591 *self.state__ =
17592 KeyrefContentDeserializerState::Annotation(Some(deserializer));
17593 }
17594 }
17595 ret
17596 }
17597 })
17598 }
17599 fn handle_selector<'de>(
17600 &mut self,
17601 helper: &mut DeserializeHelper,
17602 output: DeserializerOutput<'de, super::Field>,
17603 fallback: &mut Option<KeyrefContentDeserializerState>,
17604 ) -> Result<ElementHandlerOutput<'de>, Error> {
17605 let DeserializerOutput {
17606 artifact,
17607 event,
17608 allow_any,
17609 } = output;
17610 if artifact.is_none() {
17611 if self.selector.is_some() {
17612 fallback.get_or_insert(KeyrefContentDeserializerState::Selector(None));
17613 *self.state__ = KeyrefContentDeserializerState::Field(None);
17614 return Ok(ElementHandlerOutput::from_event(event, allow_any));
17615 } else {
17616 *self.state__ = KeyrefContentDeserializerState::Selector(None);
17617 return Ok(ElementHandlerOutput::break_(event, allow_any));
17618 }
17619 }
17620 if let Some(fallback) = fallback.take() {
17621 self.finish_state(helper, fallback)?;
17622 }
17623 Ok(match artifact {
17624 DeserializerArtifact::None => unreachable!(),
17625 DeserializerArtifact::Data(data) => {
17626 self.store_selector(data)?;
17627 *self.state__ = KeyrefContentDeserializerState::Field(None);
17628 ElementHandlerOutput::from_event(event, allow_any)
17629 }
17630 DeserializerArtifact::Deserializer(deserializer) => {
17631 let ret = ElementHandlerOutput::from_event(event, allow_any);
17632 match &ret {
17633 ElementHandlerOutput::Continue { .. } => {
17634 fallback.get_or_insert(KeyrefContentDeserializerState::Selector(Some(
17635 deserializer,
17636 )));
17637 *self.state__ = KeyrefContentDeserializerState::Field(None);
17638 }
17639 ElementHandlerOutput::Break { .. } => {
17640 *self.state__ =
17641 KeyrefContentDeserializerState::Selector(Some(deserializer));
17642 }
17643 }
17644 ret
17645 }
17646 })
17647 }
17648 fn handle_field<'de>(
17649 &mut self,
17650 helper: &mut DeserializeHelper,
17651 output: DeserializerOutput<'de, super::Field>,
17652 fallback: &mut Option<KeyrefContentDeserializerState>,
17653 ) -> Result<ElementHandlerOutput<'de>, Error> {
17654 let DeserializerOutput {
17655 artifact,
17656 event,
17657 allow_any,
17658 } = output;
17659 if artifact.is_none() {
17660 if self.field.len() < 1usize {
17661 *self.state__ = KeyrefContentDeserializerState::Field(None);
17662 return Ok(ElementHandlerOutput::break_(event, allow_any));
17663 } else {
17664 fallback.get_or_insert(KeyrefContentDeserializerState::Field(None));
17665 *self.state__ = KeyrefContentDeserializerState::Done__;
17666 return Ok(ElementHandlerOutput::from_event(event, allow_any));
17667 }
17668 }
17669 if let Some(fallback) = fallback.take() {
17670 self.finish_state(helper, fallback)?;
17671 }
17672 Ok(match artifact {
17673 DeserializerArtifact::None => unreachable!(),
17674 DeserializerArtifact::Data(data) => {
17675 self.store_field(data)?;
17676 *self.state__ = KeyrefContentDeserializerState::Field(None);
17677 ElementHandlerOutput::from_event(event, allow_any)
17678 }
17679 DeserializerArtifact::Deserializer(deserializer) => {
17680 let ret = ElementHandlerOutput::from_event(event, allow_any);
17681 match &ret {
17682 ElementHandlerOutput::Continue { .. } => {
17683 fallback.get_or_insert(KeyrefContentDeserializerState::Field(Some(
17684 deserializer,
17685 )));
17686 *self.state__ = KeyrefContentDeserializerState::Field(None);
17687 }
17688 ElementHandlerOutput::Break { .. } => {
17689 *self.state__ =
17690 KeyrefContentDeserializerState::Field(Some(deserializer));
17691 }
17692 }
17693 ret
17694 }
17695 })
17696 }
17697 }
17698 impl<'de> Deserializer<'de, super::KeyrefContent> for Box<KeyrefContentDeserializer> {
17699 fn init(
17700 helper: &mut DeserializeHelper,
17701 event: Event<'de>,
17702 ) -> DeserializerResult<'de, super::KeyrefContent> {
17703 let deserializer = Box::new(KeyrefContentDeserializer {
17704 annotation: None,
17705 selector: None,
17706 field: Vec::new(),
17707 state__: Box::new(KeyrefContentDeserializerState::Init__),
17708 });
17709 let mut output = deserializer.next(helper, event)?;
17710 output.artifact = match output.artifact {
17711 DeserializerArtifact::Deserializer(x)
17712 if matches!(&*x.state__, KeyrefContentDeserializerState::Init__) =>
17713 {
17714 DeserializerArtifact::None
17715 }
17716 artifact => artifact,
17717 };
17718 Ok(output)
17719 }
17720 fn next(
17721 mut self,
17722 helper: &mut DeserializeHelper,
17723 event: Event<'de>,
17724 ) -> DeserializerResult<'de, super::KeyrefContent> {
17725 use KeyrefContentDeserializerState as S;
17726 let mut event = event;
17727 let mut fallback = None;
17728 let mut allow_any_element = false;
17729 let (event, allow_any) = loop {
17730 let state = replace(&mut *self.state__, S::Unknown__);
17731 event = match (state, event) {
17732 (S::Unknown__, _) => unreachable!(),
17733 (S::Annotation(Some(deserializer)), event) => {
17734 let output = deserializer.next(helper, event)?;
17735 match self.handle_annotation(helper, output, &mut fallback)? {
17736 ElementHandlerOutput::Continue { event, allow_any } => {
17737 allow_any_element = allow_any_element || allow_any;
17738 event
17739 }
17740 ElementHandlerOutput::Break { event, allow_any } => {
17741 break (event, allow_any)
17742 }
17743 }
17744 }
17745 (S::Selector(Some(deserializer)), event) => {
17746 let output = deserializer.next(helper, event)?;
17747 match self.handle_selector(helper, output, &mut fallback)? {
17748 ElementHandlerOutput::Continue { event, allow_any } => {
17749 allow_any_element = allow_any_element || allow_any;
17750 event
17751 }
17752 ElementHandlerOutput::Break { event, allow_any } => {
17753 break (event, allow_any)
17754 }
17755 }
17756 }
17757 (S::Field(Some(deserializer)), event) => {
17758 let output = deserializer.next(helper, event)?;
17759 match self.handle_field(helper, output, &mut fallback)? {
17760 ElementHandlerOutput::Continue { event, allow_any } => {
17761 allow_any_element = allow_any_element || allow_any;
17762 event
17763 }
17764 ElementHandlerOutput::Break { event, allow_any } => {
17765 break (event, allow_any)
17766 }
17767 }
17768 }
17769 (_, event @ Event::End(_)) => {
17770 if let Some(fallback) = fallback.take() {
17771 self.finish_state(helper, fallback)?;
17772 }
17773 return Ok(DeserializerOutput {
17774 artifact: DeserializerArtifact::Data(self.finish(helper)?),
17775 event: DeserializerEvent::Continue(event),
17776 allow_any: false,
17777 });
17778 }
17779 (S::Init__, event) => {
17780 fallback.get_or_insert(S::Init__);
17781 *self.state__ = KeyrefContentDeserializerState::Annotation(None);
17782 event
17783 }
17784 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
17785 let output = helper.init_start_tag_deserializer(
17786 event,
17787 Some(&super::NS_XS),
17788 b"annotation",
17789 false,
17790 )?;
17791 match self.handle_annotation(helper, output, &mut fallback)? {
17792 ElementHandlerOutput::Continue { event, allow_any } => {
17793 allow_any_element = allow_any_element || allow_any;
17794 event
17795 }
17796 ElementHandlerOutput::Break { event, allow_any } => {
17797 break (event, allow_any)
17798 }
17799 }
17800 }
17801 (S::Selector(None), event @ (Event::Start(_) | Event::Empty(_))) => {
17802 let output = helper.init_start_tag_deserializer(
17803 event,
17804 Some(&super::NS_XS),
17805 b"selector",
17806 false,
17807 )?;
17808 match self.handle_selector(helper, output, &mut fallback)? {
17809 ElementHandlerOutput::Continue { event, allow_any } => {
17810 allow_any_element = allow_any_element || allow_any;
17811 event
17812 }
17813 ElementHandlerOutput::Break { event, allow_any } => {
17814 break (event, allow_any)
17815 }
17816 }
17817 }
17818 (S::Field(None), event @ (Event::Start(_) | Event::Empty(_))) => {
17819 let output = helper.init_start_tag_deserializer(
17820 event,
17821 Some(&super::NS_XS),
17822 b"field",
17823 false,
17824 )?;
17825 match self.handle_field(helper, output, &mut fallback)? {
17826 ElementHandlerOutput::Continue { event, allow_any } => {
17827 allow_any_element = allow_any_element || allow_any;
17828 event
17829 }
17830 ElementHandlerOutput::Break { event, allow_any } => {
17831 break (event, allow_any)
17832 }
17833 }
17834 }
17835 (S::Done__, event) => {
17836 fallback.get_or_insert(S::Done__);
17837 break (DeserializerEvent::Continue(event), allow_any_element);
17838 }
17839 (state, event) => {
17840 *self.state__ = state;
17841 break (DeserializerEvent::Break(event), false);
17842 }
17843 }
17844 };
17845 if let Some(fallback) = fallback {
17846 *self.state__ = fallback;
17847 }
17848 Ok(DeserializerOutput {
17849 artifact: DeserializerArtifact::Deserializer(self),
17850 event,
17851 allow_any,
17852 })
17853 }
17854 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::KeyrefContent, Error> {
17855 let state = replace(
17856 &mut *self.state__,
17857 KeyrefContentDeserializerState::Unknown__,
17858 );
17859 self.finish_state(helper, state)?;
17860 Ok(super::KeyrefContent {
17861 annotation: self.annotation,
17862 selector: self
17863 .selector
17864 .ok_or_else(|| ErrorKind::MissingElement("selector".into()))?,
17865 field: self.field,
17866 })
17867 }
17868 }
17869 #[derive(Debug)]
17870 pub struct FacetDeserializer {
17871 state__: Box<FacetDeserializerState>,
17872 }
17873 #[derive(Debug)]
17874 pub enum FacetDeserializerState {
17875 Init__,
17876 MinExclusive(
17877 Option<super::FacetType>,
17878 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17879 ),
17880 MinInclusive(
17881 Option<super::FacetType>,
17882 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17883 ),
17884 MaxExclusive(
17885 Option<super::FacetType>,
17886 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17887 ),
17888 MaxInclusive(
17889 Option<super::FacetType>,
17890 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17891 ),
17892 TotalDigits(
17893 Option<super::FacetType>,
17894 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17895 ),
17896 FractionDigits(
17897 Option<super::FacetType>,
17898 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17899 ),
17900 Length(
17901 Option<super::FacetType>,
17902 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17903 ),
17904 MinLength(
17905 Option<super::FacetType>,
17906 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17907 ),
17908 MaxLength(
17909 Option<super::FacetType>,
17910 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17911 ),
17912 Enumeration(
17913 Option<super::FacetType>,
17914 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17915 ),
17916 WhiteSpace(
17917 Option<super::FacetType>,
17918 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17919 ),
17920 Pattern(
17921 Option<super::FacetType>,
17922 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17923 ),
17924 Assertion(
17925 Option<super::AssertionType>,
17926 Option<<super::AssertionType as WithDeserializer>::Deserializer>,
17927 ),
17928 ExplicitTimezone(
17929 Option<super::FacetType>,
17930 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17931 ),
17932 Done__(super::Facet),
17933 Unknown__,
17934 }
17935 impl FacetDeserializer {
17936 fn find_suitable<'de>(
17937 &mut self,
17938 helper: &mut DeserializeHelper,
17939 event: Event<'de>,
17940 fallback: &mut Option<FacetDeserializerState>,
17941 ) -> Result<ElementHandlerOutput<'de>, Error> {
17942 if let Event::Start(x) | Event::Empty(x) = &event {
17943 if matches!(
17944 helper.resolve_local_name(x.name(), &super::NS_XS),
17945 Some(b"minExclusive")
17946 ) {
17947 let output =
17948 <super::FacetType as WithDeserializer>::Deserializer::init(helper, event)?;
17949 return self.handle_min_exclusive(
17950 helper,
17951 Default::default(),
17952 output,
17953 &mut *fallback,
17954 );
17955 }
17956 if matches!(
17957 helper.resolve_local_name(x.name(), &super::NS_XS),
17958 Some(b"minInclusive")
17959 ) {
17960 let output =
17961 <super::FacetType as WithDeserializer>::Deserializer::init(helper, event)?;
17962 return self.handle_min_inclusive(
17963 helper,
17964 Default::default(),
17965 output,
17966 &mut *fallback,
17967 );
17968 }
17969 if matches!(
17970 helper.resolve_local_name(x.name(), &super::NS_XS),
17971 Some(b"maxExclusive")
17972 ) {
17973 let output =
17974 <super::FacetType as WithDeserializer>::Deserializer::init(helper, event)?;
17975 return self.handle_max_exclusive(
17976 helper,
17977 Default::default(),
17978 output,
17979 &mut *fallback,
17980 );
17981 }
17982 if matches!(
17983 helper.resolve_local_name(x.name(), &super::NS_XS),
17984 Some(b"maxInclusive")
17985 ) {
17986 let output =
17987 <super::FacetType as WithDeserializer>::Deserializer::init(helper, event)?;
17988 return self.handle_max_inclusive(
17989 helper,
17990 Default::default(),
17991 output,
17992 &mut *fallback,
17993 );
17994 }
17995 if matches!(
17996 helper.resolve_local_name(x.name(), &super::NS_XS),
17997 Some(b"totalDigits")
17998 ) {
17999 let output =
18000 <super::FacetType as WithDeserializer>::Deserializer::init(helper, event)?;
18001 return self.handle_total_digits(
18002 helper,
18003 Default::default(),
18004 output,
18005 &mut *fallback,
18006 );
18007 }
18008 if matches!(
18009 helper.resolve_local_name(x.name(), &super::NS_XS),
18010 Some(b"fractionDigits")
18011 ) {
18012 let output =
18013 <super::FacetType as WithDeserializer>::Deserializer::init(helper, event)?;
18014 return self.handle_fraction_digits(
18015 helper,
18016 Default::default(),
18017 output,
18018 &mut *fallback,
18019 );
18020 }
18021 if matches!(
18022 helper.resolve_local_name(x.name(), &super::NS_XS),
18023 Some(b"length")
18024 ) {
18025 let output =
18026 <super::FacetType as WithDeserializer>::Deserializer::init(helper, event)?;
18027 return self.handle_length(helper, Default::default(), output, &mut *fallback);
18028 }
18029 if matches!(
18030 helper.resolve_local_name(x.name(), &super::NS_XS),
18031 Some(b"minLength")
18032 ) {
18033 let output =
18034 <super::FacetType as WithDeserializer>::Deserializer::init(helper, event)?;
18035 return self.handle_min_length(
18036 helper,
18037 Default::default(),
18038 output,
18039 &mut *fallback,
18040 );
18041 }
18042 if matches!(
18043 helper.resolve_local_name(x.name(), &super::NS_XS),
18044 Some(b"maxLength")
18045 ) {
18046 let output =
18047 <super::FacetType as WithDeserializer>::Deserializer::init(helper, event)?;
18048 return self.handle_max_length(
18049 helper,
18050 Default::default(),
18051 output,
18052 &mut *fallback,
18053 );
18054 }
18055 if matches!(
18056 helper.resolve_local_name(x.name(), &super::NS_XS),
18057 Some(b"enumeration")
18058 ) {
18059 let output =
18060 <super::FacetType as WithDeserializer>::Deserializer::init(helper, event)?;
18061 return self.handle_enumeration(
18062 helper,
18063 Default::default(),
18064 output,
18065 &mut *fallback,
18066 );
18067 }
18068 if matches!(
18069 helper.resolve_local_name(x.name(), &super::NS_XS),
18070 Some(b"whiteSpace")
18071 ) {
18072 let output =
18073 <super::FacetType as WithDeserializer>::Deserializer::init(helper, event)?;
18074 return self.handle_white_space(
18075 helper,
18076 Default::default(),
18077 output,
18078 &mut *fallback,
18079 );
18080 }
18081 if matches!(
18082 helper.resolve_local_name(x.name(), &super::NS_XS),
18083 Some(b"pattern")
18084 ) {
18085 let output =
18086 <super::FacetType as WithDeserializer>::Deserializer::init(helper, event)?;
18087 return self.handle_pattern(helper, Default::default(), output, &mut *fallback);
18088 }
18089 if matches!(
18090 helper.resolve_local_name(x.name(), &super::NS_XS),
18091 Some(b"assertion")
18092 ) {
18093 let output = <super::AssertionType as WithDeserializer>::Deserializer::init(
18094 helper, event,
18095 )?;
18096 return self.handle_assertion(
18097 helper,
18098 Default::default(),
18099 output,
18100 &mut *fallback,
18101 );
18102 }
18103 if matches!(
18104 helper.resolve_local_name(x.name(), &super::NS_XS),
18105 Some(b"explicitTimezone")
18106 ) {
18107 let output =
18108 <super::FacetType as WithDeserializer>::Deserializer::init(helper, event)?;
18109 return self.handle_explicit_timezone(
18110 helper,
18111 Default::default(),
18112 output,
18113 &mut *fallback,
18114 );
18115 }
18116 }
18117 *self.state__ = fallback.take().unwrap_or(FacetDeserializerState::Init__);
18118 Ok(ElementHandlerOutput::return_to_parent(event, false))
18119 }
18120 fn finish_state(
18121 helper: &mut DeserializeHelper,
18122 state: FacetDeserializerState,
18123 ) -> Result<super::Facet, Error> {
18124 use FacetDeserializerState as S;
18125 match state {
18126 S::Unknown__ => unreachable!(),
18127 S::Init__ => Err(ErrorKind::MissingContent.into()),
18128 S::MinExclusive(mut values, deserializer) => {
18129 if let Some(deserializer) = deserializer {
18130 let value = deserializer.finish(helper)?;
18131 FacetDeserializer::store_min_exclusive(&mut values, value)?;
18132 }
18133 Ok(super::Facet::MinExclusive(values.ok_or_else(|| {
18134 ErrorKind::MissingElement("minExclusive".into())
18135 })?))
18136 }
18137 S::MinInclusive(mut values, deserializer) => {
18138 if let Some(deserializer) = deserializer {
18139 let value = deserializer.finish(helper)?;
18140 FacetDeserializer::store_min_inclusive(&mut values, value)?;
18141 }
18142 Ok(super::Facet::MinInclusive(values.ok_or_else(|| {
18143 ErrorKind::MissingElement("minInclusive".into())
18144 })?))
18145 }
18146 S::MaxExclusive(mut values, deserializer) => {
18147 if let Some(deserializer) = deserializer {
18148 let value = deserializer.finish(helper)?;
18149 FacetDeserializer::store_max_exclusive(&mut values, value)?;
18150 }
18151 Ok(super::Facet::MaxExclusive(values.ok_or_else(|| {
18152 ErrorKind::MissingElement("maxExclusive".into())
18153 })?))
18154 }
18155 S::MaxInclusive(mut values, deserializer) => {
18156 if let Some(deserializer) = deserializer {
18157 let value = deserializer.finish(helper)?;
18158 FacetDeserializer::store_max_inclusive(&mut values, value)?;
18159 }
18160 Ok(super::Facet::MaxInclusive(values.ok_or_else(|| {
18161 ErrorKind::MissingElement("maxInclusive".into())
18162 })?))
18163 }
18164 S::TotalDigits(mut values, deserializer) => {
18165 if let Some(deserializer) = deserializer {
18166 let value = deserializer.finish(helper)?;
18167 FacetDeserializer::store_total_digits(&mut values, value)?;
18168 }
18169 Ok(super::Facet::TotalDigits(values.ok_or_else(|| {
18170 ErrorKind::MissingElement("totalDigits".into())
18171 })?))
18172 }
18173 S::FractionDigits(mut values, deserializer) => {
18174 if let Some(deserializer) = deserializer {
18175 let value = deserializer.finish(helper)?;
18176 FacetDeserializer::store_fraction_digits(&mut values, value)?;
18177 }
18178 Ok(super::Facet::FractionDigits(values.ok_or_else(|| {
18179 ErrorKind::MissingElement("fractionDigits".into())
18180 })?))
18181 }
18182 S::Length(mut values, deserializer) => {
18183 if let Some(deserializer) = deserializer {
18184 let value = deserializer.finish(helper)?;
18185 FacetDeserializer::store_length(&mut values, value)?;
18186 }
18187 Ok(super::Facet::Length(values.ok_or_else(|| {
18188 ErrorKind::MissingElement("length".into())
18189 })?))
18190 }
18191 S::MinLength(mut values, deserializer) => {
18192 if let Some(deserializer) = deserializer {
18193 let value = deserializer.finish(helper)?;
18194 FacetDeserializer::store_min_length(&mut values, value)?;
18195 }
18196 Ok(super::Facet::MinLength(values.ok_or_else(|| {
18197 ErrorKind::MissingElement("minLength".into())
18198 })?))
18199 }
18200 S::MaxLength(mut values, deserializer) => {
18201 if let Some(deserializer) = deserializer {
18202 let value = deserializer.finish(helper)?;
18203 FacetDeserializer::store_max_length(&mut values, value)?;
18204 }
18205 Ok(super::Facet::MaxLength(values.ok_or_else(|| {
18206 ErrorKind::MissingElement("maxLength".into())
18207 })?))
18208 }
18209 S::Enumeration(mut values, deserializer) => {
18210 if let Some(deserializer) = deserializer {
18211 let value = deserializer.finish(helper)?;
18212 FacetDeserializer::store_enumeration(&mut values, value)?;
18213 }
18214 Ok(super::Facet::Enumeration(values.ok_or_else(|| {
18215 ErrorKind::MissingElement("enumeration".into())
18216 })?))
18217 }
18218 S::WhiteSpace(mut values, deserializer) => {
18219 if let Some(deserializer) = deserializer {
18220 let value = deserializer.finish(helper)?;
18221 FacetDeserializer::store_white_space(&mut values, value)?;
18222 }
18223 Ok(super::Facet::WhiteSpace(values.ok_or_else(|| {
18224 ErrorKind::MissingElement("whiteSpace".into())
18225 })?))
18226 }
18227 S::Pattern(mut values, deserializer) => {
18228 if let Some(deserializer) = deserializer {
18229 let value = deserializer.finish(helper)?;
18230 FacetDeserializer::store_pattern(&mut values, value)?;
18231 }
18232 Ok(super::Facet::Pattern(values.ok_or_else(|| {
18233 ErrorKind::MissingElement("pattern".into())
18234 })?))
18235 }
18236 S::Assertion(mut values, deserializer) => {
18237 if let Some(deserializer) = deserializer {
18238 let value = deserializer.finish(helper)?;
18239 FacetDeserializer::store_assertion(&mut values, value)?;
18240 }
18241 Ok(super::Facet::Assertion(values.ok_or_else(|| {
18242 ErrorKind::MissingElement("assertion".into())
18243 })?))
18244 }
18245 S::ExplicitTimezone(mut values, deserializer) => {
18246 if let Some(deserializer) = deserializer {
18247 let value = deserializer.finish(helper)?;
18248 FacetDeserializer::store_explicit_timezone(&mut values, value)?;
18249 }
18250 Ok(super::Facet::ExplicitTimezone(values.ok_or_else(|| {
18251 ErrorKind::MissingElement("explicitTimezone".into())
18252 })?))
18253 }
18254 S::Done__(data) => Ok(data),
18255 }
18256 }
18257 fn store_min_exclusive(
18258 values: &mut Option<super::FacetType>,
18259 value: super::FacetType,
18260 ) -> Result<(), Error> {
18261 if values.is_some() {
18262 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18263 b"minExclusive",
18264 )))?;
18265 }
18266 *values = Some(value);
18267 Ok(())
18268 }
18269 fn store_min_inclusive(
18270 values: &mut Option<super::FacetType>,
18271 value: super::FacetType,
18272 ) -> Result<(), Error> {
18273 if values.is_some() {
18274 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18275 b"minInclusive",
18276 )))?;
18277 }
18278 *values = Some(value);
18279 Ok(())
18280 }
18281 fn store_max_exclusive(
18282 values: &mut Option<super::FacetType>,
18283 value: super::FacetType,
18284 ) -> Result<(), Error> {
18285 if values.is_some() {
18286 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18287 b"maxExclusive",
18288 )))?;
18289 }
18290 *values = Some(value);
18291 Ok(())
18292 }
18293 fn store_max_inclusive(
18294 values: &mut Option<super::FacetType>,
18295 value: super::FacetType,
18296 ) -> Result<(), Error> {
18297 if values.is_some() {
18298 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18299 b"maxInclusive",
18300 )))?;
18301 }
18302 *values = Some(value);
18303 Ok(())
18304 }
18305 fn store_total_digits(
18306 values: &mut Option<super::FacetType>,
18307 value: super::FacetType,
18308 ) -> Result<(), Error> {
18309 if values.is_some() {
18310 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18311 b"totalDigits",
18312 )))?;
18313 }
18314 *values = Some(value);
18315 Ok(())
18316 }
18317 fn store_fraction_digits(
18318 values: &mut Option<super::FacetType>,
18319 value: super::FacetType,
18320 ) -> Result<(), Error> {
18321 if values.is_some() {
18322 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18323 b"fractionDigits",
18324 )))?;
18325 }
18326 *values = Some(value);
18327 Ok(())
18328 }
18329 fn store_length(
18330 values: &mut Option<super::FacetType>,
18331 value: super::FacetType,
18332 ) -> Result<(), Error> {
18333 if values.is_some() {
18334 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18335 b"length",
18336 )))?;
18337 }
18338 *values = Some(value);
18339 Ok(())
18340 }
18341 fn store_min_length(
18342 values: &mut Option<super::FacetType>,
18343 value: super::FacetType,
18344 ) -> Result<(), Error> {
18345 if values.is_some() {
18346 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18347 b"minLength",
18348 )))?;
18349 }
18350 *values = Some(value);
18351 Ok(())
18352 }
18353 fn store_max_length(
18354 values: &mut Option<super::FacetType>,
18355 value: super::FacetType,
18356 ) -> Result<(), Error> {
18357 if values.is_some() {
18358 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18359 b"maxLength",
18360 )))?;
18361 }
18362 *values = Some(value);
18363 Ok(())
18364 }
18365 fn store_enumeration(
18366 values: &mut Option<super::FacetType>,
18367 value: super::FacetType,
18368 ) -> Result<(), Error> {
18369 if values.is_some() {
18370 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18371 b"enumeration",
18372 )))?;
18373 }
18374 *values = Some(value);
18375 Ok(())
18376 }
18377 fn store_white_space(
18378 values: &mut Option<super::FacetType>,
18379 value: super::FacetType,
18380 ) -> Result<(), Error> {
18381 if values.is_some() {
18382 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18383 b"whiteSpace",
18384 )))?;
18385 }
18386 *values = Some(value);
18387 Ok(())
18388 }
18389 fn store_pattern(
18390 values: &mut Option<super::FacetType>,
18391 value: super::FacetType,
18392 ) -> Result<(), Error> {
18393 if values.is_some() {
18394 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18395 b"pattern",
18396 )))?;
18397 }
18398 *values = Some(value);
18399 Ok(())
18400 }
18401 fn store_assertion(
18402 values: &mut Option<super::AssertionType>,
18403 value: super::AssertionType,
18404 ) -> Result<(), Error> {
18405 if values.is_some() {
18406 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18407 b"assertion",
18408 )))?;
18409 }
18410 *values = Some(value);
18411 Ok(())
18412 }
18413 fn store_explicit_timezone(
18414 values: &mut Option<super::FacetType>,
18415 value: super::FacetType,
18416 ) -> Result<(), Error> {
18417 if values.is_some() {
18418 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18419 b"explicitTimezone",
18420 )))?;
18421 }
18422 *values = Some(value);
18423 Ok(())
18424 }
18425 fn handle_min_exclusive<'de>(
18426 &mut self,
18427 helper: &mut DeserializeHelper,
18428 mut values: Option<super::FacetType>,
18429 output: DeserializerOutput<'de, super::FacetType>,
18430 fallback: &mut Option<FacetDeserializerState>,
18431 ) -> Result<ElementHandlerOutput<'de>, Error> {
18432 let DeserializerOutput {
18433 artifact,
18434 event,
18435 allow_any,
18436 } = output;
18437 if artifact.is_none() {
18438 *self.state__ = match fallback.take() {
18439 None if values.is_none() => {
18440 *self.state__ = FacetDeserializerState::Init__;
18441 return Ok(ElementHandlerOutput::from_event(event, allow_any));
18442 }
18443 None => FacetDeserializerState::MinExclusive(values, None),
18444 Some(FacetDeserializerState::MinExclusive(_, Some(deserializer))) => {
18445 FacetDeserializerState::MinExclusive(values, Some(deserializer))
18446 }
18447 _ => unreachable!(),
18448 };
18449 return Ok(ElementHandlerOutput::break_(event, allow_any));
18450 }
18451 match fallback.take() {
18452 None => (),
18453 Some(FacetDeserializerState::MinExclusive(_, Some(deserializer))) => {
18454 let data = deserializer.finish(helper)?;
18455 FacetDeserializer::store_min_exclusive(&mut values, data)?;
18456 }
18457 Some(_) => unreachable!(),
18458 }
18459 Ok(match artifact {
18460 DeserializerArtifact::None => unreachable!(),
18461 DeserializerArtifact::Data(data) => {
18462 FacetDeserializer::store_min_exclusive(&mut values, data)?;
18463 let data = FacetDeserializer::finish_state(
18464 helper,
18465 FacetDeserializerState::MinExclusive(values, None),
18466 )?;
18467 *self.state__ = FacetDeserializerState::Done__(data);
18468 ElementHandlerOutput::Break { event, allow_any }
18469 }
18470 DeserializerArtifact::Deserializer(deserializer) => {
18471 *self.state__ =
18472 FacetDeserializerState::MinExclusive(values, Some(deserializer));
18473 ElementHandlerOutput::from_event_end(event, allow_any)
18474 }
18475 })
18476 }
18477 fn handle_min_inclusive<'de>(
18478 &mut self,
18479 helper: &mut DeserializeHelper,
18480 mut values: Option<super::FacetType>,
18481 output: DeserializerOutput<'de, super::FacetType>,
18482 fallback: &mut Option<FacetDeserializerState>,
18483 ) -> Result<ElementHandlerOutput<'de>, Error> {
18484 let DeserializerOutput {
18485 artifact,
18486 event,
18487 allow_any,
18488 } = output;
18489 if artifact.is_none() {
18490 *self.state__ = match fallback.take() {
18491 None if values.is_none() => {
18492 *self.state__ = FacetDeserializerState::Init__;
18493 return Ok(ElementHandlerOutput::from_event(event, allow_any));
18494 }
18495 None => FacetDeserializerState::MinInclusive(values, None),
18496 Some(FacetDeserializerState::MinInclusive(_, Some(deserializer))) => {
18497 FacetDeserializerState::MinInclusive(values, Some(deserializer))
18498 }
18499 _ => unreachable!(),
18500 };
18501 return Ok(ElementHandlerOutput::break_(event, allow_any));
18502 }
18503 match fallback.take() {
18504 None => (),
18505 Some(FacetDeserializerState::MinInclusive(_, Some(deserializer))) => {
18506 let data = deserializer.finish(helper)?;
18507 FacetDeserializer::store_min_inclusive(&mut values, data)?;
18508 }
18509 Some(_) => unreachable!(),
18510 }
18511 Ok(match artifact {
18512 DeserializerArtifact::None => unreachable!(),
18513 DeserializerArtifact::Data(data) => {
18514 FacetDeserializer::store_min_inclusive(&mut values, data)?;
18515 let data = FacetDeserializer::finish_state(
18516 helper,
18517 FacetDeserializerState::MinInclusive(values, None),
18518 )?;
18519 *self.state__ = FacetDeserializerState::Done__(data);
18520 ElementHandlerOutput::Break { event, allow_any }
18521 }
18522 DeserializerArtifact::Deserializer(deserializer) => {
18523 *self.state__ =
18524 FacetDeserializerState::MinInclusive(values, Some(deserializer));
18525 ElementHandlerOutput::from_event_end(event, allow_any)
18526 }
18527 })
18528 }
18529 fn handle_max_exclusive<'de>(
18530 &mut self,
18531 helper: &mut DeserializeHelper,
18532 mut values: Option<super::FacetType>,
18533 output: DeserializerOutput<'de, super::FacetType>,
18534 fallback: &mut Option<FacetDeserializerState>,
18535 ) -> Result<ElementHandlerOutput<'de>, Error> {
18536 let DeserializerOutput {
18537 artifact,
18538 event,
18539 allow_any,
18540 } = output;
18541 if artifact.is_none() {
18542 *self.state__ = match fallback.take() {
18543 None if values.is_none() => {
18544 *self.state__ = FacetDeserializerState::Init__;
18545 return Ok(ElementHandlerOutput::from_event(event, allow_any));
18546 }
18547 None => FacetDeserializerState::MaxExclusive(values, None),
18548 Some(FacetDeserializerState::MaxExclusive(_, Some(deserializer))) => {
18549 FacetDeserializerState::MaxExclusive(values, Some(deserializer))
18550 }
18551 _ => unreachable!(),
18552 };
18553 return Ok(ElementHandlerOutput::break_(event, allow_any));
18554 }
18555 match fallback.take() {
18556 None => (),
18557 Some(FacetDeserializerState::MaxExclusive(_, Some(deserializer))) => {
18558 let data = deserializer.finish(helper)?;
18559 FacetDeserializer::store_max_exclusive(&mut values, data)?;
18560 }
18561 Some(_) => unreachable!(),
18562 }
18563 Ok(match artifact {
18564 DeserializerArtifact::None => unreachable!(),
18565 DeserializerArtifact::Data(data) => {
18566 FacetDeserializer::store_max_exclusive(&mut values, data)?;
18567 let data = FacetDeserializer::finish_state(
18568 helper,
18569 FacetDeserializerState::MaxExclusive(values, None),
18570 )?;
18571 *self.state__ = FacetDeserializerState::Done__(data);
18572 ElementHandlerOutput::Break { event, allow_any }
18573 }
18574 DeserializerArtifact::Deserializer(deserializer) => {
18575 *self.state__ =
18576 FacetDeserializerState::MaxExclusive(values, Some(deserializer));
18577 ElementHandlerOutput::from_event_end(event, allow_any)
18578 }
18579 })
18580 }
18581 fn handle_max_inclusive<'de>(
18582 &mut self,
18583 helper: &mut DeserializeHelper,
18584 mut values: Option<super::FacetType>,
18585 output: DeserializerOutput<'de, super::FacetType>,
18586 fallback: &mut Option<FacetDeserializerState>,
18587 ) -> Result<ElementHandlerOutput<'de>, Error> {
18588 let DeserializerOutput {
18589 artifact,
18590 event,
18591 allow_any,
18592 } = output;
18593 if artifact.is_none() {
18594 *self.state__ = match fallback.take() {
18595 None if values.is_none() => {
18596 *self.state__ = FacetDeserializerState::Init__;
18597 return Ok(ElementHandlerOutput::from_event(event, allow_any));
18598 }
18599 None => FacetDeserializerState::MaxInclusive(values, None),
18600 Some(FacetDeserializerState::MaxInclusive(_, Some(deserializer))) => {
18601 FacetDeserializerState::MaxInclusive(values, Some(deserializer))
18602 }
18603 _ => unreachable!(),
18604 };
18605 return Ok(ElementHandlerOutput::break_(event, allow_any));
18606 }
18607 match fallback.take() {
18608 None => (),
18609 Some(FacetDeserializerState::MaxInclusive(_, Some(deserializer))) => {
18610 let data = deserializer.finish(helper)?;
18611 FacetDeserializer::store_max_inclusive(&mut values, data)?;
18612 }
18613 Some(_) => unreachable!(),
18614 }
18615 Ok(match artifact {
18616 DeserializerArtifact::None => unreachable!(),
18617 DeserializerArtifact::Data(data) => {
18618 FacetDeserializer::store_max_inclusive(&mut values, data)?;
18619 let data = FacetDeserializer::finish_state(
18620 helper,
18621 FacetDeserializerState::MaxInclusive(values, None),
18622 )?;
18623 *self.state__ = FacetDeserializerState::Done__(data);
18624 ElementHandlerOutput::Break { event, allow_any }
18625 }
18626 DeserializerArtifact::Deserializer(deserializer) => {
18627 *self.state__ =
18628 FacetDeserializerState::MaxInclusive(values, Some(deserializer));
18629 ElementHandlerOutput::from_event_end(event, allow_any)
18630 }
18631 })
18632 }
18633 fn handle_total_digits<'de>(
18634 &mut self,
18635 helper: &mut DeserializeHelper,
18636 mut values: Option<super::FacetType>,
18637 output: DeserializerOutput<'de, super::FacetType>,
18638 fallback: &mut Option<FacetDeserializerState>,
18639 ) -> Result<ElementHandlerOutput<'de>, Error> {
18640 let DeserializerOutput {
18641 artifact,
18642 event,
18643 allow_any,
18644 } = output;
18645 if artifact.is_none() {
18646 *self.state__ = match fallback.take() {
18647 None if values.is_none() => {
18648 *self.state__ = FacetDeserializerState::Init__;
18649 return Ok(ElementHandlerOutput::from_event(event, allow_any));
18650 }
18651 None => FacetDeserializerState::TotalDigits(values, None),
18652 Some(FacetDeserializerState::TotalDigits(_, Some(deserializer))) => {
18653 FacetDeserializerState::TotalDigits(values, Some(deserializer))
18654 }
18655 _ => unreachable!(),
18656 };
18657 return Ok(ElementHandlerOutput::break_(event, allow_any));
18658 }
18659 match fallback.take() {
18660 None => (),
18661 Some(FacetDeserializerState::TotalDigits(_, Some(deserializer))) => {
18662 let data = deserializer.finish(helper)?;
18663 FacetDeserializer::store_total_digits(&mut values, data)?;
18664 }
18665 Some(_) => unreachable!(),
18666 }
18667 Ok(match artifact {
18668 DeserializerArtifact::None => unreachable!(),
18669 DeserializerArtifact::Data(data) => {
18670 FacetDeserializer::store_total_digits(&mut values, data)?;
18671 let data = FacetDeserializer::finish_state(
18672 helper,
18673 FacetDeserializerState::TotalDigits(values, None),
18674 )?;
18675 *self.state__ = FacetDeserializerState::Done__(data);
18676 ElementHandlerOutput::Break { event, allow_any }
18677 }
18678 DeserializerArtifact::Deserializer(deserializer) => {
18679 *self.state__ = FacetDeserializerState::TotalDigits(values, Some(deserializer));
18680 ElementHandlerOutput::from_event_end(event, allow_any)
18681 }
18682 })
18683 }
18684 fn handle_fraction_digits<'de>(
18685 &mut self,
18686 helper: &mut DeserializeHelper,
18687 mut values: Option<super::FacetType>,
18688 output: DeserializerOutput<'de, super::FacetType>,
18689 fallback: &mut Option<FacetDeserializerState>,
18690 ) -> Result<ElementHandlerOutput<'de>, Error> {
18691 let DeserializerOutput {
18692 artifact,
18693 event,
18694 allow_any,
18695 } = output;
18696 if artifact.is_none() {
18697 *self.state__ = match fallback.take() {
18698 None if values.is_none() => {
18699 *self.state__ = FacetDeserializerState::Init__;
18700 return Ok(ElementHandlerOutput::from_event(event, allow_any));
18701 }
18702 None => FacetDeserializerState::FractionDigits(values, None),
18703 Some(FacetDeserializerState::FractionDigits(_, Some(deserializer))) => {
18704 FacetDeserializerState::FractionDigits(values, Some(deserializer))
18705 }
18706 _ => unreachable!(),
18707 };
18708 return Ok(ElementHandlerOutput::break_(event, allow_any));
18709 }
18710 match fallback.take() {
18711 None => (),
18712 Some(FacetDeserializerState::FractionDigits(_, Some(deserializer))) => {
18713 let data = deserializer.finish(helper)?;
18714 FacetDeserializer::store_fraction_digits(&mut values, data)?;
18715 }
18716 Some(_) => unreachable!(),
18717 }
18718 Ok(match artifact {
18719 DeserializerArtifact::None => unreachable!(),
18720 DeserializerArtifact::Data(data) => {
18721 FacetDeserializer::store_fraction_digits(&mut values, data)?;
18722 let data = FacetDeserializer::finish_state(
18723 helper,
18724 FacetDeserializerState::FractionDigits(values, None),
18725 )?;
18726 *self.state__ = FacetDeserializerState::Done__(data);
18727 ElementHandlerOutput::Break { event, allow_any }
18728 }
18729 DeserializerArtifact::Deserializer(deserializer) => {
18730 *self.state__ =
18731 FacetDeserializerState::FractionDigits(values, Some(deserializer));
18732 ElementHandlerOutput::from_event_end(event, allow_any)
18733 }
18734 })
18735 }
18736 fn handle_length<'de>(
18737 &mut self,
18738 helper: &mut DeserializeHelper,
18739 mut values: Option<super::FacetType>,
18740 output: DeserializerOutput<'de, super::FacetType>,
18741 fallback: &mut Option<FacetDeserializerState>,
18742 ) -> Result<ElementHandlerOutput<'de>, Error> {
18743 let DeserializerOutput {
18744 artifact,
18745 event,
18746 allow_any,
18747 } = output;
18748 if artifact.is_none() {
18749 *self.state__ = match fallback.take() {
18750 None if values.is_none() => {
18751 *self.state__ = FacetDeserializerState::Init__;
18752 return Ok(ElementHandlerOutput::from_event(event, allow_any));
18753 }
18754 None => FacetDeserializerState::Length(values, None),
18755 Some(FacetDeserializerState::Length(_, Some(deserializer))) => {
18756 FacetDeserializerState::Length(values, Some(deserializer))
18757 }
18758 _ => unreachable!(),
18759 };
18760 return Ok(ElementHandlerOutput::break_(event, allow_any));
18761 }
18762 match fallback.take() {
18763 None => (),
18764 Some(FacetDeserializerState::Length(_, Some(deserializer))) => {
18765 let data = deserializer.finish(helper)?;
18766 FacetDeserializer::store_length(&mut values, data)?;
18767 }
18768 Some(_) => unreachable!(),
18769 }
18770 Ok(match artifact {
18771 DeserializerArtifact::None => unreachable!(),
18772 DeserializerArtifact::Data(data) => {
18773 FacetDeserializer::store_length(&mut values, data)?;
18774 let data = FacetDeserializer::finish_state(
18775 helper,
18776 FacetDeserializerState::Length(values, None),
18777 )?;
18778 *self.state__ = FacetDeserializerState::Done__(data);
18779 ElementHandlerOutput::Break { event, allow_any }
18780 }
18781 DeserializerArtifact::Deserializer(deserializer) => {
18782 *self.state__ = FacetDeserializerState::Length(values, Some(deserializer));
18783 ElementHandlerOutput::from_event_end(event, allow_any)
18784 }
18785 })
18786 }
18787 fn handle_min_length<'de>(
18788 &mut self,
18789 helper: &mut DeserializeHelper,
18790 mut values: Option<super::FacetType>,
18791 output: DeserializerOutput<'de, super::FacetType>,
18792 fallback: &mut Option<FacetDeserializerState>,
18793 ) -> Result<ElementHandlerOutput<'de>, Error> {
18794 let DeserializerOutput {
18795 artifact,
18796 event,
18797 allow_any,
18798 } = output;
18799 if artifact.is_none() {
18800 *self.state__ = match fallback.take() {
18801 None if values.is_none() => {
18802 *self.state__ = FacetDeserializerState::Init__;
18803 return Ok(ElementHandlerOutput::from_event(event, allow_any));
18804 }
18805 None => FacetDeserializerState::MinLength(values, None),
18806 Some(FacetDeserializerState::MinLength(_, Some(deserializer))) => {
18807 FacetDeserializerState::MinLength(values, Some(deserializer))
18808 }
18809 _ => unreachable!(),
18810 };
18811 return Ok(ElementHandlerOutput::break_(event, allow_any));
18812 }
18813 match fallback.take() {
18814 None => (),
18815 Some(FacetDeserializerState::MinLength(_, Some(deserializer))) => {
18816 let data = deserializer.finish(helper)?;
18817 FacetDeserializer::store_min_length(&mut values, data)?;
18818 }
18819 Some(_) => unreachable!(),
18820 }
18821 Ok(match artifact {
18822 DeserializerArtifact::None => unreachable!(),
18823 DeserializerArtifact::Data(data) => {
18824 FacetDeserializer::store_min_length(&mut values, data)?;
18825 let data = FacetDeserializer::finish_state(
18826 helper,
18827 FacetDeserializerState::MinLength(values, None),
18828 )?;
18829 *self.state__ = FacetDeserializerState::Done__(data);
18830 ElementHandlerOutput::Break { event, allow_any }
18831 }
18832 DeserializerArtifact::Deserializer(deserializer) => {
18833 *self.state__ = FacetDeserializerState::MinLength(values, Some(deserializer));
18834 ElementHandlerOutput::from_event_end(event, allow_any)
18835 }
18836 })
18837 }
18838 fn handle_max_length<'de>(
18839 &mut self,
18840 helper: &mut DeserializeHelper,
18841 mut values: Option<super::FacetType>,
18842 output: DeserializerOutput<'de, super::FacetType>,
18843 fallback: &mut Option<FacetDeserializerState>,
18844 ) -> Result<ElementHandlerOutput<'de>, Error> {
18845 let DeserializerOutput {
18846 artifact,
18847 event,
18848 allow_any,
18849 } = output;
18850 if artifact.is_none() {
18851 *self.state__ = match fallback.take() {
18852 None if values.is_none() => {
18853 *self.state__ = FacetDeserializerState::Init__;
18854 return Ok(ElementHandlerOutput::from_event(event, allow_any));
18855 }
18856 None => FacetDeserializerState::MaxLength(values, None),
18857 Some(FacetDeserializerState::MaxLength(_, Some(deserializer))) => {
18858 FacetDeserializerState::MaxLength(values, Some(deserializer))
18859 }
18860 _ => unreachable!(),
18861 };
18862 return Ok(ElementHandlerOutput::break_(event, allow_any));
18863 }
18864 match fallback.take() {
18865 None => (),
18866 Some(FacetDeserializerState::MaxLength(_, Some(deserializer))) => {
18867 let data = deserializer.finish(helper)?;
18868 FacetDeserializer::store_max_length(&mut values, data)?;
18869 }
18870 Some(_) => unreachable!(),
18871 }
18872 Ok(match artifact {
18873 DeserializerArtifact::None => unreachable!(),
18874 DeserializerArtifact::Data(data) => {
18875 FacetDeserializer::store_max_length(&mut values, data)?;
18876 let data = FacetDeserializer::finish_state(
18877 helper,
18878 FacetDeserializerState::MaxLength(values, None),
18879 )?;
18880 *self.state__ = FacetDeserializerState::Done__(data);
18881 ElementHandlerOutput::Break { event, allow_any }
18882 }
18883 DeserializerArtifact::Deserializer(deserializer) => {
18884 *self.state__ = FacetDeserializerState::MaxLength(values, Some(deserializer));
18885 ElementHandlerOutput::from_event_end(event, allow_any)
18886 }
18887 })
18888 }
18889 fn handle_enumeration<'de>(
18890 &mut self,
18891 helper: &mut DeserializeHelper,
18892 mut values: Option<super::FacetType>,
18893 output: DeserializerOutput<'de, super::FacetType>,
18894 fallback: &mut Option<FacetDeserializerState>,
18895 ) -> Result<ElementHandlerOutput<'de>, Error> {
18896 let DeserializerOutput {
18897 artifact,
18898 event,
18899 allow_any,
18900 } = output;
18901 if artifact.is_none() {
18902 *self.state__ = match fallback.take() {
18903 None if values.is_none() => {
18904 *self.state__ = FacetDeserializerState::Init__;
18905 return Ok(ElementHandlerOutput::from_event(event, allow_any));
18906 }
18907 None => FacetDeserializerState::Enumeration(values, None),
18908 Some(FacetDeserializerState::Enumeration(_, Some(deserializer))) => {
18909 FacetDeserializerState::Enumeration(values, Some(deserializer))
18910 }
18911 _ => unreachable!(),
18912 };
18913 return Ok(ElementHandlerOutput::break_(event, allow_any));
18914 }
18915 match fallback.take() {
18916 None => (),
18917 Some(FacetDeserializerState::Enumeration(_, Some(deserializer))) => {
18918 let data = deserializer.finish(helper)?;
18919 FacetDeserializer::store_enumeration(&mut values, data)?;
18920 }
18921 Some(_) => unreachable!(),
18922 }
18923 Ok(match artifact {
18924 DeserializerArtifact::None => unreachable!(),
18925 DeserializerArtifact::Data(data) => {
18926 FacetDeserializer::store_enumeration(&mut values, data)?;
18927 let data = FacetDeserializer::finish_state(
18928 helper,
18929 FacetDeserializerState::Enumeration(values, None),
18930 )?;
18931 *self.state__ = FacetDeserializerState::Done__(data);
18932 ElementHandlerOutput::Break { event, allow_any }
18933 }
18934 DeserializerArtifact::Deserializer(deserializer) => {
18935 *self.state__ = FacetDeserializerState::Enumeration(values, Some(deserializer));
18936 ElementHandlerOutput::from_event_end(event, allow_any)
18937 }
18938 })
18939 }
18940 fn handle_white_space<'de>(
18941 &mut self,
18942 helper: &mut DeserializeHelper,
18943 mut values: Option<super::FacetType>,
18944 output: DeserializerOutput<'de, super::FacetType>,
18945 fallback: &mut Option<FacetDeserializerState>,
18946 ) -> Result<ElementHandlerOutput<'de>, Error> {
18947 let DeserializerOutput {
18948 artifact,
18949 event,
18950 allow_any,
18951 } = output;
18952 if artifact.is_none() {
18953 *self.state__ = match fallback.take() {
18954 None if values.is_none() => {
18955 *self.state__ = FacetDeserializerState::Init__;
18956 return Ok(ElementHandlerOutput::from_event(event, allow_any));
18957 }
18958 None => FacetDeserializerState::WhiteSpace(values, None),
18959 Some(FacetDeserializerState::WhiteSpace(_, Some(deserializer))) => {
18960 FacetDeserializerState::WhiteSpace(values, Some(deserializer))
18961 }
18962 _ => unreachable!(),
18963 };
18964 return Ok(ElementHandlerOutput::break_(event, allow_any));
18965 }
18966 match fallback.take() {
18967 None => (),
18968 Some(FacetDeserializerState::WhiteSpace(_, Some(deserializer))) => {
18969 let data = deserializer.finish(helper)?;
18970 FacetDeserializer::store_white_space(&mut values, data)?;
18971 }
18972 Some(_) => unreachable!(),
18973 }
18974 Ok(match artifact {
18975 DeserializerArtifact::None => unreachable!(),
18976 DeserializerArtifact::Data(data) => {
18977 FacetDeserializer::store_white_space(&mut values, data)?;
18978 let data = FacetDeserializer::finish_state(
18979 helper,
18980 FacetDeserializerState::WhiteSpace(values, None),
18981 )?;
18982 *self.state__ = FacetDeserializerState::Done__(data);
18983 ElementHandlerOutput::Break { event, allow_any }
18984 }
18985 DeserializerArtifact::Deserializer(deserializer) => {
18986 *self.state__ = FacetDeserializerState::WhiteSpace(values, Some(deserializer));
18987 ElementHandlerOutput::from_event_end(event, allow_any)
18988 }
18989 })
18990 }
18991 fn handle_pattern<'de>(
18992 &mut self,
18993 helper: &mut DeserializeHelper,
18994 mut values: Option<super::FacetType>,
18995 output: DeserializerOutput<'de, super::FacetType>,
18996 fallback: &mut Option<FacetDeserializerState>,
18997 ) -> Result<ElementHandlerOutput<'de>, Error> {
18998 let DeserializerOutput {
18999 artifact,
19000 event,
19001 allow_any,
19002 } = output;
19003 if artifact.is_none() {
19004 *self.state__ = match fallback.take() {
19005 None if values.is_none() => {
19006 *self.state__ = FacetDeserializerState::Init__;
19007 return Ok(ElementHandlerOutput::from_event(event, allow_any));
19008 }
19009 None => FacetDeserializerState::Pattern(values, None),
19010 Some(FacetDeserializerState::Pattern(_, Some(deserializer))) => {
19011 FacetDeserializerState::Pattern(values, Some(deserializer))
19012 }
19013 _ => unreachable!(),
19014 };
19015 return Ok(ElementHandlerOutput::break_(event, allow_any));
19016 }
19017 match fallback.take() {
19018 None => (),
19019 Some(FacetDeserializerState::Pattern(_, Some(deserializer))) => {
19020 let data = deserializer.finish(helper)?;
19021 FacetDeserializer::store_pattern(&mut values, data)?;
19022 }
19023 Some(_) => unreachable!(),
19024 }
19025 Ok(match artifact {
19026 DeserializerArtifact::None => unreachable!(),
19027 DeserializerArtifact::Data(data) => {
19028 FacetDeserializer::store_pattern(&mut values, data)?;
19029 let data = FacetDeserializer::finish_state(
19030 helper,
19031 FacetDeserializerState::Pattern(values, None),
19032 )?;
19033 *self.state__ = FacetDeserializerState::Done__(data);
19034 ElementHandlerOutput::Break { event, allow_any }
19035 }
19036 DeserializerArtifact::Deserializer(deserializer) => {
19037 *self.state__ = FacetDeserializerState::Pattern(values, Some(deserializer));
19038 ElementHandlerOutput::from_event_end(event, allow_any)
19039 }
19040 })
19041 }
19042 fn handle_assertion<'de>(
19043 &mut self,
19044 helper: &mut DeserializeHelper,
19045 mut values: Option<super::AssertionType>,
19046 output: DeserializerOutput<'de, super::AssertionType>,
19047 fallback: &mut Option<FacetDeserializerState>,
19048 ) -> Result<ElementHandlerOutput<'de>, Error> {
19049 let DeserializerOutput {
19050 artifact,
19051 event,
19052 allow_any,
19053 } = output;
19054 if artifact.is_none() {
19055 *self.state__ = match fallback.take() {
19056 None if values.is_none() => {
19057 *self.state__ = FacetDeserializerState::Init__;
19058 return Ok(ElementHandlerOutput::from_event(event, allow_any));
19059 }
19060 None => FacetDeserializerState::Assertion(values, None),
19061 Some(FacetDeserializerState::Assertion(_, Some(deserializer))) => {
19062 FacetDeserializerState::Assertion(values, Some(deserializer))
19063 }
19064 _ => unreachable!(),
19065 };
19066 return Ok(ElementHandlerOutput::break_(event, allow_any));
19067 }
19068 match fallback.take() {
19069 None => (),
19070 Some(FacetDeserializerState::Assertion(_, Some(deserializer))) => {
19071 let data = deserializer.finish(helper)?;
19072 FacetDeserializer::store_assertion(&mut values, data)?;
19073 }
19074 Some(_) => unreachable!(),
19075 }
19076 Ok(match artifact {
19077 DeserializerArtifact::None => unreachable!(),
19078 DeserializerArtifact::Data(data) => {
19079 FacetDeserializer::store_assertion(&mut values, data)?;
19080 let data = FacetDeserializer::finish_state(
19081 helper,
19082 FacetDeserializerState::Assertion(values, None),
19083 )?;
19084 *self.state__ = FacetDeserializerState::Done__(data);
19085 ElementHandlerOutput::Break { event, allow_any }
19086 }
19087 DeserializerArtifact::Deserializer(deserializer) => {
19088 *self.state__ = FacetDeserializerState::Assertion(values, Some(deserializer));
19089 ElementHandlerOutput::from_event_end(event, allow_any)
19090 }
19091 })
19092 }
19093 fn handle_explicit_timezone<'de>(
19094 &mut self,
19095 helper: &mut DeserializeHelper,
19096 mut values: Option<super::FacetType>,
19097 output: DeserializerOutput<'de, super::FacetType>,
19098 fallback: &mut Option<FacetDeserializerState>,
19099 ) -> Result<ElementHandlerOutput<'de>, Error> {
19100 let DeserializerOutput {
19101 artifact,
19102 event,
19103 allow_any,
19104 } = output;
19105 if artifact.is_none() {
19106 *self.state__ = match fallback.take() {
19107 None if values.is_none() => {
19108 *self.state__ = FacetDeserializerState::Init__;
19109 return Ok(ElementHandlerOutput::from_event(event, allow_any));
19110 }
19111 None => FacetDeserializerState::ExplicitTimezone(values, None),
19112 Some(FacetDeserializerState::ExplicitTimezone(_, Some(deserializer))) => {
19113 FacetDeserializerState::ExplicitTimezone(values, Some(deserializer))
19114 }
19115 _ => unreachable!(),
19116 };
19117 return Ok(ElementHandlerOutput::break_(event, allow_any));
19118 }
19119 match fallback.take() {
19120 None => (),
19121 Some(FacetDeserializerState::ExplicitTimezone(_, Some(deserializer))) => {
19122 let data = deserializer.finish(helper)?;
19123 FacetDeserializer::store_explicit_timezone(&mut values, data)?;
19124 }
19125 Some(_) => unreachable!(),
19126 }
19127 Ok(match artifact {
19128 DeserializerArtifact::None => unreachable!(),
19129 DeserializerArtifact::Data(data) => {
19130 FacetDeserializer::store_explicit_timezone(&mut values, data)?;
19131 let data = FacetDeserializer::finish_state(
19132 helper,
19133 FacetDeserializerState::ExplicitTimezone(values, None),
19134 )?;
19135 *self.state__ = FacetDeserializerState::Done__(data);
19136 ElementHandlerOutput::Break { event, allow_any }
19137 }
19138 DeserializerArtifact::Deserializer(deserializer) => {
19139 *self.state__ =
19140 FacetDeserializerState::ExplicitTimezone(values, Some(deserializer));
19141 ElementHandlerOutput::from_event_end(event, allow_any)
19142 }
19143 })
19144 }
19145 }
19146 impl<'de> Deserializer<'de, super::Facet> for Box<FacetDeserializer> {
19147 fn init(
19148 helper: &mut DeserializeHelper,
19149 event: Event<'de>,
19150 ) -> DeserializerResult<'de, super::Facet> {
19151 let deserializer = Box::new(FacetDeserializer {
19152 state__: Box::new(FacetDeserializerState::Init__),
19153 });
19154 let mut output = deserializer.next(helper, event)?;
19155 output.artifact = match output.artifact {
19156 DeserializerArtifact::Deserializer(x)
19157 if matches!(&*x.state__, FacetDeserializerState::Init__) =>
19158 {
19159 DeserializerArtifact::None
19160 }
19161 artifact => artifact,
19162 };
19163 Ok(output)
19164 }
19165 fn next(
19166 mut self,
19167 helper: &mut DeserializeHelper,
19168 event: Event<'de>,
19169 ) -> DeserializerResult<'de, super::Facet> {
19170 use FacetDeserializerState as S;
19171 let mut event = event;
19172 let mut fallback = None;
19173 let (event, allow_any) = loop {
19174 let state = replace(&mut *self.state__, S::Unknown__);
19175 event = match (state, event) {
19176 (S::Unknown__, _) => unreachable!(),
19177 (S::MinExclusive(values, Some(deserializer)), event) => {
19178 let output = deserializer.next(helper, event)?;
19179 match self.handle_min_exclusive(helper, values, output, &mut fallback)? {
19180 ElementHandlerOutput::Break { event, allow_any } => {
19181 break (event, allow_any)
19182 }
19183 ElementHandlerOutput::Continue { event, .. } => event,
19184 }
19185 }
19186 (S::MinInclusive(values, Some(deserializer)), event) => {
19187 let output = deserializer.next(helper, event)?;
19188 match self.handle_min_inclusive(helper, values, output, &mut fallback)? {
19189 ElementHandlerOutput::Break { event, allow_any } => {
19190 break (event, allow_any)
19191 }
19192 ElementHandlerOutput::Continue { event, .. } => event,
19193 }
19194 }
19195 (S::MaxExclusive(values, Some(deserializer)), event) => {
19196 let output = deserializer.next(helper, event)?;
19197 match self.handle_max_exclusive(helper, values, output, &mut fallback)? {
19198 ElementHandlerOutput::Break { event, allow_any } => {
19199 break (event, allow_any)
19200 }
19201 ElementHandlerOutput::Continue { event, .. } => event,
19202 }
19203 }
19204 (S::MaxInclusive(values, Some(deserializer)), event) => {
19205 let output = deserializer.next(helper, event)?;
19206 match self.handle_max_inclusive(helper, values, output, &mut fallback)? {
19207 ElementHandlerOutput::Break { event, allow_any } => {
19208 break (event, allow_any)
19209 }
19210 ElementHandlerOutput::Continue { event, .. } => event,
19211 }
19212 }
19213 (S::TotalDigits(values, Some(deserializer)), event) => {
19214 let output = deserializer.next(helper, event)?;
19215 match self.handle_total_digits(helper, values, output, &mut fallback)? {
19216 ElementHandlerOutput::Break { event, allow_any } => {
19217 break (event, allow_any)
19218 }
19219 ElementHandlerOutput::Continue { event, .. } => event,
19220 }
19221 }
19222 (S::FractionDigits(values, Some(deserializer)), event) => {
19223 let output = deserializer.next(helper, event)?;
19224 match self.handle_fraction_digits(helper, values, output, &mut fallback)? {
19225 ElementHandlerOutput::Break { event, allow_any } => {
19226 break (event, allow_any)
19227 }
19228 ElementHandlerOutput::Continue { event, .. } => event,
19229 }
19230 }
19231 (S::Length(values, Some(deserializer)), event) => {
19232 let output = deserializer.next(helper, event)?;
19233 match self.handle_length(helper, values, output, &mut fallback)? {
19234 ElementHandlerOutput::Break { event, allow_any } => {
19235 break (event, allow_any)
19236 }
19237 ElementHandlerOutput::Continue { event, .. } => event,
19238 }
19239 }
19240 (S::MinLength(values, Some(deserializer)), event) => {
19241 let output = deserializer.next(helper, event)?;
19242 match self.handle_min_length(helper, values, output, &mut fallback)? {
19243 ElementHandlerOutput::Break { event, allow_any } => {
19244 break (event, allow_any)
19245 }
19246 ElementHandlerOutput::Continue { event, .. } => event,
19247 }
19248 }
19249 (S::MaxLength(values, Some(deserializer)), event) => {
19250 let output = deserializer.next(helper, event)?;
19251 match self.handle_max_length(helper, values, output, &mut fallback)? {
19252 ElementHandlerOutput::Break { event, allow_any } => {
19253 break (event, allow_any)
19254 }
19255 ElementHandlerOutput::Continue { event, .. } => event,
19256 }
19257 }
19258 (S::Enumeration(values, Some(deserializer)), event) => {
19259 let output = deserializer.next(helper, event)?;
19260 match self.handle_enumeration(helper, values, output, &mut fallback)? {
19261 ElementHandlerOutput::Break { event, allow_any } => {
19262 break (event, allow_any)
19263 }
19264 ElementHandlerOutput::Continue { event, .. } => event,
19265 }
19266 }
19267 (S::WhiteSpace(values, Some(deserializer)), event) => {
19268 let output = deserializer.next(helper, event)?;
19269 match self.handle_white_space(helper, values, output, &mut fallback)? {
19270 ElementHandlerOutput::Break { event, allow_any } => {
19271 break (event, allow_any)
19272 }
19273 ElementHandlerOutput::Continue { event, .. } => event,
19274 }
19275 }
19276 (S::Pattern(values, Some(deserializer)), event) => {
19277 let output = deserializer.next(helper, event)?;
19278 match self.handle_pattern(helper, values, output, &mut fallback)? {
19279 ElementHandlerOutput::Break { event, allow_any } => {
19280 break (event, allow_any)
19281 }
19282 ElementHandlerOutput::Continue { event, .. } => event,
19283 }
19284 }
19285 (S::Assertion(values, Some(deserializer)), event) => {
19286 let output = deserializer.next(helper, event)?;
19287 match self.handle_assertion(helper, values, output, &mut fallback)? {
19288 ElementHandlerOutput::Break { event, allow_any } => {
19289 break (event, allow_any)
19290 }
19291 ElementHandlerOutput::Continue { event, .. } => event,
19292 }
19293 }
19294 (S::ExplicitTimezone(values, Some(deserializer)), event) => {
19295 let output = deserializer.next(helper, event)?;
19296 match self.handle_explicit_timezone(
19297 helper,
19298 values,
19299 output,
19300 &mut fallback,
19301 )? {
19302 ElementHandlerOutput::Break { event, allow_any } => {
19303 break (event, allow_any)
19304 }
19305 ElementHandlerOutput::Continue { event, .. } => event,
19306 }
19307 }
19308 (state, event @ Event::End(_)) => {
19309 return Ok(DeserializerOutput {
19310 artifact: DeserializerArtifact::Data(FacetDeserializer::finish_state(
19311 helper, state,
19312 )?),
19313 event: DeserializerEvent::Continue(event),
19314 allow_any: false,
19315 });
19316 }
19317 (S::Init__, event) => match self.find_suitable(helper, event, &mut fallback)? {
19318 ElementHandlerOutput::Break { event, allow_any } => {
19319 break (event, allow_any)
19320 }
19321 ElementHandlerOutput::Continue { event, .. } => event,
19322 },
19323 (
19324 S::MinExclusive(values, None),
19325 event @ (Event::Start(_) | Event::Empty(_)),
19326 ) => {
19327 let output = helper.init_start_tag_deserializer(
19328 event,
19329 Some(&super::NS_XS),
19330 b"minExclusive",
19331 false,
19332 )?;
19333 match self.handle_min_exclusive(helper, values, output, &mut fallback)? {
19334 ElementHandlerOutput::Break { event, allow_any } => {
19335 break (event, allow_any)
19336 }
19337 ElementHandlerOutput::Continue { event, .. } => event,
19338 }
19339 }
19340 (
19341 S::MinInclusive(values, None),
19342 event @ (Event::Start(_) | Event::Empty(_)),
19343 ) => {
19344 let output = helper.init_start_tag_deserializer(
19345 event,
19346 Some(&super::NS_XS),
19347 b"minInclusive",
19348 false,
19349 )?;
19350 match self.handle_min_inclusive(helper, values, output, &mut fallback)? {
19351 ElementHandlerOutput::Break { event, allow_any } => {
19352 break (event, allow_any)
19353 }
19354 ElementHandlerOutput::Continue { event, .. } => event,
19355 }
19356 }
19357 (
19358 S::MaxExclusive(values, None),
19359 event @ (Event::Start(_) | Event::Empty(_)),
19360 ) => {
19361 let output = helper.init_start_tag_deserializer(
19362 event,
19363 Some(&super::NS_XS),
19364 b"maxExclusive",
19365 false,
19366 )?;
19367 match self.handle_max_exclusive(helper, values, output, &mut fallback)? {
19368 ElementHandlerOutput::Break { event, allow_any } => {
19369 break (event, allow_any)
19370 }
19371 ElementHandlerOutput::Continue { event, .. } => event,
19372 }
19373 }
19374 (
19375 S::MaxInclusive(values, None),
19376 event @ (Event::Start(_) | Event::Empty(_)),
19377 ) => {
19378 let output = helper.init_start_tag_deserializer(
19379 event,
19380 Some(&super::NS_XS),
19381 b"maxInclusive",
19382 false,
19383 )?;
19384 match self.handle_max_inclusive(helper, values, output, &mut fallback)? {
19385 ElementHandlerOutput::Break { event, allow_any } => {
19386 break (event, allow_any)
19387 }
19388 ElementHandlerOutput::Continue { event, .. } => event,
19389 }
19390 }
19391 (S::TotalDigits(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
19392 let output = helper.init_start_tag_deserializer(
19393 event,
19394 Some(&super::NS_XS),
19395 b"totalDigits",
19396 false,
19397 )?;
19398 match self.handle_total_digits(helper, values, output, &mut fallback)? {
19399 ElementHandlerOutput::Break { event, allow_any } => {
19400 break (event, allow_any)
19401 }
19402 ElementHandlerOutput::Continue { event, .. } => event,
19403 }
19404 }
19405 (
19406 S::FractionDigits(values, None),
19407 event @ (Event::Start(_) | Event::Empty(_)),
19408 ) => {
19409 let output = helper.init_start_tag_deserializer(
19410 event,
19411 Some(&super::NS_XS),
19412 b"fractionDigits",
19413 false,
19414 )?;
19415 match self.handle_fraction_digits(helper, values, output, &mut fallback)? {
19416 ElementHandlerOutput::Break { event, allow_any } => {
19417 break (event, allow_any)
19418 }
19419 ElementHandlerOutput::Continue { event, .. } => event,
19420 }
19421 }
19422 (S::Length(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
19423 let output = helper.init_start_tag_deserializer(
19424 event,
19425 Some(&super::NS_XS),
19426 b"length",
19427 false,
19428 )?;
19429 match self.handle_length(helper, values, output, &mut fallback)? {
19430 ElementHandlerOutput::Break { event, allow_any } => {
19431 break (event, allow_any)
19432 }
19433 ElementHandlerOutput::Continue { event, .. } => event,
19434 }
19435 }
19436 (S::MinLength(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
19437 let output = helper.init_start_tag_deserializer(
19438 event,
19439 Some(&super::NS_XS),
19440 b"minLength",
19441 false,
19442 )?;
19443 match self.handle_min_length(helper, values, output, &mut fallback)? {
19444 ElementHandlerOutput::Break { event, allow_any } => {
19445 break (event, allow_any)
19446 }
19447 ElementHandlerOutput::Continue { event, .. } => event,
19448 }
19449 }
19450 (S::MaxLength(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
19451 let output = helper.init_start_tag_deserializer(
19452 event,
19453 Some(&super::NS_XS),
19454 b"maxLength",
19455 false,
19456 )?;
19457 match self.handle_max_length(helper, values, output, &mut fallback)? {
19458 ElementHandlerOutput::Break { event, allow_any } => {
19459 break (event, allow_any)
19460 }
19461 ElementHandlerOutput::Continue { event, .. } => event,
19462 }
19463 }
19464 (S::Enumeration(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
19465 let output = helper.init_start_tag_deserializer(
19466 event,
19467 Some(&super::NS_XS),
19468 b"enumeration",
19469 false,
19470 )?;
19471 match self.handle_enumeration(helper, values, output, &mut fallback)? {
19472 ElementHandlerOutput::Break { event, allow_any } => {
19473 break (event, allow_any)
19474 }
19475 ElementHandlerOutput::Continue { event, .. } => event,
19476 }
19477 }
19478 (S::WhiteSpace(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
19479 let output = helper.init_start_tag_deserializer(
19480 event,
19481 Some(&super::NS_XS),
19482 b"whiteSpace",
19483 false,
19484 )?;
19485 match self.handle_white_space(helper, values, output, &mut fallback)? {
19486 ElementHandlerOutput::Break { event, allow_any } => {
19487 break (event, allow_any)
19488 }
19489 ElementHandlerOutput::Continue { event, .. } => event,
19490 }
19491 }
19492 (S::Pattern(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
19493 let output = helper.init_start_tag_deserializer(
19494 event,
19495 Some(&super::NS_XS),
19496 b"pattern",
19497 false,
19498 )?;
19499 match self.handle_pattern(helper, values, output, &mut fallback)? {
19500 ElementHandlerOutput::Break { event, allow_any } => {
19501 break (event, allow_any)
19502 }
19503 ElementHandlerOutput::Continue { event, .. } => event,
19504 }
19505 }
19506 (S::Assertion(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
19507 let output = helper.init_start_tag_deserializer(
19508 event,
19509 Some(&super::NS_XS),
19510 b"assertion",
19511 false,
19512 )?;
19513 match self.handle_assertion(helper, values, output, &mut fallback)? {
19514 ElementHandlerOutput::Break { event, allow_any } => {
19515 break (event, allow_any)
19516 }
19517 ElementHandlerOutput::Continue { event, .. } => event,
19518 }
19519 }
19520 (
19521 S::ExplicitTimezone(values, None),
19522 event @ (Event::Start(_) | Event::Empty(_)),
19523 ) => {
19524 let output = helper.init_start_tag_deserializer(
19525 event,
19526 Some(&super::NS_XS),
19527 b"explicitTimezone",
19528 false,
19529 )?;
19530 match self.handle_explicit_timezone(
19531 helper,
19532 values,
19533 output,
19534 &mut fallback,
19535 )? {
19536 ElementHandlerOutput::Break { event, allow_any } => {
19537 break (event, allow_any)
19538 }
19539 ElementHandlerOutput::Continue { event, .. } => event,
19540 }
19541 }
19542 (s @ S::Done__(_), event) => {
19543 *self.state__ = s;
19544 break (DeserializerEvent::Continue(event), false);
19545 }
19546 (state, event) => {
19547 *self.state__ = state;
19548 break (DeserializerEvent::Break(event), false);
19549 }
19550 }
19551 };
19552 let artifact = if matches!(&*self.state__, S::Done__(_)) {
19553 DeserializerArtifact::Data(self.finish(helper)?)
19554 } else {
19555 DeserializerArtifact::Deserializer(self)
19556 };
19557 Ok(DeserializerOutput {
19558 artifact,
19559 event,
19560 allow_any,
19561 })
19562 }
19563 fn finish(self, helper: &mut DeserializeHelper) -> Result<super::Facet, Error> {
19564 FacetDeserializer::finish_state(helper, *self.state__)
19565 }
19566 }
19567 #[derive(Debug)]
19568 pub struct RestrictionTypeDeserializer {
19569 id: Option<String>,
19570 base: QName,
19571 content: Vec<super::RestrictionTypeContent>,
19572 state__: Box<RestrictionTypeDeserializerState>,
19573 }
19574 #[derive(Debug)]
19575 enum RestrictionTypeDeserializerState {
19576 Init__,
19577 Next__,
19578 Content__(<super::RestrictionTypeContent as WithDeserializer>::Deserializer),
19579 Unknown__,
19580 }
19581 impl RestrictionTypeDeserializer {
19582 fn from_bytes_start(
19583 helper: &mut DeserializeHelper,
19584 bytes_start: &BytesStart<'_>,
19585 ) -> Result<Box<Self>, Error> {
19586 let mut id: Option<String> = None;
19587 let mut base: Option<QName> = None;
19588 for attrib in helper.filter_xmlns_attributes(bytes_start) {
19589 let attrib = attrib?;
19590 if matches!(
19591 helper.resolve_local_name(attrib.key, &super::NS_XS),
19592 Some(b"id")
19593 ) {
19594 helper.read_attrib(&mut id, b"id", &attrib.value)?;
19595 } else if matches!(
19596 helper.resolve_local_name(attrib.key, &super::NS_XS),
19597 Some(b"base")
19598 ) {
19599 helper.read_attrib(&mut base, b"base", &attrib.value)?;
19600 }
19601 }
19602 Ok(Box::new(Self {
19603 id: id,
19604 base: base.ok_or_else(|| ErrorKind::MissingAttribute("base".into()))?,
19605 content: Vec::new(),
19606 state__: Box::new(RestrictionTypeDeserializerState::Init__),
19607 }))
19608 }
19609 fn finish_state(
19610 &mut self,
19611 helper: &mut DeserializeHelper,
19612 state: RestrictionTypeDeserializerState,
19613 ) -> Result<(), Error> {
19614 if let RestrictionTypeDeserializerState::Content__(deserializer) = state {
19615 self.store_content(deserializer.finish(helper)?)?;
19616 }
19617 Ok(())
19618 }
19619 fn store_content(&mut self, value: super::RestrictionTypeContent) -> Result<(), Error> {
19620 self.content.push(value);
19621 Ok(())
19622 }
19623 fn handle_content<'de>(
19624 &mut self,
19625 helper: &mut DeserializeHelper,
19626 output: DeserializerOutput<'de, super::RestrictionTypeContent>,
19627 fallback: &mut Option<RestrictionTypeDeserializerState>,
19628 ) -> Result<ElementHandlerOutput<'de>, Error> {
19629 let DeserializerOutput {
19630 artifact,
19631 event,
19632 allow_any,
19633 } = output;
19634 if artifact.is_none() {
19635 *self.state__ = fallback
19636 .take()
19637 .unwrap_or(RestrictionTypeDeserializerState::Next__);
19638 return Ok(ElementHandlerOutput::break_(event, allow_any));
19639 }
19640 if let Some(fallback) = fallback.take() {
19641 self.finish_state(helper, fallback)?;
19642 }
19643 Ok(match artifact {
19644 DeserializerArtifact::None => unreachable!(),
19645 DeserializerArtifact::Data(data) => {
19646 self.store_content(data)?;
19647 *self.state__ = RestrictionTypeDeserializerState::Next__;
19648 ElementHandlerOutput::from_event(event, allow_any)
19649 }
19650 DeserializerArtifact::Deserializer(deserializer) => {
19651 let ret = ElementHandlerOutput::from_event(event, allow_any);
19652 match &ret {
19653 ElementHandlerOutput::Break { .. } => {
19654 *self.state__ =
19655 RestrictionTypeDeserializerState::Content__(deserializer);
19656 }
19657 ElementHandlerOutput::Continue { .. } => {
19658 fallback.get_or_insert(RestrictionTypeDeserializerState::Content__(
19659 deserializer,
19660 ));
19661 *self.state__ = RestrictionTypeDeserializerState::Next__;
19662 }
19663 }
19664 ret
19665 }
19666 })
19667 }
19668 }
19669 impl<'de> Deserializer<'de, super::RestrictionType> for Box<RestrictionTypeDeserializer> {
19670 fn init(
19671 helper: &mut DeserializeHelper,
19672 event: Event<'de>,
19673 ) -> DeserializerResult<'de, super::RestrictionType> {
19674 helper.init_deserializer_from_start_event(
19675 event,
19676 RestrictionTypeDeserializer::from_bytes_start,
19677 )
19678 }
19679 fn next(
19680 mut self,
19681 helper: &mut DeserializeHelper,
19682 event: Event<'de>,
19683 ) -> DeserializerResult<'de, super::RestrictionType> {
19684 use RestrictionTypeDeserializerState as S;
19685 let mut event = event;
19686 let mut fallback = None;
19687 let (event, allow_any) = loop {
19688 let state = replace(&mut *self.state__, S::Unknown__);
19689 event = match (state, event) {
19690 (S::Unknown__, _) => unreachable!(),
19691 (S::Content__(deserializer), event) => {
19692 let output = deserializer.next(helper, event)?;
19693 match self.handle_content(helper, output, &mut fallback)? {
19694 ElementHandlerOutput::Break { event, allow_any } => {
19695 break (event, allow_any)
19696 }
19697 ElementHandlerOutput::Continue { event, .. } => event,
19698 }
19699 }
19700 (_, Event::End(_)) => {
19701 return Ok(DeserializerOutput {
19702 artifact: DeserializerArtifact::Data(self.finish(helper)?),
19703 event: DeserializerEvent::None,
19704 allow_any: false,
19705 });
19706 }
19707 (state @ (S::Init__ | S::Next__), event) => {
19708 fallback.get_or_insert(state);
19709 let output = < super :: RestrictionTypeContent as WithDeserializer > :: Deserializer :: init (helper , event) ? ;
19710 match self.handle_content(helper, output, &mut fallback)? {
19711 ElementHandlerOutput::Break { event, allow_any } => {
19712 break (event, allow_any)
19713 }
19714 ElementHandlerOutput::Continue { event, .. } => event,
19715 }
19716 }
19717 }
19718 };
19719 let artifact = DeserializerArtifact::Deserializer(self);
19720 Ok(DeserializerOutput {
19721 artifact,
19722 event,
19723 allow_any,
19724 })
19725 }
19726 fn finish(
19727 mut self,
19728 helper: &mut DeserializeHelper,
19729 ) -> Result<super::RestrictionType, Error> {
19730 let state = replace(
19731 &mut *self.state__,
19732 RestrictionTypeDeserializerState::Unknown__,
19733 );
19734 self.finish_state(helper, state)?;
19735 Ok(super::RestrictionType {
19736 id: self.id,
19737 base: self.base,
19738 content: self.content,
19739 })
19740 }
19741 }
19742 #[derive(Debug)]
19743 pub struct RestrictionTypeContentDeserializer {
19744 state__: Box<RestrictionTypeContentDeserializerState>,
19745 }
19746 #[derive(Debug)]
19747 pub enum RestrictionTypeContentDeserializerState {
19748 Init__,
19749 Annotation(
19750 Option<super::Annotation>,
19751 Option<<super::Annotation as WithDeserializer>::Deserializer>,
19752 ),
19753 OpenContent(
19754 Option<super::OpenContent>,
19755 Option<<super::OpenContent as WithDeserializer>::Deserializer>,
19756 ),
19757 Group(
19758 Option<super::GroupType>,
19759 Option<<super::GroupType as WithDeserializer>::Deserializer>,
19760 ),
19761 All(
19762 Option<super::GroupType>,
19763 Option<<super::GroupType as WithDeserializer>::Deserializer>,
19764 ),
19765 Choice(
19766 Option<super::GroupType>,
19767 Option<<super::GroupType as WithDeserializer>::Deserializer>,
19768 ),
19769 Sequence(
19770 Option<super::GroupType>,
19771 Option<<super::GroupType as WithDeserializer>::Deserializer>,
19772 ),
19773 SimpleType(
19774 Option<super::SimpleBaseType>,
19775 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
19776 ),
19777 Facet(
19778 Option<super::Facet>,
19779 Option<<super::Facet as WithDeserializer>::Deserializer>,
19780 ),
19781 Attribute(
19782 Option<super::AttributeType>,
19783 Option<<super::AttributeType as WithDeserializer>::Deserializer>,
19784 ),
19785 AttributeGroup(
19786 Option<super::AttributeGroupType>,
19787 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
19788 ),
19789 AnyAttribute(
19790 Option<super::AnyAttribute>,
19791 Option<<super::AnyAttribute as WithDeserializer>::Deserializer>,
19792 ),
19793 Assert(
19794 Option<super::AssertionType>,
19795 Option<<super::AssertionType as WithDeserializer>::Deserializer>,
19796 ),
19797 Done__(super::RestrictionTypeContent),
19798 Unknown__,
19799 }
19800 impl RestrictionTypeContentDeserializer {
19801 fn find_suitable<'de>(
19802 &mut self,
19803 helper: &mut DeserializeHelper,
19804 event: Event<'de>,
19805 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
19806 ) -> Result<ElementHandlerOutput<'de>, Error> {
19807 let mut event = event;
19808 if let Event::Start(x) | Event::Empty(x) = &event {
19809 if matches!(
19810 helper.resolve_local_name(x.name(), &super::NS_XS),
19811 Some(b"annotation")
19812 ) {
19813 let output =
19814 <super::Annotation as WithDeserializer>::Deserializer::init(helper, event)?;
19815 return self.handle_annotation(
19816 helper,
19817 Default::default(),
19818 output,
19819 &mut *fallback,
19820 );
19821 }
19822 if matches!(
19823 helper.resolve_local_name(x.name(), &super::NS_XS),
19824 Some(b"openContent")
19825 ) {
19826 let output = <super::OpenContent as WithDeserializer>::Deserializer::init(
19827 helper, event,
19828 )?;
19829 return self.handle_open_content(
19830 helper,
19831 Default::default(),
19832 output,
19833 &mut *fallback,
19834 );
19835 }
19836 if matches!(
19837 helper.resolve_local_name(x.name(), &super::NS_XS),
19838 Some(b"group")
19839 ) {
19840 let output =
19841 <super::GroupType as WithDeserializer>::Deserializer::init(helper, event)?;
19842 return self.handle_group(helper, Default::default(), output, &mut *fallback);
19843 }
19844 if matches!(
19845 helper.resolve_local_name(x.name(), &super::NS_XS),
19846 Some(b"all")
19847 ) {
19848 let output =
19849 <super::GroupType as WithDeserializer>::Deserializer::init(helper, event)?;
19850 return self.handle_all(helper, Default::default(), output, &mut *fallback);
19851 }
19852 if matches!(
19853 helper.resolve_local_name(x.name(), &super::NS_XS),
19854 Some(b"choice")
19855 ) {
19856 let output =
19857 <super::GroupType as WithDeserializer>::Deserializer::init(helper, event)?;
19858 return self.handle_choice(helper, Default::default(), output, &mut *fallback);
19859 }
19860 if matches!(
19861 helper.resolve_local_name(x.name(), &super::NS_XS),
19862 Some(b"sequence")
19863 ) {
19864 let output =
19865 <super::GroupType as WithDeserializer>::Deserializer::init(helper, event)?;
19866 return self.handle_sequence(
19867 helper,
19868 Default::default(),
19869 output,
19870 &mut *fallback,
19871 );
19872 }
19873 if matches!(
19874 helper.resolve_local_name(x.name(), &super::NS_XS),
19875 Some(b"simpleType")
19876 ) {
19877 let output = <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
19878 helper, event,
19879 )?;
19880 return self.handle_simple_type(
19881 helper,
19882 Default::default(),
19883 output,
19884 &mut *fallback,
19885 );
19886 }
19887 if matches!(
19888 helper.resolve_local_name(x.name(), &super::NS_XS),
19889 Some(b"attribute")
19890 ) {
19891 let output = <super::AttributeType as WithDeserializer>::Deserializer::init(
19892 helper, event,
19893 )?;
19894 return self.handle_attribute(
19895 helper,
19896 Default::default(),
19897 output,
19898 &mut *fallback,
19899 );
19900 }
19901 if matches!(
19902 helper.resolve_local_name(x.name(), &super::NS_XS),
19903 Some(b"attributeGroup")
19904 ) {
19905 let output =
19906 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
19907 helper, event,
19908 )?;
19909 return self.handle_attribute_group(
19910 helper,
19911 Default::default(),
19912 output,
19913 &mut *fallback,
19914 );
19915 }
19916 if matches!(
19917 helper.resolve_local_name(x.name(), &super::NS_XS),
19918 Some(b"anyAttribute")
19919 ) {
19920 let output = <super::AnyAttribute as WithDeserializer>::Deserializer::init(
19921 helper, event,
19922 )?;
19923 return self.handle_any_attribute(
19924 helper,
19925 Default::default(),
19926 output,
19927 &mut *fallback,
19928 );
19929 }
19930 if matches!(
19931 helper.resolve_local_name(x.name(), &super::NS_XS),
19932 Some(b"assert")
19933 ) {
19934 let output = <super::AssertionType as WithDeserializer>::Deserializer::init(
19935 helper, event,
19936 )?;
19937 return self.handle_assert(helper, Default::default(), output, &mut *fallback);
19938 }
19939 event = {
19940 let output =
19941 <super::Facet as WithDeserializer>::Deserializer::init(helper, event)?;
19942 match self.handle_facet(helper, Default::default(), output, &mut *fallback)? {
19943 ElementHandlerOutput::Continue { event, .. } => event,
19944 output => {
19945 return Ok(output);
19946 }
19947 }
19948 };
19949 }
19950 *self.state__ = fallback
19951 .take()
19952 .unwrap_or(RestrictionTypeContentDeserializerState::Init__);
19953 Ok(ElementHandlerOutput::return_to_parent(event, true))
19954 }
19955 fn finish_state(
19956 helper: &mut DeserializeHelper,
19957 state: RestrictionTypeContentDeserializerState,
19958 ) -> Result<super::RestrictionTypeContent, Error> {
19959 use RestrictionTypeContentDeserializerState as S;
19960 match state {
19961 S::Unknown__ => unreachable!(),
19962 S::Init__ => Err(ErrorKind::MissingContent.into()),
19963 S::Annotation(mut values, deserializer) => {
19964 if let Some(deserializer) = deserializer {
19965 let value = deserializer.finish(helper)?;
19966 RestrictionTypeContentDeserializer::store_annotation(&mut values, value)?;
19967 }
19968 Ok(super::RestrictionTypeContent::Annotation(
19969 values.ok_or_else(|| ErrorKind::MissingElement("annotation".into()))?,
19970 ))
19971 }
19972 S::OpenContent(mut values, deserializer) => {
19973 if let Some(deserializer) = deserializer {
19974 let value = deserializer.finish(helper)?;
19975 RestrictionTypeContentDeserializer::store_open_content(&mut values, value)?;
19976 }
19977 Ok(super::RestrictionTypeContent::OpenContent(
19978 values.ok_or_else(|| ErrorKind::MissingElement("openContent".into()))?,
19979 ))
19980 }
19981 S::Group(mut values, deserializer) => {
19982 if let Some(deserializer) = deserializer {
19983 let value = deserializer.finish(helper)?;
19984 RestrictionTypeContentDeserializer::store_group(&mut values, value)?;
19985 }
19986 Ok(super::RestrictionTypeContent::Group(values.ok_or_else(
19987 || ErrorKind::MissingElement("group".into()),
19988 )?))
19989 }
19990 S::All(mut values, deserializer) => {
19991 if let Some(deserializer) = deserializer {
19992 let value = deserializer.finish(helper)?;
19993 RestrictionTypeContentDeserializer::store_all(&mut values, value)?;
19994 }
19995 Ok(super::RestrictionTypeContent::All(
19996 values.ok_or_else(|| ErrorKind::MissingElement("all".into()))?,
19997 ))
19998 }
19999 S::Choice(mut values, deserializer) => {
20000 if let Some(deserializer) = deserializer {
20001 let value = deserializer.finish(helper)?;
20002 RestrictionTypeContentDeserializer::store_choice(&mut values, value)?;
20003 }
20004 Ok(super::RestrictionTypeContent::Choice(values.ok_or_else(
20005 || ErrorKind::MissingElement("choice".into()),
20006 )?))
20007 }
20008 S::Sequence(mut values, deserializer) => {
20009 if let Some(deserializer) = deserializer {
20010 let value = deserializer.finish(helper)?;
20011 RestrictionTypeContentDeserializer::store_sequence(&mut values, value)?;
20012 }
20013 Ok(super::RestrictionTypeContent::Sequence(values.ok_or_else(
20014 || ErrorKind::MissingElement("sequence".into()),
20015 )?))
20016 }
20017 S::SimpleType(mut values, deserializer) => {
20018 if let Some(deserializer) = deserializer {
20019 let value = deserializer.finish(helper)?;
20020 RestrictionTypeContentDeserializer::store_simple_type(&mut values, value)?;
20021 }
20022 Ok(super::RestrictionTypeContent::SimpleType(
20023 values.ok_or_else(|| ErrorKind::MissingElement("simpleType".into()))?,
20024 ))
20025 }
20026 S::Facet(mut values, deserializer) => {
20027 if let Some(deserializer) = deserializer {
20028 let value = deserializer.finish(helper)?;
20029 RestrictionTypeContentDeserializer::store_facet(&mut values, value)?;
20030 }
20031 Ok(super::RestrictionTypeContent::Facet(values.ok_or_else(
20032 || ErrorKind::MissingElement("facet".into()),
20033 )?))
20034 }
20035 S::Attribute(mut values, deserializer) => {
20036 if let Some(deserializer) = deserializer {
20037 let value = deserializer.finish(helper)?;
20038 RestrictionTypeContentDeserializer::store_attribute(&mut values, value)?;
20039 }
20040 Ok(super::RestrictionTypeContent::Attribute(
20041 values.ok_or_else(|| ErrorKind::MissingElement("attribute".into()))?,
20042 ))
20043 }
20044 S::AttributeGroup(mut values, deserializer) => {
20045 if let Some(deserializer) = deserializer {
20046 let value = deserializer.finish(helper)?;
20047 RestrictionTypeContentDeserializer::store_attribute_group(
20048 &mut values,
20049 value,
20050 )?;
20051 }
20052 Ok(super::RestrictionTypeContent::AttributeGroup(
20053 values.ok_or_else(|| ErrorKind::MissingElement("attributeGroup".into()))?,
20054 ))
20055 }
20056 S::AnyAttribute(mut values, deserializer) => {
20057 if let Some(deserializer) = deserializer {
20058 let value = deserializer.finish(helper)?;
20059 RestrictionTypeContentDeserializer::store_any_attribute(
20060 &mut values,
20061 value,
20062 )?;
20063 }
20064 Ok(super::RestrictionTypeContent::AnyAttribute(
20065 values.ok_or_else(|| ErrorKind::MissingElement("anyAttribute".into()))?,
20066 ))
20067 }
20068 S::Assert(mut values, deserializer) => {
20069 if let Some(deserializer) = deserializer {
20070 let value = deserializer.finish(helper)?;
20071 RestrictionTypeContentDeserializer::store_assert(&mut values, value)?;
20072 }
20073 Ok(super::RestrictionTypeContent::Assert(values.ok_or_else(
20074 || ErrorKind::MissingElement("assert".into()),
20075 )?))
20076 }
20077 S::Done__(data) => Ok(data),
20078 }
20079 }
20080 fn store_annotation(
20081 values: &mut Option<super::Annotation>,
20082 value: super::Annotation,
20083 ) -> Result<(), Error> {
20084 if values.is_some() {
20085 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20086 b"annotation",
20087 )))?;
20088 }
20089 *values = Some(value);
20090 Ok(())
20091 }
20092 fn store_open_content(
20093 values: &mut Option<super::OpenContent>,
20094 value: super::OpenContent,
20095 ) -> Result<(), Error> {
20096 if values.is_some() {
20097 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20098 b"openContent",
20099 )))?;
20100 }
20101 *values = Some(value);
20102 Ok(())
20103 }
20104 fn store_group(
20105 values: &mut Option<super::GroupType>,
20106 value: super::GroupType,
20107 ) -> Result<(), Error> {
20108 if values.is_some() {
20109 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20110 b"group",
20111 )))?;
20112 }
20113 *values = Some(value);
20114 Ok(())
20115 }
20116 fn store_all(
20117 values: &mut Option<super::GroupType>,
20118 value: super::GroupType,
20119 ) -> Result<(), Error> {
20120 if values.is_some() {
20121 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"all")))?;
20122 }
20123 *values = Some(value);
20124 Ok(())
20125 }
20126 fn store_choice(
20127 values: &mut Option<super::GroupType>,
20128 value: super::GroupType,
20129 ) -> Result<(), Error> {
20130 if values.is_some() {
20131 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20132 b"choice",
20133 )))?;
20134 }
20135 *values = Some(value);
20136 Ok(())
20137 }
20138 fn store_sequence(
20139 values: &mut Option<super::GroupType>,
20140 value: super::GroupType,
20141 ) -> Result<(), Error> {
20142 if values.is_some() {
20143 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20144 b"sequence",
20145 )))?;
20146 }
20147 *values = Some(value);
20148 Ok(())
20149 }
20150 fn store_simple_type(
20151 values: &mut Option<super::SimpleBaseType>,
20152 value: super::SimpleBaseType,
20153 ) -> Result<(), Error> {
20154 if values.is_some() {
20155 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20156 b"simpleType",
20157 )))?;
20158 }
20159 *values = Some(value);
20160 Ok(())
20161 }
20162 fn store_facet(
20163 values: &mut Option<super::Facet>,
20164 value: super::Facet,
20165 ) -> Result<(), Error> {
20166 if values.is_some() {
20167 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20168 b"facet",
20169 )))?;
20170 }
20171 *values = Some(value);
20172 Ok(())
20173 }
20174 fn store_attribute(
20175 values: &mut Option<super::AttributeType>,
20176 value: super::AttributeType,
20177 ) -> Result<(), Error> {
20178 if values.is_some() {
20179 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20180 b"attribute",
20181 )))?;
20182 }
20183 *values = Some(value);
20184 Ok(())
20185 }
20186 fn store_attribute_group(
20187 values: &mut Option<super::AttributeGroupType>,
20188 value: super::AttributeGroupType,
20189 ) -> Result<(), Error> {
20190 if values.is_some() {
20191 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20192 b"attributeGroup",
20193 )))?;
20194 }
20195 *values = Some(value);
20196 Ok(())
20197 }
20198 fn store_any_attribute(
20199 values: &mut Option<super::AnyAttribute>,
20200 value: super::AnyAttribute,
20201 ) -> Result<(), Error> {
20202 if values.is_some() {
20203 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20204 b"anyAttribute",
20205 )))?;
20206 }
20207 *values = Some(value);
20208 Ok(())
20209 }
20210 fn store_assert(
20211 values: &mut Option<super::AssertionType>,
20212 value: super::AssertionType,
20213 ) -> Result<(), Error> {
20214 if values.is_some() {
20215 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20216 b"assert",
20217 )))?;
20218 }
20219 *values = Some(value);
20220 Ok(())
20221 }
20222 fn handle_annotation<'de>(
20223 &mut self,
20224 helper: &mut DeserializeHelper,
20225 mut values: Option<super::Annotation>,
20226 output: DeserializerOutput<'de, super::Annotation>,
20227 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20228 ) -> Result<ElementHandlerOutput<'de>, Error> {
20229 let DeserializerOutput {
20230 artifact,
20231 event,
20232 allow_any,
20233 } = output;
20234 if artifact.is_none() {
20235 *self.state__ = match fallback.take() {
20236 None if values.is_none() => {
20237 *self.state__ = RestrictionTypeContentDeserializerState::Init__;
20238 return Ok(ElementHandlerOutput::from_event(event, allow_any));
20239 }
20240 None => RestrictionTypeContentDeserializerState::Annotation(values, None),
20241 Some(RestrictionTypeContentDeserializerState::Annotation(
20242 _,
20243 Some(deserializer),
20244 )) => RestrictionTypeContentDeserializerState::Annotation(
20245 values,
20246 Some(deserializer),
20247 ),
20248 _ => unreachable!(),
20249 };
20250 return Ok(ElementHandlerOutput::break_(event, allow_any));
20251 }
20252 match fallback.take() {
20253 None => (),
20254 Some(RestrictionTypeContentDeserializerState::Annotation(
20255 _,
20256 Some(deserializer),
20257 )) => {
20258 let data = deserializer.finish(helper)?;
20259 RestrictionTypeContentDeserializer::store_annotation(&mut values, data)?;
20260 }
20261 Some(_) => unreachable!(),
20262 }
20263 Ok(match artifact {
20264 DeserializerArtifact::None => unreachable!(),
20265 DeserializerArtifact::Data(data) => {
20266 RestrictionTypeContentDeserializer::store_annotation(&mut values, data)?;
20267 let data = RestrictionTypeContentDeserializer::finish_state(
20268 helper,
20269 RestrictionTypeContentDeserializerState::Annotation(values, None),
20270 )?;
20271 *self.state__ = RestrictionTypeContentDeserializerState::Done__(data);
20272 ElementHandlerOutput::Break { event, allow_any }
20273 }
20274 DeserializerArtifact::Deserializer(deserializer) => {
20275 *self.state__ = RestrictionTypeContentDeserializerState::Annotation(
20276 values,
20277 Some(deserializer),
20278 );
20279 ElementHandlerOutput::from_event_end(event, allow_any)
20280 }
20281 })
20282 }
20283 fn handle_open_content<'de>(
20284 &mut self,
20285 helper: &mut DeserializeHelper,
20286 mut values: Option<super::OpenContent>,
20287 output: DeserializerOutput<'de, super::OpenContent>,
20288 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20289 ) -> Result<ElementHandlerOutput<'de>, Error> {
20290 let DeserializerOutput {
20291 artifact,
20292 event,
20293 allow_any,
20294 } = output;
20295 if artifact.is_none() {
20296 *self.state__ = match fallback.take() {
20297 None if values.is_none() => {
20298 *self.state__ = RestrictionTypeContentDeserializerState::Init__;
20299 return Ok(ElementHandlerOutput::from_event(event, allow_any));
20300 }
20301 None => RestrictionTypeContentDeserializerState::OpenContent(values, None),
20302 Some(RestrictionTypeContentDeserializerState::OpenContent(
20303 _,
20304 Some(deserializer),
20305 )) => RestrictionTypeContentDeserializerState::OpenContent(
20306 values,
20307 Some(deserializer),
20308 ),
20309 _ => unreachable!(),
20310 };
20311 return Ok(ElementHandlerOutput::break_(event, allow_any));
20312 }
20313 match fallback.take() {
20314 None => (),
20315 Some(RestrictionTypeContentDeserializerState::OpenContent(
20316 _,
20317 Some(deserializer),
20318 )) => {
20319 let data = deserializer.finish(helper)?;
20320 RestrictionTypeContentDeserializer::store_open_content(&mut values, data)?;
20321 }
20322 Some(_) => unreachable!(),
20323 }
20324 Ok(match artifact {
20325 DeserializerArtifact::None => unreachable!(),
20326 DeserializerArtifact::Data(data) => {
20327 RestrictionTypeContentDeserializer::store_open_content(&mut values, data)?;
20328 let data = RestrictionTypeContentDeserializer::finish_state(
20329 helper,
20330 RestrictionTypeContentDeserializerState::OpenContent(values, None),
20331 )?;
20332 *self.state__ = RestrictionTypeContentDeserializerState::Done__(data);
20333 ElementHandlerOutput::Break { event, allow_any }
20334 }
20335 DeserializerArtifact::Deserializer(deserializer) => {
20336 *self.state__ = RestrictionTypeContentDeserializerState::OpenContent(
20337 values,
20338 Some(deserializer),
20339 );
20340 ElementHandlerOutput::from_event_end(event, allow_any)
20341 }
20342 })
20343 }
20344 fn handle_group<'de>(
20345 &mut self,
20346 helper: &mut DeserializeHelper,
20347 mut values: Option<super::GroupType>,
20348 output: DeserializerOutput<'de, super::GroupType>,
20349 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20350 ) -> Result<ElementHandlerOutput<'de>, Error> {
20351 let DeserializerOutput {
20352 artifact,
20353 event,
20354 allow_any,
20355 } = output;
20356 if artifact.is_none() {
20357 *self.state__ = match fallback.take() {
20358 None if values.is_none() => {
20359 *self.state__ = RestrictionTypeContentDeserializerState::Init__;
20360 return Ok(ElementHandlerOutput::from_event(event, allow_any));
20361 }
20362 None => RestrictionTypeContentDeserializerState::Group(values, None),
20363 Some(RestrictionTypeContentDeserializerState::Group(_, Some(deserializer))) => {
20364 RestrictionTypeContentDeserializerState::Group(values, Some(deserializer))
20365 }
20366 _ => unreachable!(),
20367 };
20368 return Ok(ElementHandlerOutput::break_(event, allow_any));
20369 }
20370 match fallback.take() {
20371 None => (),
20372 Some(RestrictionTypeContentDeserializerState::Group(_, Some(deserializer))) => {
20373 let data = deserializer.finish(helper)?;
20374 RestrictionTypeContentDeserializer::store_group(&mut values, data)?;
20375 }
20376 Some(_) => unreachable!(),
20377 }
20378 Ok(match artifact {
20379 DeserializerArtifact::None => unreachable!(),
20380 DeserializerArtifact::Data(data) => {
20381 RestrictionTypeContentDeserializer::store_group(&mut values, data)?;
20382 let data = RestrictionTypeContentDeserializer::finish_state(
20383 helper,
20384 RestrictionTypeContentDeserializerState::Group(values, None),
20385 )?;
20386 *self.state__ = RestrictionTypeContentDeserializerState::Done__(data);
20387 ElementHandlerOutput::Break { event, allow_any }
20388 }
20389 DeserializerArtifact::Deserializer(deserializer) => {
20390 *self.state__ =
20391 RestrictionTypeContentDeserializerState::Group(values, Some(deserializer));
20392 ElementHandlerOutput::from_event_end(event, allow_any)
20393 }
20394 })
20395 }
20396 fn handle_all<'de>(
20397 &mut self,
20398 helper: &mut DeserializeHelper,
20399 mut values: Option<super::GroupType>,
20400 output: DeserializerOutput<'de, super::GroupType>,
20401 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20402 ) -> Result<ElementHandlerOutput<'de>, Error> {
20403 let DeserializerOutput {
20404 artifact,
20405 event,
20406 allow_any,
20407 } = output;
20408 if artifact.is_none() {
20409 *self.state__ = match fallback.take() {
20410 None if values.is_none() => {
20411 *self.state__ = RestrictionTypeContentDeserializerState::Init__;
20412 return Ok(ElementHandlerOutput::from_event(event, allow_any));
20413 }
20414 None => RestrictionTypeContentDeserializerState::All(values, None),
20415 Some(RestrictionTypeContentDeserializerState::All(_, Some(deserializer))) => {
20416 RestrictionTypeContentDeserializerState::All(values, Some(deserializer))
20417 }
20418 _ => unreachable!(),
20419 };
20420 return Ok(ElementHandlerOutput::break_(event, allow_any));
20421 }
20422 match fallback.take() {
20423 None => (),
20424 Some(RestrictionTypeContentDeserializerState::All(_, Some(deserializer))) => {
20425 let data = deserializer.finish(helper)?;
20426 RestrictionTypeContentDeserializer::store_all(&mut values, data)?;
20427 }
20428 Some(_) => unreachable!(),
20429 }
20430 Ok(match artifact {
20431 DeserializerArtifact::None => unreachable!(),
20432 DeserializerArtifact::Data(data) => {
20433 RestrictionTypeContentDeserializer::store_all(&mut values, data)?;
20434 let data = RestrictionTypeContentDeserializer::finish_state(
20435 helper,
20436 RestrictionTypeContentDeserializerState::All(values, None),
20437 )?;
20438 *self.state__ = RestrictionTypeContentDeserializerState::Done__(data);
20439 ElementHandlerOutput::Break { event, allow_any }
20440 }
20441 DeserializerArtifact::Deserializer(deserializer) => {
20442 *self.state__ =
20443 RestrictionTypeContentDeserializerState::All(values, Some(deserializer));
20444 ElementHandlerOutput::from_event_end(event, allow_any)
20445 }
20446 })
20447 }
20448 fn handle_choice<'de>(
20449 &mut self,
20450 helper: &mut DeserializeHelper,
20451 mut values: Option<super::GroupType>,
20452 output: DeserializerOutput<'de, super::GroupType>,
20453 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20454 ) -> Result<ElementHandlerOutput<'de>, Error> {
20455 let DeserializerOutput {
20456 artifact,
20457 event,
20458 allow_any,
20459 } = output;
20460 if artifact.is_none() {
20461 *self.state__ = match fallback.take() {
20462 None if values.is_none() => {
20463 *self.state__ = RestrictionTypeContentDeserializerState::Init__;
20464 return Ok(ElementHandlerOutput::from_event(event, allow_any));
20465 }
20466 None => RestrictionTypeContentDeserializerState::Choice(values, None),
20467 Some(RestrictionTypeContentDeserializerState::Choice(
20468 _,
20469 Some(deserializer),
20470 )) => {
20471 RestrictionTypeContentDeserializerState::Choice(values, Some(deserializer))
20472 }
20473 _ => unreachable!(),
20474 };
20475 return Ok(ElementHandlerOutput::break_(event, allow_any));
20476 }
20477 match fallback.take() {
20478 None => (),
20479 Some(RestrictionTypeContentDeserializerState::Choice(_, Some(deserializer))) => {
20480 let data = deserializer.finish(helper)?;
20481 RestrictionTypeContentDeserializer::store_choice(&mut values, data)?;
20482 }
20483 Some(_) => unreachable!(),
20484 }
20485 Ok(match artifact {
20486 DeserializerArtifact::None => unreachable!(),
20487 DeserializerArtifact::Data(data) => {
20488 RestrictionTypeContentDeserializer::store_choice(&mut values, data)?;
20489 let data = RestrictionTypeContentDeserializer::finish_state(
20490 helper,
20491 RestrictionTypeContentDeserializerState::Choice(values, None),
20492 )?;
20493 *self.state__ = RestrictionTypeContentDeserializerState::Done__(data);
20494 ElementHandlerOutput::Break { event, allow_any }
20495 }
20496 DeserializerArtifact::Deserializer(deserializer) => {
20497 *self.state__ =
20498 RestrictionTypeContentDeserializerState::Choice(values, Some(deserializer));
20499 ElementHandlerOutput::from_event_end(event, allow_any)
20500 }
20501 })
20502 }
20503 fn handle_sequence<'de>(
20504 &mut self,
20505 helper: &mut DeserializeHelper,
20506 mut values: Option<super::GroupType>,
20507 output: DeserializerOutput<'de, super::GroupType>,
20508 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20509 ) -> Result<ElementHandlerOutput<'de>, Error> {
20510 let DeserializerOutput {
20511 artifact,
20512 event,
20513 allow_any,
20514 } = output;
20515 if artifact.is_none() {
20516 *self.state__ = match fallback.take() {
20517 None if values.is_none() => {
20518 *self.state__ = RestrictionTypeContentDeserializerState::Init__;
20519 return Ok(ElementHandlerOutput::from_event(event, allow_any));
20520 }
20521 None => RestrictionTypeContentDeserializerState::Sequence(values, None),
20522 Some(RestrictionTypeContentDeserializerState::Sequence(
20523 _,
20524 Some(deserializer),
20525 )) => RestrictionTypeContentDeserializerState::Sequence(
20526 values,
20527 Some(deserializer),
20528 ),
20529 _ => unreachable!(),
20530 };
20531 return Ok(ElementHandlerOutput::break_(event, allow_any));
20532 }
20533 match fallback.take() {
20534 None => (),
20535 Some(RestrictionTypeContentDeserializerState::Sequence(_, Some(deserializer))) => {
20536 let data = deserializer.finish(helper)?;
20537 RestrictionTypeContentDeserializer::store_sequence(&mut values, data)?;
20538 }
20539 Some(_) => unreachable!(),
20540 }
20541 Ok(match artifact {
20542 DeserializerArtifact::None => unreachable!(),
20543 DeserializerArtifact::Data(data) => {
20544 RestrictionTypeContentDeserializer::store_sequence(&mut values, data)?;
20545 let data = RestrictionTypeContentDeserializer::finish_state(
20546 helper,
20547 RestrictionTypeContentDeserializerState::Sequence(values, None),
20548 )?;
20549 *self.state__ = RestrictionTypeContentDeserializerState::Done__(data);
20550 ElementHandlerOutput::Break { event, allow_any }
20551 }
20552 DeserializerArtifact::Deserializer(deserializer) => {
20553 *self.state__ = RestrictionTypeContentDeserializerState::Sequence(
20554 values,
20555 Some(deserializer),
20556 );
20557 ElementHandlerOutput::from_event_end(event, allow_any)
20558 }
20559 })
20560 }
20561 fn handle_simple_type<'de>(
20562 &mut self,
20563 helper: &mut DeserializeHelper,
20564 mut values: Option<super::SimpleBaseType>,
20565 output: DeserializerOutput<'de, super::SimpleBaseType>,
20566 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20567 ) -> Result<ElementHandlerOutput<'de>, Error> {
20568 let DeserializerOutput {
20569 artifact,
20570 event,
20571 allow_any,
20572 } = output;
20573 if artifact.is_none() {
20574 *self.state__ = match fallback.take() {
20575 None if values.is_none() => {
20576 *self.state__ = RestrictionTypeContentDeserializerState::Init__;
20577 return Ok(ElementHandlerOutput::from_event(event, allow_any));
20578 }
20579 None => RestrictionTypeContentDeserializerState::SimpleType(values, None),
20580 Some(RestrictionTypeContentDeserializerState::SimpleType(
20581 _,
20582 Some(deserializer),
20583 )) => RestrictionTypeContentDeserializerState::SimpleType(
20584 values,
20585 Some(deserializer),
20586 ),
20587 _ => unreachable!(),
20588 };
20589 return Ok(ElementHandlerOutput::break_(event, allow_any));
20590 }
20591 match fallback.take() {
20592 None => (),
20593 Some(RestrictionTypeContentDeserializerState::SimpleType(
20594 _,
20595 Some(deserializer),
20596 )) => {
20597 let data = deserializer.finish(helper)?;
20598 RestrictionTypeContentDeserializer::store_simple_type(&mut values, data)?;
20599 }
20600 Some(_) => unreachable!(),
20601 }
20602 Ok(match artifact {
20603 DeserializerArtifact::None => unreachable!(),
20604 DeserializerArtifact::Data(data) => {
20605 RestrictionTypeContentDeserializer::store_simple_type(&mut values, data)?;
20606 let data = RestrictionTypeContentDeserializer::finish_state(
20607 helper,
20608 RestrictionTypeContentDeserializerState::SimpleType(values, None),
20609 )?;
20610 *self.state__ = RestrictionTypeContentDeserializerState::Done__(data);
20611 ElementHandlerOutput::Break { event, allow_any }
20612 }
20613 DeserializerArtifact::Deserializer(deserializer) => {
20614 *self.state__ = RestrictionTypeContentDeserializerState::SimpleType(
20615 values,
20616 Some(deserializer),
20617 );
20618 ElementHandlerOutput::from_event_end(event, allow_any)
20619 }
20620 })
20621 }
20622 fn handle_facet<'de>(
20623 &mut self,
20624 helper: &mut DeserializeHelper,
20625 mut values: Option<super::Facet>,
20626 output: DeserializerOutput<'de, super::Facet>,
20627 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20628 ) -> Result<ElementHandlerOutput<'de>, Error> {
20629 let DeserializerOutput {
20630 artifact,
20631 event,
20632 allow_any,
20633 } = output;
20634 if artifact.is_none() {
20635 *self.state__ = match fallback.take() {
20636 None if values.is_none() => {
20637 *self.state__ = RestrictionTypeContentDeserializerState::Init__;
20638 return Ok(ElementHandlerOutput::from_event(event, allow_any));
20639 }
20640 None => RestrictionTypeContentDeserializerState::Facet(values, None),
20641 Some(RestrictionTypeContentDeserializerState::Facet(_, Some(deserializer))) => {
20642 RestrictionTypeContentDeserializerState::Facet(values, Some(deserializer))
20643 }
20644 _ => unreachable!(),
20645 };
20646 return Ok(ElementHandlerOutput::break_(event, allow_any));
20647 }
20648 match fallback.take() {
20649 None => (),
20650 Some(RestrictionTypeContentDeserializerState::Facet(_, Some(deserializer))) => {
20651 let data = deserializer.finish(helper)?;
20652 RestrictionTypeContentDeserializer::store_facet(&mut values, data)?;
20653 }
20654 Some(_) => unreachable!(),
20655 }
20656 Ok(match artifact {
20657 DeserializerArtifact::None => unreachable!(),
20658 DeserializerArtifact::Data(data) => {
20659 RestrictionTypeContentDeserializer::store_facet(&mut values, data)?;
20660 let data = RestrictionTypeContentDeserializer::finish_state(
20661 helper,
20662 RestrictionTypeContentDeserializerState::Facet(values, None),
20663 )?;
20664 *self.state__ = RestrictionTypeContentDeserializerState::Done__(data);
20665 ElementHandlerOutput::Break { event, allow_any }
20666 }
20667 DeserializerArtifact::Deserializer(deserializer) => {
20668 *self.state__ =
20669 RestrictionTypeContentDeserializerState::Facet(values, Some(deserializer));
20670 ElementHandlerOutput::from_event_end(event, allow_any)
20671 }
20672 })
20673 }
20674 fn handle_attribute<'de>(
20675 &mut self,
20676 helper: &mut DeserializeHelper,
20677 mut values: Option<super::AttributeType>,
20678 output: DeserializerOutput<'de, super::AttributeType>,
20679 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20680 ) -> Result<ElementHandlerOutput<'de>, Error> {
20681 let DeserializerOutput {
20682 artifact,
20683 event,
20684 allow_any,
20685 } = output;
20686 if artifact.is_none() {
20687 *self.state__ = match fallback.take() {
20688 None if values.is_none() => {
20689 *self.state__ = RestrictionTypeContentDeserializerState::Init__;
20690 return Ok(ElementHandlerOutput::from_event(event, allow_any));
20691 }
20692 None => RestrictionTypeContentDeserializerState::Attribute(values, None),
20693 Some(RestrictionTypeContentDeserializerState::Attribute(
20694 _,
20695 Some(deserializer),
20696 )) => RestrictionTypeContentDeserializerState::Attribute(
20697 values,
20698 Some(deserializer),
20699 ),
20700 _ => unreachable!(),
20701 };
20702 return Ok(ElementHandlerOutput::break_(event, allow_any));
20703 }
20704 match fallback.take() {
20705 None => (),
20706 Some(RestrictionTypeContentDeserializerState::Attribute(_, Some(deserializer))) => {
20707 let data = deserializer.finish(helper)?;
20708 RestrictionTypeContentDeserializer::store_attribute(&mut values, data)?;
20709 }
20710 Some(_) => unreachable!(),
20711 }
20712 Ok(match artifact {
20713 DeserializerArtifact::None => unreachable!(),
20714 DeserializerArtifact::Data(data) => {
20715 RestrictionTypeContentDeserializer::store_attribute(&mut values, data)?;
20716 let data = RestrictionTypeContentDeserializer::finish_state(
20717 helper,
20718 RestrictionTypeContentDeserializerState::Attribute(values, None),
20719 )?;
20720 *self.state__ = RestrictionTypeContentDeserializerState::Done__(data);
20721 ElementHandlerOutput::Break { event, allow_any }
20722 }
20723 DeserializerArtifact::Deserializer(deserializer) => {
20724 *self.state__ = RestrictionTypeContentDeserializerState::Attribute(
20725 values,
20726 Some(deserializer),
20727 );
20728 ElementHandlerOutput::from_event_end(event, allow_any)
20729 }
20730 })
20731 }
20732 fn handle_attribute_group<'de>(
20733 &mut self,
20734 helper: &mut DeserializeHelper,
20735 mut values: Option<super::AttributeGroupType>,
20736 output: DeserializerOutput<'de, super::AttributeGroupType>,
20737 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20738 ) -> Result<ElementHandlerOutput<'de>, Error> {
20739 let DeserializerOutput {
20740 artifact,
20741 event,
20742 allow_any,
20743 } = output;
20744 if artifact.is_none() {
20745 *self.state__ = match fallback.take() {
20746 None if values.is_none() => {
20747 *self.state__ = RestrictionTypeContentDeserializerState::Init__;
20748 return Ok(ElementHandlerOutput::from_event(event, allow_any));
20749 }
20750 None => RestrictionTypeContentDeserializerState::AttributeGroup(values, None),
20751 Some(RestrictionTypeContentDeserializerState::AttributeGroup(
20752 _,
20753 Some(deserializer),
20754 )) => RestrictionTypeContentDeserializerState::AttributeGroup(
20755 values,
20756 Some(deserializer),
20757 ),
20758 _ => unreachable!(),
20759 };
20760 return Ok(ElementHandlerOutput::break_(event, allow_any));
20761 }
20762 match fallback.take() {
20763 None => (),
20764 Some(RestrictionTypeContentDeserializerState::AttributeGroup(
20765 _,
20766 Some(deserializer),
20767 )) => {
20768 let data = deserializer.finish(helper)?;
20769 RestrictionTypeContentDeserializer::store_attribute_group(&mut values, data)?;
20770 }
20771 Some(_) => unreachable!(),
20772 }
20773 Ok(match artifact {
20774 DeserializerArtifact::None => unreachable!(),
20775 DeserializerArtifact::Data(data) => {
20776 RestrictionTypeContentDeserializer::store_attribute_group(&mut values, data)?;
20777 let data = RestrictionTypeContentDeserializer::finish_state(
20778 helper,
20779 RestrictionTypeContentDeserializerState::AttributeGroup(values, None),
20780 )?;
20781 *self.state__ = RestrictionTypeContentDeserializerState::Done__(data);
20782 ElementHandlerOutput::Break { event, allow_any }
20783 }
20784 DeserializerArtifact::Deserializer(deserializer) => {
20785 *self.state__ = RestrictionTypeContentDeserializerState::AttributeGroup(
20786 values,
20787 Some(deserializer),
20788 );
20789 ElementHandlerOutput::from_event_end(event, allow_any)
20790 }
20791 })
20792 }
20793 fn handle_any_attribute<'de>(
20794 &mut self,
20795 helper: &mut DeserializeHelper,
20796 mut values: Option<super::AnyAttribute>,
20797 output: DeserializerOutput<'de, super::AnyAttribute>,
20798 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20799 ) -> Result<ElementHandlerOutput<'de>, Error> {
20800 let DeserializerOutput {
20801 artifact,
20802 event,
20803 allow_any,
20804 } = output;
20805 if artifact.is_none() {
20806 *self.state__ = match fallback.take() {
20807 None if values.is_none() => {
20808 *self.state__ = RestrictionTypeContentDeserializerState::Init__;
20809 return Ok(ElementHandlerOutput::from_event(event, allow_any));
20810 }
20811 None => RestrictionTypeContentDeserializerState::AnyAttribute(values, None),
20812 Some(RestrictionTypeContentDeserializerState::AnyAttribute(
20813 _,
20814 Some(deserializer),
20815 )) => RestrictionTypeContentDeserializerState::AnyAttribute(
20816 values,
20817 Some(deserializer),
20818 ),
20819 _ => unreachable!(),
20820 };
20821 return Ok(ElementHandlerOutput::break_(event, allow_any));
20822 }
20823 match fallback.take() {
20824 None => (),
20825 Some(RestrictionTypeContentDeserializerState::AnyAttribute(
20826 _,
20827 Some(deserializer),
20828 )) => {
20829 let data = deserializer.finish(helper)?;
20830 RestrictionTypeContentDeserializer::store_any_attribute(&mut values, data)?;
20831 }
20832 Some(_) => unreachable!(),
20833 }
20834 Ok(match artifact {
20835 DeserializerArtifact::None => unreachable!(),
20836 DeserializerArtifact::Data(data) => {
20837 RestrictionTypeContentDeserializer::store_any_attribute(&mut values, data)?;
20838 let data = RestrictionTypeContentDeserializer::finish_state(
20839 helper,
20840 RestrictionTypeContentDeserializerState::AnyAttribute(values, None),
20841 )?;
20842 *self.state__ = RestrictionTypeContentDeserializerState::Done__(data);
20843 ElementHandlerOutput::Break { event, allow_any }
20844 }
20845 DeserializerArtifact::Deserializer(deserializer) => {
20846 *self.state__ = RestrictionTypeContentDeserializerState::AnyAttribute(
20847 values,
20848 Some(deserializer),
20849 );
20850 ElementHandlerOutput::from_event_end(event, allow_any)
20851 }
20852 })
20853 }
20854 fn handle_assert<'de>(
20855 &mut self,
20856 helper: &mut DeserializeHelper,
20857 mut values: Option<super::AssertionType>,
20858 output: DeserializerOutput<'de, super::AssertionType>,
20859 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20860 ) -> Result<ElementHandlerOutput<'de>, Error> {
20861 let DeserializerOutput {
20862 artifact,
20863 event,
20864 allow_any,
20865 } = output;
20866 if artifact.is_none() {
20867 *self.state__ = match fallback.take() {
20868 None if values.is_none() => {
20869 *self.state__ = RestrictionTypeContentDeserializerState::Init__;
20870 return Ok(ElementHandlerOutput::from_event(event, allow_any));
20871 }
20872 None => RestrictionTypeContentDeserializerState::Assert(values, None),
20873 Some(RestrictionTypeContentDeserializerState::Assert(
20874 _,
20875 Some(deserializer),
20876 )) => {
20877 RestrictionTypeContentDeserializerState::Assert(values, Some(deserializer))
20878 }
20879 _ => unreachable!(),
20880 };
20881 return Ok(ElementHandlerOutput::break_(event, allow_any));
20882 }
20883 match fallback.take() {
20884 None => (),
20885 Some(RestrictionTypeContentDeserializerState::Assert(_, Some(deserializer))) => {
20886 let data = deserializer.finish(helper)?;
20887 RestrictionTypeContentDeserializer::store_assert(&mut values, data)?;
20888 }
20889 Some(_) => unreachable!(),
20890 }
20891 Ok(match artifact {
20892 DeserializerArtifact::None => unreachable!(),
20893 DeserializerArtifact::Data(data) => {
20894 RestrictionTypeContentDeserializer::store_assert(&mut values, data)?;
20895 let data = RestrictionTypeContentDeserializer::finish_state(
20896 helper,
20897 RestrictionTypeContentDeserializerState::Assert(values, None),
20898 )?;
20899 *self.state__ = RestrictionTypeContentDeserializerState::Done__(data);
20900 ElementHandlerOutput::Break { event, allow_any }
20901 }
20902 DeserializerArtifact::Deserializer(deserializer) => {
20903 *self.state__ =
20904 RestrictionTypeContentDeserializerState::Assert(values, Some(deserializer));
20905 ElementHandlerOutput::from_event_end(event, allow_any)
20906 }
20907 })
20908 }
20909 }
20910 impl<'de> Deserializer<'de, super::RestrictionTypeContent>
20911 for Box<RestrictionTypeContentDeserializer>
20912 {
20913 fn init(
20914 helper: &mut DeserializeHelper,
20915 event: Event<'de>,
20916 ) -> DeserializerResult<'de, super::RestrictionTypeContent> {
20917 let deserializer = Box::new(RestrictionTypeContentDeserializer {
20918 state__: Box::new(RestrictionTypeContentDeserializerState::Init__),
20919 });
20920 let mut output = deserializer.next(helper, event)?;
20921 output.artifact = match output.artifact {
20922 DeserializerArtifact::Deserializer(x)
20923 if matches!(&*x.state__, RestrictionTypeContentDeserializerState::Init__) =>
20924 {
20925 DeserializerArtifact::None
20926 }
20927 artifact => artifact,
20928 };
20929 Ok(output)
20930 }
20931 fn next(
20932 mut self,
20933 helper: &mut DeserializeHelper,
20934 event: Event<'de>,
20935 ) -> DeserializerResult<'de, super::RestrictionTypeContent> {
20936 use RestrictionTypeContentDeserializerState as S;
20937 let mut event = event;
20938 let mut fallback = None;
20939 let (event, allow_any) = loop {
20940 let state = replace(&mut *self.state__, S::Unknown__);
20941 event = match (state, event) {
20942 (S::Unknown__, _) => unreachable!(),
20943 (S::Annotation(values, Some(deserializer)), event) => {
20944 let output = deserializer.next(helper, event)?;
20945 match self.handle_annotation(helper, values, output, &mut fallback)? {
20946 ElementHandlerOutput::Break { event, allow_any } => {
20947 break (event, allow_any)
20948 }
20949 ElementHandlerOutput::Continue { event, .. } => event,
20950 }
20951 }
20952 (S::OpenContent(values, Some(deserializer)), event) => {
20953 let output = deserializer.next(helper, event)?;
20954 match self.handle_open_content(helper, values, output, &mut fallback)? {
20955 ElementHandlerOutput::Break { event, allow_any } => {
20956 break (event, allow_any)
20957 }
20958 ElementHandlerOutput::Continue { event, .. } => event,
20959 }
20960 }
20961 (S::Group(values, Some(deserializer)), event) => {
20962 let output = deserializer.next(helper, event)?;
20963 match self.handle_group(helper, values, output, &mut fallback)? {
20964 ElementHandlerOutput::Break { event, allow_any } => {
20965 break (event, allow_any)
20966 }
20967 ElementHandlerOutput::Continue { event, .. } => event,
20968 }
20969 }
20970 (S::All(values, Some(deserializer)), event) => {
20971 let output = deserializer.next(helper, event)?;
20972 match self.handle_all(helper, values, output, &mut fallback)? {
20973 ElementHandlerOutput::Break { event, allow_any } => {
20974 break (event, allow_any)
20975 }
20976 ElementHandlerOutput::Continue { event, .. } => event,
20977 }
20978 }
20979 (S::Choice(values, Some(deserializer)), event) => {
20980 let output = deserializer.next(helper, event)?;
20981 match self.handle_choice(helper, values, output, &mut fallback)? {
20982 ElementHandlerOutput::Break { event, allow_any } => {
20983 break (event, allow_any)
20984 }
20985 ElementHandlerOutput::Continue { event, .. } => event,
20986 }
20987 }
20988 (S::Sequence(values, Some(deserializer)), event) => {
20989 let output = deserializer.next(helper, event)?;
20990 match self.handle_sequence(helper, values, output, &mut fallback)? {
20991 ElementHandlerOutput::Break { event, allow_any } => {
20992 break (event, allow_any)
20993 }
20994 ElementHandlerOutput::Continue { event, .. } => event,
20995 }
20996 }
20997 (S::SimpleType(values, Some(deserializer)), event) => {
20998 let output = deserializer.next(helper, event)?;
20999 match self.handle_simple_type(helper, values, output, &mut fallback)? {
21000 ElementHandlerOutput::Break { event, allow_any } => {
21001 break (event, allow_any)
21002 }
21003 ElementHandlerOutput::Continue { event, .. } => event,
21004 }
21005 }
21006 (S::Facet(values, Some(deserializer)), event) => {
21007 let output = deserializer.next(helper, event)?;
21008 match self.handle_facet(helper, values, output, &mut fallback)? {
21009 ElementHandlerOutput::Break { event, allow_any } => {
21010 break (event, allow_any)
21011 }
21012 ElementHandlerOutput::Continue { event, .. } => event,
21013 }
21014 }
21015 (S::Attribute(values, Some(deserializer)), event) => {
21016 let output = deserializer.next(helper, event)?;
21017 match self.handle_attribute(helper, values, output, &mut fallback)? {
21018 ElementHandlerOutput::Break { event, allow_any } => {
21019 break (event, allow_any)
21020 }
21021 ElementHandlerOutput::Continue { event, .. } => event,
21022 }
21023 }
21024 (S::AttributeGroup(values, Some(deserializer)), event) => {
21025 let output = deserializer.next(helper, event)?;
21026 match self.handle_attribute_group(helper, values, output, &mut fallback)? {
21027 ElementHandlerOutput::Break { event, allow_any } => {
21028 break (event, allow_any)
21029 }
21030 ElementHandlerOutput::Continue { event, .. } => event,
21031 }
21032 }
21033 (S::AnyAttribute(values, Some(deserializer)), event) => {
21034 let output = deserializer.next(helper, event)?;
21035 match self.handle_any_attribute(helper, values, output, &mut fallback)? {
21036 ElementHandlerOutput::Break { event, allow_any } => {
21037 break (event, allow_any)
21038 }
21039 ElementHandlerOutput::Continue { event, .. } => event,
21040 }
21041 }
21042 (S::Assert(values, Some(deserializer)), event) => {
21043 let output = deserializer.next(helper, event)?;
21044 match self.handle_assert(helper, values, output, &mut fallback)? {
21045 ElementHandlerOutput::Break { event, allow_any } => {
21046 break (event, allow_any)
21047 }
21048 ElementHandlerOutput::Continue { event, .. } => event,
21049 }
21050 }
21051 (state, event @ Event::End(_)) => {
21052 return Ok(DeserializerOutput {
21053 artifact: DeserializerArtifact::Data(
21054 RestrictionTypeContentDeserializer::finish_state(helper, state)?,
21055 ),
21056 event: DeserializerEvent::Continue(event),
21057 allow_any: false,
21058 });
21059 }
21060 (S::Init__, event) => match self.find_suitable(helper, event, &mut fallback)? {
21061 ElementHandlerOutput::Break { event, allow_any } => {
21062 break (event, allow_any)
21063 }
21064 ElementHandlerOutput::Continue { event, .. } => event,
21065 },
21066 (S::Annotation(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
21067 let output = helper.init_start_tag_deserializer(
21068 event,
21069 Some(&super::NS_XS),
21070 b"annotation",
21071 false,
21072 )?;
21073 match self.handle_annotation(helper, values, output, &mut fallback)? {
21074 ElementHandlerOutput::Break { event, allow_any } => {
21075 break (event, allow_any)
21076 }
21077 ElementHandlerOutput::Continue { event, .. } => event,
21078 }
21079 }
21080 (S::OpenContent(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
21081 let output = helper.init_start_tag_deserializer(
21082 event,
21083 Some(&super::NS_XS),
21084 b"openContent",
21085 false,
21086 )?;
21087 match self.handle_open_content(helper, values, output, &mut fallback)? {
21088 ElementHandlerOutput::Break { event, allow_any } => {
21089 break (event, allow_any)
21090 }
21091 ElementHandlerOutput::Continue { event, .. } => event,
21092 }
21093 }
21094 (S::Group(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
21095 let output = helper.init_start_tag_deserializer(
21096 event,
21097 Some(&super::NS_XS),
21098 b"group",
21099 true,
21100 )?;
21101 match self.handle_group(helper, values, output, &mut fallback)? {
21102 ElementHandlerOutput::Break { event, allow_any } => {
21103 break (event, allow_any)
21104 }
21105 ElementHandlerOutput::Continue { event, .. } => event,
21106 }
21107 }
21108 (S::All(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
21109 let output = helper.init_start_tag_deserializer(
21110 event,
21111 Some(&super::NS_XS),
21112 b"all",
21113 true,
21114 )?;
21115 match self.handle_all(helper, values, output, &mut fallback)? {
21116 ElementHandlerOutput::Break { event, allow_any } => {
21117 break (event, allow_any)
21118 }
21119 ElementHandlerOutput::Continue { event, .. } => event,
21120 }
21121 }
21122 (S::Choice(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
21123 let output = helper.init_start_tag_deserializer(
21124 event,
21125 Some(&super::NS_XS),
21126 b"choice",
21127 true,
21128 )?;
21129 match self.handle_choice(helper, values, output, &mut fallback)? {
21130 ElementHandlerOutput::Break { event, allow_any } => {
21131 break (event, allow_any)
21132 }
21133 ElementHandlerOutput::Continue { event, .. } => event,
21134 }
21135 }
21136 (S::Sequence(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
21137 let output = helper.init_start_tag_deserializer(
21138 event,
21139 Some(&super::NS_XS),
21140 b"sequence",
21141 true,
21142 )?;
21143 match self.handle_sequence(helper, values, output, &mut fallback)? {
21144 ElementHandlerOutput::Break { event, allow_any } => {
21145 break (event, allow_any)
21146 }
21147 ElementHandlerOutput::Continue { event, .. } => event,
21148 }
21149 }
21150 (S::SimpleType(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
21151 let output = helper.init_start_tag_deserializer(
21152 event,
21153 Some(&super::NS_XS),
21154 b"simpleType",
21155 true,
21156 )?;
21157 match self.handle_simple_type(helper, values, output, &mut fallback)? {
21158 ElementHandlerOutput::Break { event, allow_any } => {
21159 break (event, allow_any)
21160 }
21161 ElementHandlerOutput::Continue { event, .. } => event,
21162 }
21163 }
21164 (S::Facet(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
21165 let output =
21166 <super::Facet as WithDeserializer>::Deserializer::init(helper, event)?;
21167 match self.handle_facet(helper, values, output, &mut fallback)? {
21168 ElementHandlerOutput::Break { event, allow_any } => {
21169 break (event, allow_any)
21170 }
21171 ElementHandlerOutput::Continue { event, .. } => event,
21172 }
21173 }
21174 (S::Attribute(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
21175 let output = helper.init_start_tag_deserializer(
21176 event,
21177 Some(&super::NS_XS),
21178 b"attribute",
21179 false,
21180 )?;
21181 match self.handle_attribute(helper, values, output, &mut fallback)? {
21182 ElementHandlerOutput::Break { event, allow_any } => {
21183 break (event, allow_any)
21184 }
21185 ElementHandlerOutput::Continue { event, .. } => event,
21186 }
21187 }
21188 (
21189 S::AttributeGroup(values, None),
21190 event @ (Event::Start(_) | Event::Empty(_)),
21191 ) => {
21192 let output = helper.init_start_tag_deserializer(
21193 event,
21194 Some(&super::NS_XS),
21195 b"attributeGroup",
21196 false,
21197 )?;
21198 match self.handle_attribute_group(helper, values, output, &mut fallback)? {
21199 ElementHandlerOutput::Break { event, allow_any } => {
21200 break (event, allow_any)
21201 }
21202 ElementHandlerOutput::Continue { event, .. } => event,
21203 }
21204 }
21205 (
21206 S::AnyAttribute(values, None),
21207 event @ (Event::Start(_) | Event::Empty(_)),
21208 ) => {
21209 let output = helper.init_start_tag_deserializer(
21210 event,
21211 Some(&super::NS_XS),
21212 b"anyAttribute",
21213 false,
21214 )?;
21215 match self.handle_any_attribute(helper, values, output, &mut fallback)? {
21216 ElementHandlerOutput::Break { event, allow_any } => {
21217 break (event, allow_any)
21218 }
21219 ElementHandlerOutput::Continue { event, .. } => event,
21220 }
21221 }
21222 (S::Assert(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
21223 let output = helper.init_start_tag_deserializer(
21224 event,
21225 Some(&super::NS_XS),
21226 b"assert",
21227 false,
21228 )?;
21229 match self.handle_assert(helper, values, output, &mut fallback)? {
21230 ElementHandlerOutput::Break { event, allow_any } => {
21231 break (event, allow_any)
21232 }
21233 ElementHandlerOutput::Continue { event, .. } => event,
21234 }
21235 }
21236 (s @ S::Done__(_), event) => {
21237 *self.state__ = s;
21238 break (DeserializerEvent::Continue(event), false);
21239 }
21240 (state, event) => {
21241 *self.state__ = state;
21242 break (DeserializerEvent::Break(event), false);
21243 }
21244 }
21245 };
21246 let artifact = if matches!(&*self.state__, S::Done__(_)) {
21247 DeserializerArtifact::Data(self.finish(helper)?)
21248 } else {
21249 DeserializerArtifact::Deserializer(self)
21250 };
21251 Ok(DeserializerOutput {
21252 artifact,
21253 event,
21254 allow_any,
21255 })
21256 }
21257 fn finish(
21258 self,
21259 helper: &mut DeserializeHelper,
21260 ) -> Result<super::RestrictionTypeContent, Error> {
21261 RestrictionTypeContentDeserializer::finish_state(helper, *self.state__)
21262 }
21263 }
21264 #[derive(Debug)]
21265 pub struct ExtensionTypeDeserializer {
21266 id: Option<String>,
21267 base: QName,
21268 content: Vec<super::ExtensionTypeContent>,
21269 state__: Box<ExtensionTypeDeserializerState>,
21270 }
21271 #[derive(Debug)]
21272 enum ExtensionTypeDeserializerState {
21273 Init__,
21274 Next__,
21275 Content__(<super::ExtensionTypeContent as WithDeserializer>::Deserializer),
21276 Unknown__,
21277 }
21278 impl ExtensionTypeDeserializer {
21279 fn from_bytes_start(
21280 helper: &mut DeserializeHelper,
21281 bytes_start: &BytesStart<'_>,
21282 ) -> Result<Box<Self>, Error> {
21283 let mut id: Option<String> = None;
21284 let mut base: Option<QName> = None;
21285 for attrib in helper.filter_xmlns_attributes(bytes_start) {
21286 let attrib = attrib?;
21287 if matches!(
21288 helper.resolve_local_name(attrib.key, &super::NS_XS),
21289 Some(b"id")
21290 ) {
21291 helper.read_attrib(&mut id, b"id", &attrib.value)?;
21292 } else if matches!(
21293 helper.resolve_local_name(attrib.key, &super::NS_XS),
21294 Some(b"base")
21295 ) {
21296 helper.read_attrib(&mut base, b"base", &attrib.value)?;
21297 }
21298 }
21299 Ok(Box::new(Self {
21300 id: id,
21301 base: base.ok_or_else(|| ErrorKind::MissingAttribute("base".into()))?,
21302 content: Vec::new(),
21303 state__: Box::new(ExtensionTypeDeserializerState::Init__),
21304 }))
21305 }
21306 fn finish_state(
21307 &mut self,
21308 helper: &mut DeserializeHelper,
21309 state: ExtensionTypeDeserializerState,
21310 ) -> Result<(), Error> {
21311 if let ExtensionTypeDeserializerState::Content__(deserializer) = state {
21312 self.store_content(deserializer.finish(helper)?)?;
21313 }
21314 Ok(())
21315 }
21316 fn store_content(&mut self, value: super::ExtensionTypeContent) -> Result<(), Error> {
21317 self.content.push(value);
21318 Ok(())
21319 }
21320 fn handle_content<'de>(
21321 &mut self,
21322 helper: &mut DeserializeHelper,
21323 output: DeserializerOutput<'de, super::ExtensionTypeContent>,
21324 fallback: &mut Option<ExtensionTypeDeserializerState>,
21325 ) -> Result<ElementHandlerOutput<'de>, Error> {
21326 let DeserializerOutput {
21327 artifact,
21328 event,
21329 allow_any,
21330 } = output;
21331 if artifact.is_none() {
21332 *self.state__ = fallback
21333 .take()
21334 .unwrap_or(ExtensionTypeDeserializerState::Next__);
21335 return Ok(ElementHandlerOutput::break_(event, allow_any));
21336 }
21337 if let Some(fallback) = fallback.take() {
21338 self.finish_state(helper, fallback)?;
21339 }
21340 Ok(match artifact {
21341 DeserializerArtifact::None => unreachable!(),
21342 DeserializerArtifact::Data(data) => {
21343 self.store_content(data)?;
21344 *self.state__ = ExtensionTypeDeserializerState::Next__;
21345 ElementHandlerOutput::from_event(event, allow_any)
21346 }
21347 DeserializerArtifact::Deserializer(deserializer) => {
21348 let ret = ElementHandlerOutput::from_event(event, allow_any);
21349 match &ret {
21350 ElementHandlerOutput::Break { .. } => {
21351 *self.state__ = ExtensionTypeDeserializerState::Content__(deserializer);
21352 }
21353 ElementHandlerOutput::Continue { .. } => {
21354 fallback.get_or_insert(ExtensionTypeDeserializerState::Content__(
21355 deserializer,
21356 ));
21357 *self.state__ = ExtensionTypeDeserializerState::Next__;
21358 }
21359 }
21360 ret
21361 }
21362 })
21363 }
21364 }
21365 impl<'de> Deserializer<'de, super::ExtensionType> for Box<ExtensionTypeDeserializer> {
21366 fn init(
21367 helper: &mut DeserializeHelper,
21368 event: Event<'de>,
21369 ) -> DeserializerResult<'de, super::ExtensionType> {
21370 helper.init_deserializer_from_start_event(
21371 event,
21372 ExtensionTypeDeserializer::from_bytes_start,
21373 )
21374 }
21375 fn next(
21376 mut self,
21377 helper: &mut DeserializeHelper,
21378 event: Event<'de>,
21379 ) -> DeserializerResult<'de, super::ExtensionType> {
21380 use ExtensionTypeDeserializerState as S;
21381 let mut event = event;
21382 let mut fallback = None;
21383 let (event, allow_any) = loop {
21384 let state = replace(&mut *self.state__, S::Unknown__);
21385 event = match (state, event) {
21386 (S::Unknown__, _) => unreachable!(),
21387 (S::Content__(deserializer), event) => {
21388 let output = deserializer.next(helper, event)?;
21389 match self.handle_content(helper, output, &mut fallback)? {
21390 ElementHandlerOutput::Break { event, allow_any } => {
21391 break (event, allow_any)
21392 }
21393 ElementHandlerOutput::Continue { event, .. } => event,
21394 }
21395 }
21396 (_, Event::End(_)) => {
21397 return Ok(DeserializerOutput {
21398 artifact: DeserializerArtifact::Data(self.finish(helper)?),
21399 event: DeserializerEvent::None,
21400 allow_any: false,
21401 });
21402 }
21403 (state @ (S::Init__ | S::Next__), event) => {
21404 fallback.get_or_insert(state);
21405 let output =
21406 <super::ExtensionTypeContent as WithDeserializer>::Deserializer::init(
21407 helper, event,
21408 )?;
21409 match self.handle_content(helper, output, &mut fallback)? {
21410 ElementHandlerOutput::Break { event, allow_any } => {
21411 break (event, allow_any)
21412 }
21413 ElementHandlerOutput::Continue { event, .. } => event,
21414 }
21415 }
21416 }
21417 };
21418 let artifact = DeserializerArtifact::Deserializer(self);
21419 Ok(DeserializerOutput {
21420 artifact,
21421 event,
21422 allow_any,
21423 })
21424 }
21425 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::ExtensionType, Error> {
21426 let state = replace(
21427 &mut *self.state__,
21428 ExtensionTypeDeserializerState::Unknown__,
21429 );
21430 self.finish_state(helper, state)?;
21431 Ok(super::ExtensionType {
21432 id: self.id,
21433 base: self.base,
21434 content: self.content,
21435 })
21436 }
21437 }
21438 #[derive(Debug)]
21439 pub struct ExtensionTypeContentDeserializer {
21440 state__: Box<ExtensionTypeContentDeserializerState>,
21441 }
21442 #[derive(Debug)]
21443 pub enum ExtensionTypeContentDeserializerState {
21444 Init__,
21445 Annotation(
21446 Option<super::Annotation>,
21447 Option<<super::Annotation as WithDeserializer>::Deserializer>,
21448 ),
21449 OpenContent(
21450 Option<super::OpenContent>,
21451 Option<<super::OpenContent as WithDeserializer>::Deserializer>,
21452 ),
21453 Group(
21454 Option<super::GroupType>,
21455 Option<<super::GroupType as WithDeserializer>::Deserializer>,
21456 ),
21457 All(
21458 Option<super::GroupType>,
21459 Option<<super::GroupType as WithDeserializer>::Deserializer>,
21460 ),
21461 Choice(
21462 Option<super::GroupType>,
21463 Option<<super::GroupType as WithDeserializer>::Deserializer>,
21464 ),
21465 Sequence(
21466 Option<super::GroupType>,
21467 Option<<super::GroupType as WithDeserializer>::Deserializer>,
21468 ),
21469 Attribute(
21470 Option<super::AttributeType>,
21471 Option<<super::AttributeType as WithDeserializer>::Deserializer>,
21472 ),
21473 AttributeGroup(
21474 Option<super::AttributeGroupType>,
21475 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
21476 ),
21477 AnyAttribute(
21478 Option<super::AnyAttribute>,
21479 Option<<super::AnyAttribute as WithDeserializer>::Deserializer>,
21480 ),
21481 Assert(
21482 Option<super::AssertionType>,
21483 Option<<super::AssertionType as WithDeserializer>::Deserializer>,
21484 ),
21485 Done__(super::ExtensionTypeContent),
21486 Unknown__,
21487 }
21488 impl ExtensionTypeContentDeserializer {
21489 fn find_suitable<'de>(
21490 &mut self,
21491 helper: &mut DeserializeHelper,
21492 event: Event<'de>,
21493 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
21494 ) -> Result<ElementHandlerOutput<'de>, Error> {
21495 if let Event::Start(x) | Event::Empty(x) = &event {
21496 if matches!(
21497 helper.resolve_local_name(x.name(), &super::NS_XS),
21498 Some(b"annotation")
21499 ) {
21500 let output =
21501 <super::Annotation as WithDeserializer>::Deserializer::init(helper, event)?;
21502 return self.handle_annotation(
21503 helper,
21504 Default::default(),
21505 output,
21506 &mut *fallback,
21507 );
21508 }
21509 if matches!(
21510 helper.resolve_local_name(x.name(), &super::NS_XS),
21511 Some(b"openContent")
21512 ) {
21513 let output = <super::OpenContent as WithDeserializer>::Deserializer::init(
21514 helper, event,
21515 )?;
21516 return self.handle_open_content(
21517 helper,
21518 Default::default(),
21519 output,
21520 &mut *fallback,
21521 );
21522 }
21523 if matches!(
21524 helper.resolve_local_name(x.name(), &super::NS_XS),
21525 Some(b"group")
21526 ) {
21527 let output =
21528 <super::GroupType as WithDeserializer>::Deserializer::init(helper, event)?;
21529 return self.handle_group(helper, Default::default(), output, &mut *fallback);
21530 }
21531 if matches!(
21532 helper.resolve_local_name(x.name(), &super::NS_XS),
21533 Some(b"all")
21534 ) {
21535 let output =
21536 <super::GroupType as WithDeserializer>::Deserializer::init(helper, event)?;
21537 return self.handle_all(helper, Default::default(), output, &mut *fallback);
21538 }
21539 if matches!(
21540 helper.resolve_local_name(x.name(), &super::NS_XS),
21541 Some(b"choice")
21542 ) {
21543 let output =
21544 <super::GroupType as WithDeserializer>::Deserializer::init(helper, event)?;
21545 return self.handle_choice(helper, Default::default(), output, &mut *fallback);
21546 }
21547 if matches!(
21548 helper.resolve_local_name(x.name(), &super::NS_XS),
21549 Some(b"sequence")
21550 ) {
21551 let output =
21552 <super::GroupType as WithDeserializer>::Deserializer::init(helper, event)?;
21553 return self.handle_sequence(
21554 helper,
21555 Default::default(),
21556 output,
21557 &mut *fallback,
21558 );
21559 }
21560 if matches!(
21561 helper.resolve_local_name(x.name(), &super::NS_XS),
21562 Some(b"attribute")
21563 ) {
21564 let output = <super::AttributeType as WithDeserializer>::Deserializer::init(
21565 helper, event,
21566 )?;
21567 return self.handle_attribute(
21568 helper,
21569 Default::default(),
21570 output,
21571 &mut *fallback,
21572 );
21573 }
21574 if matches!(
21575 helper.resolve_local_name(x.name(), &super::NS_XS),
21576 Some(b"attributeGroup")
21577 ) {
21578 let output =
21579 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
21580 helper, event,
21581 )?;
21582 return self.handle_attribute_group(
21583 helper,
21584 Default::default(),
21585 output,
21586 &mut *fallback,
21587 );
21588 }
21589 if matches!(
21590 helper.resolve_local_name(x.name(), &super::NS_XS),
21591 Some(b"anyAttribute")
21592 ) {
21593 let output = <super::AnyAttribute as WithDeserializer>::Deserializer::init(
21594 helper, event,
21595 )?;
21596 return self.handle_any_attribute(
21597 helper,
21598 Default::default(),
21599 output,
21600 &mut *fallback,
21601 );
21602 }
21603 if matches!(
21604 helper.resolve_local_name(x.name(), &super::NS_XS),
21605 Some(b"assert")
21606 ) {
21607 let output = <super::AssertionType as WithDeserializer>::Deserializer::init(
21608 helper, event,
21609 )?;
21610 return self.handle_assert(helper, Default::default(), output, &mut *fallback);
21611 }
21612 }
21613 *self.state__ = fallback
21614 .take()
21615 .unwrap_or(ExtensionTypeContentDeserializerState::Init__);
21616 Ok(ElementHandlerOutput::return_to_parent(event, false))
21617 }
21618 fn finish_state(
21619 helper: &mut DeserializeHelper,
21620 state: ExtensionTypeContentDeserializerState,
21621 ) -> Result<super::ExtensionTypeContent, Error> {
21622 use ExtensionTypeContentDeserializerState as S;
21623 match state {
21624 S::Unknown__ => unreachable!(),
21625 S::Init__ => Err(ErrorKind::MissingContent.into()),
21626 S::Annotation(mut values, deserializer) => {
21627 if let Some(deserializer) = deserializer {
21628 let value = deserializer.finish(helper)?;
21629 ExtensionTypeContentDeserializer::store_annotation(&mut values, value)?;
21630 }
21631 Ok(super::ExtensionTypeContent::Annotation(values.ok_or_else(
21632 || ErrorKind::MissingElement("annotation".into()),
21633 )?))
21634 }
21635 S::OpenContent(mut values, deserializer) => {
21636 if let Some(deserializer) = deserializer {
21637 let value = deserializer.finish(helper)?;
21638 ExtensionTypeContentDeserializer::store_open_content(&mut values, value)?;
21639 }
21640 Ok(super::ExtensionTypeContent::OpenContent(
21641 values.ok_or_else(|| ErrorKind::MissingElement("openContent".into()))?,
21642 ))
21643 }
21644 S::Group(mut values, deserializer) => {
21645 if let Some(deserializer) = deserializer {
21646 let value = deserializer.finish(helper)?;
21647 ExtensionTypeContentDeserializer::store_group(&mut values, value)?;
21648 }
21649 Ok(super::ExtensionTypeContent::Group(values.ok_or_else(
21650 || ErrorKind::MissingElement("group".into()),
21651 )?))
21652 }
21653 S::All(mut values, deserializer) => {
21654 if let Some(deserializer) = deserializer {
21655 let value = deserializer.finish(helper)?;
21656 ExtensionTypeContentDeserializer::store_all(&mut values, value)?;
21657 }
21658 Ok(super::ExtensionTypeContent::All(
21659 values.ok_or_else(|| ErrorKind::MissingElement("all".into()))?,
21660 ))
21661 }
21662 S::Choice(mut values, deserializer) => {
21663 if let Some(deserializer) = deserializer {
21664 let value = deserializer.finish(helper)?;
21665 ExtensionTypeContentDeserializer::store_choice(&mut values, value)?;
21666 }
21667 Ok(super::ExtensionTypeContent::Choice(values.ok_or_else(
21668 || ErrorKind::MissingElement("choice".into()),
21669 )?))
21670 }
21671 S::Sequence(mut values, deserializer) => {
21672 if let Some(deserializer) = deserializer {
21673 let value = deserializer.finish(helper)?;
21674 ExtensionTypeContentDeserializer::store_sequence(&mut values, value)?;
21675 }
21676 Ok(super::ExtensionTypeContent::Sequence(values.ok_or_else(
21677 || ErrorKind::MissingElement("sequence".into()),
21678 )?))
21679 }
21680 S::Attribute(mut values, deserializer) => {
21681 if let Some(deserializer) = deserializer {
21682 let value = deserializer.finish(helper)?;
21683 ExtensionTypeContentDeserializer::store_attribute(&mut values, value)?;
21684 }
21685 Ok(super::ExtensionTypeContent::Attribute(values.ok_or_else(
21686 || ErrorKind::MissingElement("attribute".into()),
21687 )?))
21688 }
21689 S::AttributeGroup(mut values, deserializer) => {
21690 if let Some(deserializer) = deserializer {
21691 let value = deserializer.finish(helper)?;
21692 ExtensionTypeContentDeserializer::store_attribute_group(
21693 &mut values,
21694 value,
21695 )?;
21696 }
21697 Ok(super::ExtensionTypeContent::AttributeGroup(
21698 values.ok_or_else(|| ErrorKind::MissingElement("attributeGroup".into()))?,
21699 ))
21700 }
21701 S::AnyAttribute(mut values, deserializer) => {
21702 if let Some(deserializer) = deserializer {
21703 let value = deserializer.finish(helper)?;
21704 ExtensionTypeContentDeserializer::store_any_attribute(&mut values, value)?;
21705 }
21706 Ok(super::ExtensionTypeContent::AnyAttribute(
21707 values.ok_or_else(|| ErrorKind::MissingElement("anyAttribute".into()))?,
21708 ))
21709 }
21710 S::Assert(mut values, deserializer) => {
21711 if let Some(deserializer) = deserializer {
21712 let value = deserializer.finish(helper)?;
21713 ExtensionTypeContentDeserializer::store_assert(&mut values, value)?;
21714 }
21715 Ok(super::ExtensionTypeContent::Assert(values.ok_or_else(
21716 || ErrorKind::MissingElement("assert".into()),
21717 )?))
21718 }
21719 S::Done__(data) => Ok(data),
21720 }
21721 }
21722 fn store_annotation(
21723 values: &mut Option<super::Annotation>,
21724 value: super::Annotation,
21725 ) -> Result<(), Error> {
21726 if values.is_some() {
21727 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21728 b"annotation",
21729 )))?;
21730 }
21731 *values = Some(value);
21732 Ok(())
21733 }
21734 fn store_open_content(
21735 values: &mut Option<super::OpenContent>,
21736 value: super::OpenContent,
21737 ) -> Result<(), Error> {
21738 if values.is_some() {
21739 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21740 b"openContent",
21741 )))?;
21742 }
21743 *values = Some(value);
21744 Ok(())
21745 }
21746 fn store_group(
21747 values: &mut Option<super::GroupType>,
21748 value: super::GroupType,
21749 ) -> Result<(), Error> {
21750 if values.is_some() {
21751 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21752 b"group",
21753 )))?;
21754 }
21755 *values = Some(value);
21756 Ok(())
21757 }
21758 fn store_all(
21759 values: &mut Option<super::GroupType>,
21760 value: super::GroupType,
21761 ) -> Result<(), Error> {
21762 if values.is_some() {
21763 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"all")))?;
21764 }
21765 *values = Some(value);
21766 Ok(())
21767 }
21768 fn store_choice(
21769 values: &mut Option<super::GroupType>,
21770 value: super::GroupType,
21771 ) -> Result<(), Error> {
21772 if values.is_some() {
21773 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21774 b"choice",
21775 )))?;
21776 }
21777 *values = Some(value);
21778 Ok(())
21779 }
21780 fn store_sequence(
21781 values: &mut Option<super::GroupType>,
21782 value: super::GroupType,
21783 ) -> Result<(), Error> {
21784 if values.is_some() {
21785 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21786 b"sequence",
21787 )))?;
21788 }
21789 *values = Some(value);
21790 Ok(())
21791 }
21792 fn store_attribute(
21793 values: &mut Option<super::AttributeType>,
21794 value: super::AttributeType,
21795 ) -> Result<(), Error> {
21796 if values.is_some() {
21797 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21798 b"attribute",
21799 )))?;
21800 }
21801 *values = Some(value);
21802 Ok(())
21803 }
21804 fn store_attribute_group(
21805 values: &mut Option<super::AttributeGroupType>,
21806 value: super::AttributeGroupType,
21807 ) -> Result<(), Error> {
21808 if values.is_some() {
21809 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21810 b"attributeGroup",
21811 )))?;
21812 }
21813 *values = Some(value);
21814 Ok(())
21815 }
21816 fn store_any_attribute(
21817 values: &mut Option<super::AnyAttribute>,
21818 value: super::AnyAttribute,
21819 ) -> Result<(), Error> {
21820 if values.is_some() {
21821 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21822 b"anyAttribute",
21823 )))?;
21824 }
21825 *values = Some(value);
21826 Ok(())
21827 }
21828 fn store_assert(
21829 values: &mut Option<super::AssertionType>,
21830 value: super::AssertionType,
21831 ) -> Result<(), Error> {
21832 if values.is_some() {
21833 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21834 b"assert",
21835 )))?;
21836 }
21837 *values = Some(value);
21838 Ok(())
21839 }
21840 fn handle_annotation<'de>(
21841 &mut self,
21842 helper: &mut DeserializeHelper,
21843 mut values: Option<super::Annotation>,
21844 output: DeserializerOutput<'de, super::Annotation>,
21845 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
21846 ) -> Result<ElementHandlerOutput<'de>, Error> {
21847 let DeserializerOutput {
21848 artifact,
21849 event,
21850 allow_any,
21851 } = output;
21852 if artifact.is_none() {
21853 *self.state__ = match fallback.take() {
21854 None if values.is_none() => {
21855 *self.state__ = ExtensionTypeContentDeserializerState::Init__;
21856 return Ok(ElementHandlerOutput::from_event(event, allow_any));
21857 }
21858 None => ExtensionTypeContentDeserializerState::Annotation(values, None),
21859 Some(ExtensionTypeContentDeserializerState::Annotation(
21860 _,
21861 Some(deserializer),
21862 )) => ExtensionTypeContentDeserializerState::Annotation(
21863 values,
21864 Some(deserializer),
21865 ),
21866 _ => unreachable!(),
21867 };
21868 return Ok(ElementHandlerOutput::break_(event, allow_any));
21869 }
21870 match fallback.take() {
21871 None => (),
21872 Some(ExtensionTypeContentDeserializerState::Annotation(_, Some(deserializer))) => {
21873 let data = deserializer.finish(helper)?;
21874 ExtensionTypeContentDeserializer::store_annotation(&mut values, data)?;
21875 }
21876 Some(_) => unreachable!(),
21877 }
21878 Ok(match artifact {
21879 DeserializerArtifact::None => unreachable!(),
21880 DeserializerArtifact::Data(data) => {
21881 ExtensionTypeContentDeserializer::store_annotation(&mut values, data)?;
21882 let data = ExtensionTypeContentDeserializer::finish_state(
21883 helper,
21884 ExtensionTypeContentDeserializerState::Annotation(values, None),
21885 )?;
21886 *self.state__ = ExtensionTypeContentDeserializerState::Done__(data);
21887 ElementHandlerOutput::Break { event, allow_any }
21888 }
21889 DeserializerArtifact::Deserializer(deserializer) => {
21890 *self.state__ = ExtensionTypeContentDeserializerState::Annotation(
21891 values,
21892 Some(deserializer),
21893 );
21894 ElementHandlerOutput::from_event_end(event, allow_any)
21895 }
21896 })
21897 }
21898 fn handle_open_content<'de>(
21899 &mut self,
21900 helper: &mut DeserializeHelper,
21901 mut values: Option<super::OpenContent>,
21902 output: DeserializerOutput<'de, super::OpenContent>,
21903 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
21904 ) -> Result<ElementHandlerOutput<'de>, Error> {
21905 let DeserializerOutput {
21906 artifact,
21907 event,
21908 allow_any,
21909 } = output;
21910 if artifact.is_none() {
21911 *self.state__ = match fallback.take() {
21912 None if values.is_none() => {
21913 *self.state__ = ExtensionTypeContentDeserializerState::Init__;
21914 return Ok(ElementHandlerOutput::from_event(event, allow_any));
21915 }
21916 None => ExtensionTypeContentDeserializerState::OpenContent(values, None),
21917 Some(ExtensionTypeContentDeserializerState::OpenContent(
21918 _,
21919 Some(deserializer),
21920 )) => ExtensionTypeContentDeserializerState::OpenContent(
21921 values,
21922 Some(deserializer),
21923 ),
21924 _ => unreachable!(),
21925 };
21926 return Ok(ElementHandlerOutput::break_(event, allow_any));
21927 }
21928 match fallback.take() {
21929 None => (),
21930 Some(ExtensionTypeContentDeserializerState::OpenContent(_, Some(deserializer))) => {
21931 let data = deserializer.finish(helper)?;
21932 ExtensionTypeContentDeserializer::store_open_content(&mut values, data)?;
21933 }
21934 Some(_) => unreachable!(),
21935 }
21936 Ok(match artifact {
21937 DeserializerArtifact::None => unreachable!(),
21938 DeserializerArtifact::Data(data) => {
21939 ExtensionTypeContentDeserializer::store_open_content(&mut values, data)?;
21940 let data = ExtensionTypeContentDeserializer::finish_state(
21941 helper,
21942 ExtensionTypeContentDeserializerState::OpenContent(values, None),
21943 )?;
21944 *self.state__ = ExtensionTypeContentDeserializerState::Done__(data);
21945 ElementHandlerOutput::Break { event, allow_any }
21946 }
21947 DeserializerArtifact::Deserializer(deserializer) => {
21948 *self.state__ = ExtensionTypeContentDeserializerState::OpenContent(
21949 values,
21950 Some(deserializer),
21951 );
21952 ElementHandlerOutput::from_event_end(event, allow_any)
21953 }
21954 })
21955 }
21956 fn handle_group<'de>(
21957 &mut self,
21958 helper: &mut DeserializeHelper,
21959 mut values: Option<super::GroupType>,
21960 output: DeserializerOutput<'de, super::GroupType>,
21961 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
21962 ) -> Result<ElementHandlerOutput<'de>, Error> {
21963 let DeserializerOutput {
21964 artifact,
21965 event,
21966 allow_any,
21967 } = output;
21968 if artifact.is_none() {
21969 *self.state__ = match fallback.take() {
21970 None if values.is_none() => {
21971 *self.state__ = ExtensionTypeContentDeserializerState::Init__;
21972 return Ok(ElementHandlerOutput::from_event(event, allow_any));
21973 }
21974 None => ExtensionTypeContentDeserializerState::Group(values, None),
21975 Some(ExtensionTypeContentDeserializerState::Group(_, Some(deserializer))) => {
21976 ExtensionTypeContentDeserializerState::Group(values, Some(deserializer))
21977 }
21978 _ => unreachable!(),
21979 };
21980 return Ok(ElementHandlerOutput::break_(event, allow_any));
21981 }
21982 match fallback.take() {
21983 None => (),
21984 Some(ExtensionTypeContentDeserializerState::Group(_, Some(deserializer))) => {
21985 let data = deserializer.finish(helper)?;
21986 ExtensionTypeContentDeserializer::store_group(&mut values, data)?;
21987 }
21988 Some(_) => unreachable!(),
21989 }
21990 Ok(match artifact {
21991 DeserializerArtifact::None => unreachable!(),
21992 DeserializerArtifact::Data(data) => {
21993 ExtensionTypeContentDeserializer::store_group(&mut values, data)?;
21994 let data = ExtensionTypeContentDeserializer::finish_state(
21995 helper,
21996 ExtensionTypeContentDeserializerState::Group(values, None),
21997 )?;
21998 *self.state__ = ExtensionTypeContentDeserializerState::Done__(data);
21999 ElementHandlerOutput::Break { event, allow_any }
22000 }
22001 DeserializerArtifact::Deserializer(deserializer) => {
22002 *self.state__ =
22003 ExtensionTypeContentDeserializerState::Group(values, Some(deserializer));
22004 ElementHandlerOutput::from_event_end(event, allow_any)
22005 }
22006 })
22007 }
22008 fn handle_all<'de>(
22009 &mut self,
22010 helper: &mut DeserializeHelper,
22011 mut values: Option<super::GroupType>,
22012 output: DeserializerOutput<'de, super::GroupType>,
22013 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
22014 ) -> Result<ElementHandlerOutput<'de>, Error> {
22015 let DeserializerOutput {
22016 artifact,
22017 event,
22018 allow_any,
22019 } = output;
22020 if artifact.is_none() {
22021 *self.state__ = match fallback.take() {
22022 None if values.is_none() => {
22023 *self.state__ = ExtensionTypeContentDeserializerState::Init__;
22024 return Ok(ElementHandlerOutput::from_event(event, allow_any));
22025 }
22026 None => ExtensionTypeContentDeserializerState::All(values, None),
22027 Some(ExtensionTypeContentDeserializerState::All(_, Some(deserializer))) => {
22028 ExtensionTypeContentDeserializerState::All(values, Some(deserializer))
22029 }
22030 _ => unreachable!(),
22031 };
22032 return Ok(ElementHandlerOutput::break_(event, allow_any));
22033 }
22034 match fallback.take() {
22035 None => (),
22036 Some(ExtensionTypeContentDeserializerState::All(_, Some(deserializer))) => {
22037 let data = deserializer.finish(helper)?;
22038 ExtensionTypeContentDeserializer::store_all(&mut values, data)?;
22039 }
22040 Some(_) => unreachable!(),
22041 }
22042 Ok(match artifact {
22043 DeserializerArtifact::None => unreachable!(),
22044 DeserializerArtifact::Data(data) => {
22045 ExtensionTypeContentDeserializer::store_all(&mut values, data)?;
22046 let data = ExtensionTypeContentDeserializer::finish_state(
22047 helper,
22048 ExtensionTypeContentDeserializerState::All(values, None),
22049 )?;
22050 *self.state__ = ExtensionTypeContentDeserializerState::Done__(data);
22051 ElementHandlerOutput::Break { event, allow_any }
22052 }
22053 DeserializerArtifact::Deserializer(deserializer) => {
22054 *self.state__ =
22055 ExtensionTypeContentDeserializerState::All(values, Some(deserializer));
22056 ElementHandlerOutput::from_event_end(event, allow_any)
22057 }
22058 })
22059 }
22060 fn handle_choice<'de>(
22061 &mut self,
22062 helper: &mut DeserializeHelper,
22063 mut values: Option<super::GroupType>,
22064 output: DeserializerOutput<'de, super::GroupType>,
22065 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
22066 ) -> Result<ElementHandlerOutput<'de>, Error> {
22067 let DeserializerOutput {
22068 artifact,
22069 event,
22070 allow_any,
22071 } = output;
22072 if artifact.is_none() {
22073 *self.state__ = match fallback.take() {
22074 None if values.is_none() => {
22075 *self.state__ = ExtensionTypeContentDeserializerState::Init__;
22076 return Ok(ElementHandlerOutput::from_event(event, allow_any));
22077 }
22078 None => ExtensionTypeContentDeserializerState::Choice(values, None),
22079 Some(ExtensionTypeContentDeserializerState::Choice(_, Some(deserializer))) => {
22080 ExtensionTypeContentDeserializerState::Choice(values, Some(deserializer))
22081 }
22082 _ => unreachable!(),
22083 };
22084 return Ok(ElementHandlerOutput::break_(event, allow_any));
22085 }
22086 match fallback.take() {
22087 None => (),
22088 Some(ExtensionTypeContentDeserializerState::Choice(_, Some(deserializer))) => {
22089 let data = deserializer.finish(helper)?;
22090 ExtensionTypeContentDeserializer::store_choice(&mut values, data)?;
22091 }
22092 Some(_) => unreachable!(),
22093 }
22094 Ok(match artifact {
22095 DeserializerArtifact::None => unreachable!(),
22096 DeserializerArtifact::Data(data) => {
22097 ExtensionTypeContentDeserializer::store_choice(&mut values, data)?;
22098 let data = ExtensionTypeContentDeserializer::finish_state(
22099 helper,
22100 ExtensionTypeContentDeserializerState::Choice(values, None),
22101 )?;
22102 *self.state__ = ExtensionTypeContentDeserializerState::Done__(data);
22103 ElementHandlerOutput::Break { event, allow_any }
22104 }
22105 DeserializerArtifact::Deserializer(deserializer) => {
22106 *self.state__ =
22107 ExtensionTypeContentDeserializerState::Choice(values, Some(deserializer));
22108 ElementHandlerOutput::from_event_end(event, allow_any)
22109 }
22110 })
22111 }
22112 fn handle_sequence<'de>(
22113 &mut self,
22114 helper: &mut DeserializeHelper,
22115 mut values: Option<super::GroupType>,
22116 output: DeserializerOutput<'de, super::GroupType>,
22117 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
22118 ) -> Result<ElementHandlerOutput<'de>, Error> {
22119 let DeserializerOutput {
22120 artifact,
22121 event,
22122 allow_any,
22123 } = output;
22124 if artifact.is_none() {
22125 *self.state__ = match fallback.take() {
22126 None if values.is_none() => {
22127 *self.state__ = ExtensionTypeContentDeserializerState::Init__;
22128 return Ok(ElementHandlerOutput::from_event(event, allow_any));
22129 }
22130 None => ExtensionTypeContentDeserializerState::Sequence(values, None),
22131 Some(ExtensionTypeContentDeserializerState::Sequence(
22132 _,
22133 Some(deserializer),
22134 )) => {
22135 ExtensionTypeContentDeserializerState::Sequence(values, Some(deserializer))
22136 }
22137 _ => unreachable!(),
22138 };
22139 return Ok(ElementHandlerOutput::break_(event, allow_any));
22140 }
22141 match fallback.take() {
22142 None => (),
22143 Some(ExtensionTypeContentDeserializerState::Sequence(_, Some(deserializer))) => {
22144 let data = deserializer.finish(helper)?;
22145 ExtensionTypeContentDeserializer::store_sequence(&mut values, data)?;
22146 }
22147 Some(_) => unreachable!(),
22148 }
22149 Ok(match artifact {
22150 DeserializerArtifact::None => unreachable!(),
22151 DeserializerArtifact::Data(data) => {
22152 ExtensionTypeContentDeserializer::store_sequence(&mut values, data)?;
22153 let data = ExtensionTypeContentDeserializer::finish_state(
22154 helper,
22155 ExtensionTypeContentDeserializerState::Sequence(values, None),
22156 )?;
22157 *self.state__ = ExtensionTypeContentDeserializerState::Done__(data);
22158 ElementHandlerOutput::Break { event, allow_any }
22159 }
22160 DeserializerArtifact::Deserializer(deserializer) => {
22161 *self.state__ =
22162 ExtensionTypeContentDeserializerState::Sequence(values, Some(deserializer));
22163 ElementHandlerOutput::from_event_end(event, allow_any)
22164 }
22165 })
22166 }
22167 fn handle_attribute<'de>(
22168 &mut self,
22169 helper: &mut DeserializeHelper,
22170 mut values: Option<super::AttributeType>,
22171 output: DeserializerOutput<'de, super::AttributeType>,
22172 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
22173 ) -> Result<ElementHandlerOutput<'de>, Error> {
22174 let DeserializerOutput {
22175 artifact,
22176 event,
22177 allow_any,
22178 } = output;
22179 if artifact.is_none() {
22180 *self.state__ = match fallback.take() {
22181 None if values.is_none() => {
22182 *self.state__ = ExtensionTypeContentDeserializerState::Init__;
22183 return Ok(ElementHandlerOutput::from_event(event, allow_any));
22184 }
22185 None => ExtensionTypeContentDeserializerState::Attribute(values, None),
22186 Some(ExtensionTypeContentDeserializerState::Attribute(
22187 _,
22188 Some(deserializer),
22189 )) => {
22190 ExtensionTypeContentDeserializerState::Attribute(values, Some(deserializer))
22191 }
22192 _ => unreachable!(),
22193 };
22194 return Ok(ElementHandlerOutput::break_(event, allow_any));
22195 }
22196 match fallback.take() {
22197 None => (),
22198 Some(ExtensionTypeContentDeserializerState::Attribute(_, Some(deserializer))) => {
22199 let data = deserializer.finish(helper)?;
22200 ExtensionTypeContentDeserializer::store_attribute(&mut values, data)?;
22201 }
22202 Some(_) => unreachable!(),
22203 }
22204 Ok(match artifact {
22205 DeserializerArtifact::None => unreachable!(),
22206 DeserializerArtifact::Data(data) => {
22207 ExtensionTypeContentDeserializer::store_attribute(&mut values, data)?;
22208 let data = ExtensionTypeContentDeserializer::finish_state(
22209 helper,
22210 ExtensionTypeContentDeserializerState::Attribute(values, None),
22211 )?;
22212 *self.state__ = ExtensionTypeContentDeserializerState::Done__(data);
22213 ElementHandlerOutput::Break { event, allow_any }
22214 }
22215 DeserializerArtifact::Deserializer(deserializer) => {
22216 *self.state__ = ExtensionTypeContentDeserializerState::Attribute(
22217 values,
22218 Some(deserializer),
22219 );
22220 ElementHandlerOutput::from_event_end(event, allow_any)
22221 }
22222 })
22223 }
22224 fn handle_attribute_group<'de>(
22225 &mut self,
22226 helper: &mut DeserializeHelper,
22227 mut values: Option<super::AttributeGroupType>,
22228 output: DeserializerOutput<'de, super::AttributeGroupType>,
22229 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
22230 ) -> Result<ElementHandlerOutput<'de>, Error> {
22231 let DeserializerOutput {
22232 artifact,
22233 event,
22234 allow_any,
22235 } = output;
22236 if artifact.is_none() {
22237 *self.state__ = match fallback.take() {
22238 None if values.is_none() => {
22239 *self.state__ = ExtensionTypeContentDeserializerState::Init__;
22240 return Ok(ElementHandlerOutput::from_event(event, allow_any));
22241 }
22242 None => ExtensionTypeContentDeserializerState::AttributeGroup(values, None),
22243 Some(ExtensionTypeContentDeserializerState::AttributeGroup(
22244 _,
22245 Some(deserializer),
22246 )) => ExtensionTypeContentDeserializerState::AttributeGroup(
22247 values,
22248 Some(deserializer),
22249 ),
22250 _ => unreachable!(),
22251 };
22252 return Ok(ElementHandlerOutput::break_(event, allow_any));
22253 }
22254 match fallback.take() {
22255 None => (),
22256 Some(ExtensionTypeContentDeserializerState::AttributeGroup(
22257 _,
22258 Some(deserializer),
22259 )) => {
22260 let data = deserializer.finish(helper)?;
22261 ExtensionTypeContentDeserializer::store_attribute_group(&mut values, data)?;
22262 }
22263 Some(_) => unreachable!(),
22264 }
22265 Ok(match artifact {
22266 DeserializerArtifact::None => unreachable!(),
22267 DeserializerArtifact::Data(data) => {
22268 ExtensionTypeContentDeserializer::store_attribute_group(&mut values, data)?;
22269 let data = ExtensionTypeContentDeserializer::finish_state(
22270 helper,
22271 ExtensionTypeContentDeserializerState::AttributeGroup(values, None),
22272 )?;
22273 *self.state__ = ExtensionTypeContentDeserializerState::Done__(data);
22274 ElementHandlerOutput::Break { event, allow_any }
22275 }
22276 DeserializerArtifact::Deserializer(deserializer) => {
22277 *self.state__ = ExtensionTypeContentDeserializerState::AttributeGroup(
22278 values,
22279 Some(deserializer),
22280 );
22281 ElementHandlerOutput::from_event_end(event, allow_any)
22282 }
22283 })
22284 }
22285 fn handle_any_attribute<'de>(
22286 &mut self,
22287 helper: &mut DeserializeHelper,
22288 mut values: Option<super::AnyAttribute>,
22289 output: DeserializerOutput<'de, super::AnyAttribute>,
22290 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
22291 ) -> Result<ElementHandlerOutput<'de>, Error> {
22292 let DeserializerOutput {
22293 artifact,
22294 event,
22295 allow_any,
22296 } = output;
22297 if artifact.is_none() {
22298 *self.state__ = match fallback.take() {
22299 None if values.is_none() => {
22300 *self.state__ = ExtensionTypeContentDeserializerState::Init__;
22301 return Ok(ElementHandlerOutput::from_event(event, allow_any));
22302 }
22303 None => ExtensionTypeContentDeserializerState::AnyAttribute(values, None),
22304 Some(ExtensionTypeContentDeserializerState::AnyAttribute(
22305 _,
22306 Some(deserializer),
22307 )) => ExtensionTypeContentDeserializerState::AnyAttribute(
22308 values,
22309 Some(deserializer),
22310 ),
22311 _ => unreachable!(),
22312 };
22313 return Ok(ElementHandlerOutput::break_(event, allow_any));
22314 }
22315 match fallback.take() {
22316 None => (),
22317 Some(ExtensionTypeContentDeserializerState::AnyAttribute(
22318 _,
22319 Some(deserializer),
22320 )) => {
22321 let data = deserializer.finish(helper)?;
22322 ExtensionTypeContentDeserializer::store_any_attribute(&mut values, data)?;
22323 }
22324 Some(_) => unreachable!(),
22325 }
22326 Ok(match artifact {
22327 DeserializerArtifact::None => unreachable!(),
22328 DeserializerArtifact::Data(data) => {
22329 ExtensionTypeContentDeserializer::store_any_attribute(&mut values, data)?;
22330 let data = ExtensionTypeContentDeserializer::finish_state(
22331 helper,
22332 ExtensionTypeContentDeserializerState::AnyAttribute(values, None),
22333 )?;
22334 *self.state__ = ExtensionTypeContentDeserializerState::Done__(data);
22335 ElementHandlerOutput::Break { event, allow_any }
22336 }
22337 DeserializerArtifact::Deserializer(deserializer) => {
22338 *self.state__ = ExtensionTypeContentDeserializerState::AnyAttribute(
22339 values,
22340 Some(deserializer),
22341 );
22342 ElementHandlerOutput::from_event_end(event, allow_any)
22343 }
22344 })
22345 }
22346 fn handle_assert<'de>(
22347 &mut self,
22348 helper: &mut DeserializeHelper,
22349 mut values: Option<super::AssertionType>,
22350 output: DeserializerOutput<'de, super::AssertionType>,
22351 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
22352 ) -> Result<ElementHandlerOutput<'de>, Error> {
22353 let DeserializerOutput {
22354 artifact,
22355 event,
22356 allow_any,
22357 } = output;
22358 if artifact.is_none() {
22359 *self.state__ = match fallback.take() {
22360 None if values.is_none() => {
22361 *self.state__ = ExtensionTypeContentDeserializerState::Init__;
22362 return Ok(ElementHandlerOutput::from_event(event, allow_any));
22363 }
22364 None => ExtensionTypeContentDeserializerState::Assert(values, None),
22365 Some(ExtensionTypeContentDeserializerState::Assert(_, Some(deserializer))) => {
22366 ExtensionTypeContentDeserializerState::Assert(values, Some(deserializer))
22367 }
22368 _ => unreachable!(),
22369 };
22370 return Ok(ElementHandlerOutput::break_(event, allow_any));
22371 }
22372 match fallback.take() {
22373 None => (),
22374 Some(ExtensionTypeContentDeserializerState::Assert(_, Some(deserializer))) => {
22375 let data = deserializer.finish(helper)?;
22376 ExtensionTypeContentDeserializer::store_assert(&mut values, data)?;
22377 }
22378 Some(_) => unreachable!(),
22379 }
22380 Ok(match artifact {
22381 DeserializerArtifact::None => unreachable!(),
22382 DeserializerArtifact::Data(data) => {
22383 ExtensionTypeContentDeserializer::store_assert(&mut values, data)?;
22384 let data = ExtensionTypeContentDeserializer::finish_state(
22385 helper,
22386 ExtensionTypeContentDeserializerState::Assert(values, None),
22387 )?;
22388 *self.state__ = ExtensionTypeContentDeserializerState::Done__(data);
22389 ElementHandlerOutput::Break { event, allow_any }
22390 }
22391 DeserializerArtifact::Deserializer(deserializer) => {
22392 *self.state__ =
22393 ExtensionTypeContentDeserializerState::Assert(values, Some(deserializer));
22394 ElementHandlerOutput::from_event_end(event, allow_any)
22395 }
22396 })
22397 }
22398 }
22399 impl<'de> Deserializer<'de, super::ExtensionTypeContent> for Box<ExtensionTypeContentDeserializer> {
22400 fn init(
22401 helper: &mut DeserializeHelper,
22402 event: Event<'de>,
22403 ) -> DeserializerResult<'de, super::ExtensionTypeContent> {
22404 let deserializer = Box::new(ExtensionTypeContentDeserializer {
22405 state__: Box::new(ExtensionTypeContentDeserializerState::Init__),
22406 });
22407 let mut output = deserializer.next(helper, event)?;
22408 output.artifact = match output.artifact {
22409 DeserializerArtifact::Deserializer(x)
22410 if matches!(&*x.state__, ExtensionTypeContentDeserializerState::Init__) =>
22411 {
22412 DeserializerArtifact::None
22413 }
22414 artifact => artifact,
22415 };
22416 Ok(output)
22417 }
22418 fn next(
22419 mut self,
22420 helper: &mut DeserializeHelper,
22421 event: Event<'de>,
22422 ) -> DeserializerResult<'de, super::ExtensionTypeContent> {
22423 use ExtensionTypeContentDeserializerState as S;
22424 let mut event = event;
22425 let mut fallback = None;
22426 let (event, allow_any) = loop {
22427 let state = replace(&mut *self.state__, S::Unknown__);
22428 event = match (state, event) {
22429 (S::Unknown__, _) => unreachable!(),
22430 (S::Annotation(values, Some(deserializer)), event) => {
22431 let output = deserializer.next(helper, event)?;
22432 match self.handle_annotation(helper, values, output, &mut fallback)? {
22433 ElementHandlerOutput::Break { event, allow_any } => {
22434 break (event, allow_any)
22435 }
22436 ElementHandlerOutput::Continue { event, .. } => event,
22437 }
22438 }
22439 (S::OpenContent(values, Some(deserializer)), event) => {
22440 let output = deserializer.next(helper, event)?;
22441 match self.handle_open_content(helper, values, output, &mut fallback)? {
22442 ElementHandlerOutput::Break { event, allow_any } => {
22443 break (event, allow_any)
22444 }
22445 ElementHandlerOutput::Continue { event, .. } => event,
22446 }
22447 }
22448 (S::Group(values, Some(deserializer)), event) => {
22449 let output = deserializer.next(helper, event)?;
22450 match self.handle_group(helper, values, output, &mut fallback)? {
22451 ElementHandlerOutput::Break { event, allow_any } => {
22452 break (event, allow_any)
22453 }
22454 ElementHandlerOutput::Continue { event, .. } => event,
22455 }
22456 }
22457 (S::All(values, Some(deserializer)), event) => {
22458 let output = deserializer.next(helper, event)?;
22459 match self.handle_all(helper, values, output, &mut fallback)? {
22460 ElementHandlerOutput::Break { event, allow_any } => {
22461 break (event, allow_any)
22462 }
22463 ElementHandlerOutput::Continue { event, .. } => event,
22464 }
22465 }
22466 (S::Choice(values, Some(deserializer)), event) => {
22467 let output = deserializer.next(helper, event)?;
22468 match self.handle_choice(helper, values, output, &mut fallback)? {
22469 ElementHandlerOutput::Break { event, allow_any } => {
22470 break (event, allow_any)
22471 }
22472 ElementHandlerOutput::Continue { event, .. } => event,
22473 }
22474 }
22475 (S::Sequence(values, Some(deserializer)), event) => {
22476 let output = deserializer.next(helper, event)?;
22477 match self.handle_sequence(helper, values, output, &mut fallback)? {
22478 ElementHandlerOutput::Break { event, allow_any } => {
22479 break (event, allow_any)
22480 }
22481 ElementHandlerOutput::Continue { event, .. } => event,
22482 }
22483 }
22484 (S::Attribute(values, Some(deserializer)), event) => {
22485 let output = deserializer.next(helper, event)?;
22486 match self.handle_attribute(helper, values, output, &mut fallback)? {
22487 ElementHandlerOutput::Break { event, allow_any } => {
22488 break (event, allow_any)
22489 }
22490 ElementHandlerOutput::Continue { event, .. } => event,
22491 }
22492 }
22493 (S::AttributeGroup(values, Some(deserializer)), event) => {
22494 let output = deserializer.next(helper, event)?;
22495 match self.handle_attribute_group(helper, values, output, &mut fallback)? {
22496 ElementHandlerOutput::Break { event, allow_any } => {
22497 break (event, allow_any)
22498 }
22499 ElementHandlerOutput::Continue { event, .. } => event,
22500 }
22501 }
22502 (S::AnyAttribute(values, Some(deserializer)), event) => {
22503 let output = deserializer.next(helper, event)?;
22504 match self.handle_any_attribute(helper, values, output, &mut fallback)? {
22505 ElementHandlerOutput::Break { event, allow_any } => {
22506 break (event, allow_any)
22507 }
22508 ElementHandlerOutput::Continue { event, .. } => event,
22509 }
22510 }
22511 (S::Assert(values, Some(deserializer)), event) => {
22512 let output = deserializer.next(helper, event)?;
22513 match self.handle_assert(helper, values, output, &mut fallback)? {
22514 ElementHandlerOutput::Break { event, allow_any } => {
22515 break (event, allow_any)
22516 }
22517 ElementHandlerOutput::Continue { event, .. } => event,
22518 }
22519 }
22520 (state, event @ Event::End(_)) => {
22521 return Ok(DeserializerOutput {
22522 artifact: DeserializerArtifact::Data(
22523 ExtensionTypeContentDeserializer::finish_state(helper, state)?,
22524 ),
22525 event: DeserializerEvent::Continue(event),
22526 allow_any: false,
22527 });
22528 }
22529 (S::Init__, event) => match self.find_suitable(helper, event, &mut fallback)? {
22530 ElementHandlerOutput::Break { event, allow_any } => {
22531 break (event, allow_any)
22532 }
22533 ElementHandlerOutput::Continue { event, .. } => event,
22534 },
22535 (S::Annotation(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
22536 let output = helper.init_start_tag_deserializer(
22537 event,
22538 Some(&super::NS_XS),
22539 b"annotation",
22540 false,
22541 )?;
22542 match self.handle_annotation(helper, values, output, &mut fallback)? {
22543 ElementHandlerOutput::Break { event, allow_any } => {
22544 break (event, allow_any)
22545 }
22546 ElementHandlerOutput::Continue { event, .. } => event,
22547 }
22548 }
22549 (S::OpenContent(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
22550 let output = helper.init_start_tag_deserializer(
22551 event,
22552 Some(&super::NS_XS),
22553 b"openContent",
22554 false,
22555 )?;
22556 match self.handle_open_content(helper, values, output, &mut fallback)? {
22557 ElementHandlerOutput::Break { event, allow_any } => {
22558 break (event, allow_any)
22559 }
22560 ElementHandlerOutput::Continue { event, .. } => event,
22561 }
22562 }
22563 (S::Group(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
22564 let output = helper.init_start_tag_deserializer(
22565 event,
22566 Some(&super::NS_XS),
22567 b"group",
22568 true,
22569 )?;
22570 match self.handle_group(helper, values, output, &mut fallback)? {
22571 ElementHandlerOutput::Break { event, allow_any } => {
22572 break (event, allow_any)
22573 }
22574 ElementHandlerOutput::Continue { event, .. } => event,
22575 }
22576 }
22577 (S::All(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
22578 let output = helper.init_start_tag_deserializer(
22579 event,
22580 Some(&super::NS_XS),
22581 b"all",
22582 true,
22583 )?;
22584 match self.handle_all(helper, values, output, &mut fallback)? {
22585 ElementHandlerOutput::Break { event, allow_any } => {
22586 break (event, allow_any)
22587 }
22588 ElementHandlerOutput::Continue { event, .. } => event,
22589 }
22590 }
22591 (S::Choice(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
22592 let output = helper.init_start_tag_deserializer(
22593 event,
22594 Some(&super::NS_XS),
22595 b"choice",
22596 true,
22597 )?;
22598 match self.handle_choice(helper, values, output, &mut fallback)? {
22599 ElementHandlerOutput::Break { event, allow_any } => {
22600 break (event, allow_any)
22601 }
22602 ElementHandlerOutput::Continue { event, .. } => event,
22603 }
22604 }
22605 (S::Sequence(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
22606 let output = helper.init_start_tag_deserializer(
22607 event,
22608 Some(&super::NS_XS),
22609 b"sequence",
22610 true,
22611 )?;
22612 match self.handle_sequence(helper, values, output, &mut fallback)? {
22613 ElementHandlerOutput::Break { event, allow_any } => {
22614 break (event, allow_any)
22615 }
22616 ElementHandlerOutput::Continue { event, .. } => event,
22617 }
22618 }
22619 (S::Attribute(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
22620 let output = helper.init_start_tag_deserializer(
22621 event,
22622 Some(&super::NS_XS),
22623 b"attribute",
22624 false,
22625 )?;
22626 match self.handle_attribute(helper, values, output, &mut fallback)? {
22627 ElementHandlerOutput::Break { event, allow_any } => {
22628 break (event, allow_any)
22629 }
22630 ElementHandlerOutput::Continue { event, .. } => event,
22631 }
22632 }
22633 (
22634 S::AttributeGroup(values, None),
22635 event @ (Event::Start(_) | Event::Empty(_)),
22636 ) => {
22637 let output = helper.init_start_tag_deserializer(
22638 event,
22639 Some(&super::NS_XS),
22640 b"attributeGroup",
22641 false,
22642 )?;
22643 match self.handle_attribute_group(helper, values, output, &mut fallback)? {
22644 ElementHandlerOutput::Break { event, allow_any } => {
22645 break (event, allow_any)
22646 }
22647 ElementHandlerOutput::Continue { event, .. } => event,
22648 }
22649 }
22650 (
22651 S::AnyAttribute(values, None),
22652 event @ (Event::Start(_) | Event::Empty(_)),
22653 ) => {
22654 let output = helper.init_start_tag_deserializer(
22655 event,
22656 Some(&super::NS_XS),
22657 b"anyAttribute",
22658 false,
22659 )?;
22660 match self.handle_any_attribute(helper, values, output, &mut fallback)? {
22661 ElementHandlerOutput::Break { event, allow_any } => {
22662 break (event, allow_any)
22663 }
22664 ElementHandlerOutput::Continue { event, .. } => event,
22665 }
22666 }
22667 (S::Assert(values, None), event @ (Event::Start(_) | Event::Empty(_))) => {
22668 let output = helper.init_start_tag_deserializer(
22669 event,
22670 Some(&super::NS_XS),
22671 b"assert",
22672 false,
22673 )?;
22674 match self.handle_assert(helper, values, output, &mut fallback)? {
22675 ElementHandlerOutput::Break { event, allow_any } => {
22676 break (event, allow_any)
22677 }
22678 ElementHandlerOutput::Continue { event, .. } => event,
22679 }
22680 }
22681 (s @ S::Done__(_), event) => {
22682 *self.state__ = s;
22683 break (DeserializerEvent::Continue(event), false);
22684 }
22685 (state, event) => {
22686 *self.state__ = state;
22687 break (DeserializerEvent::Break(event), false);
22688 }
22689 }
22690 };
22691 let artifact = if matches!(&*self.state__, S::Done__(_)) {
22692 DeserializerArtifact::Data(self.finish(helper)?)
22693 } else {
22694 DeserializerArtifact::Deserializer(self)
22695 };
22696 Ok(DeserializerOutput {
22697 artifact,
22698 event,
22699 allow_any,
22700 })
22701 }
22702 fn finish(
22703 self,
22704 helper: &mut DeserializeHelper,
22705 ) -> Result<super::ExtensionTypeContent, Error> {
22706 ExtensionTypeContentDeserializer::finish_state(helper, *self.state__)
22707 }
22708 }
22709 #[derive(Debug)]
22710 pub struct FieldDeserializer {
22711 id: Option<String>,
22712 xpath: String,
22713 xpath_default_namespace: Option<super::XpathDefaultNamespaceType>,
22714 annotation: Option<super::Annotation>,
22715 state__: Box<FieldDeserializerState>,
22716 }
22717 #[derive(Debug)]
22718 enum FieldDeserializerState {
22719 Init__,
22720 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
22721 Done__,
22722 Unknown__,
22723 }
22724 impl FieldDeserializer {
22725 fn from_bytes_start(
22726 helper: &mut DeserializeHelper,
22727 bytes_start: &BytesStart<'_>,
22728 ) -> Result<Box<Self>, Error> {
22729 let mut id: Option<String> = None;
22730 let mut xpath: Option<String> = None;
22731 let mut xpath_default_namespace: Option<super::XpathDefaultNamespaceType> = None;
22732 for attrib in helper.filter_xmlns_attributes(bytes_start) {
22733 let attrib = attrib?;
22734 if matches!(
22735 helper.resolve_local_name(attrib.key, &super::NS_XS),
22736 Some(b"id")
22737 ) {
22738 helper.read_attrib(&mut id, b"id", &attrib.value)?;
22739 } else if matches!(
22740 helper.resolve_local_name(attrib.key, &super::NS_XS),
22741 Some(b"xpath")
22742 ) {
22743 helper.read_attrib(&mut xpath, b"xpath", &attrib.value)?;
22744 } else if matches!(
22745 helper.resolve_local_name(attrib.key, &super::NS_XS),
22746 Some(b"xpathDefaultNamespace")
22747 ) {
22748 helper.read_attrib(
22749 &mut xpath_default_namespace,
22750 b"xpathDefaultNamespace",
22751 &attrib.value,
22752 )?;
22753 }
22754 }
22755 Ok(Box::new(Self {
22756 id: id,
22757 xpath: xpath.ok_or_else(|| ErrorKind::MissingAttribute("xpath".into()))?,
22758 xpath_default_namespace: xpath_default_namespace,
22759 annotation: None,
22760 state__: Box::new(FieldDeserializerState::Init__),
22761 }))
22762 }
22763 fn finish_state(
22764 &mut self,
22765 helper: &mut DeserializeHelper,
22766 state: FieldDeserializerState,
22767 ) -> Result<(), Error> {
22768 use FieldDeserializerState as S;
22769 match state {
22770 S::Annotation(Some(deserializer)) => {
22771 self.store_annotation(deserializer.finish(helper)?)?
22772 }
22773 _ => (),
22774 }
22775 Ok(())
22776 }
22777 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
22778 if self.annotation.is_some() {
22779 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
22780 b"annotation",
22781 )))?;
22782 }
22783 self.annotation = Some(value);
22784 Ok(())
22785 }
22786 fn handle_annotation<'de>(
22787 &mut self,
22788 helper: &mut DeserializeHelper,
22789 output: DeserializerOutput<'de, super::Annotation>,
22790 fallback: &mut Option<FieldDeserializerState>,
22791 ) -> Result<ElementHandlerOutput<'de>, Error> {
22792 let DeserializerOutput {
22793 artifact,
22794 event,
22795 allow_any,
22796 } = output;
22797 if artifact.is_none() {
22798 fallback.get_or_insert(FieldDeserializerState::Annotation(None));
22799 *self.state__ = FieldDeserializerState::Done__;
22800 return Ok(ElementHandlerOutput::from_event(event, allow_any));
22801 }
22802 if let Some(fallback) = fallback.take() {
22803 self.finish_state(helper, fallback)?;
22804 }
22805 Ok(match artifact {
22806 DeserializerArtifact::None => unreachable!(),
22807 DeserializerArtifact::Data(data) => {
22808 self.store_annotation(data)?;
22809 *self.state__ = FieldDeserializerState::Done__;
22810 ElementHandlerOutput::from_event(event, allow_any)
22811 }
22812 DeserializerArtifact::Deserializer(deserializer) => {
22813 let ret = ElementHandlerOutput::from_event(event, allow_any);
22814 match &ret {
22815 ElementHandlerOutput::Continue { .. } => {
22816 fallback.get_or_insert(FieldDeserializerState::Annotation(Some(
22817 deserializer,
22818 )));
22819 *self.state__ = FieldDeserializerState::Done__;
22820 }
22821 ElementHandlerOutput::Break { .. } => {
22822 *self.state__ = FieldDeserializerState::Annotation(Some(deserializer));
22823 }
22824 }
22825 ret
22826 }
22827 })
22828 }
22829 }
22830 impl<'de> Deserializer<'de, super::Field> for Box<FieldDeserializer> {
22831 fn init(
22832 helper: &mut DeserializeHelper,
22833 event: Event<'de>,
22834 ) -> DeserializerResult<'de, super::Field> {
22835 helper.init_deserializer_from_start_event(event, FieldDeserializer::from_bytes_start)
22836 }
22837 fn next(
22838 mut self,
22839 helper: &mut DeserializeHelper,
22840 event: Event<'de>,
22841 ) -> DeserializerResult<'de, super::Field> {
22842 use FieldDeserializerState as S;
22843 let mut event = event;
22844 let mut fallback = None;
22845 let mut allow_any_element = false;
22846 let (event, allow_any) = loop {
22847 let state = replace(&mut *self.state__, S::Unknown__);
22848 event = match (state, event) {
22849 (S::Unknown__, _) => unreachable!(),
22850 (S::Annotation(Some(deserializer)), event) => {
22851 let output = deserializer.next(helper, event)?;
22852 match self.handle_annotation(helper, output, &mut fallback)? {
22853 ElementHandlerOutput::Continue { event, allow_any } => {
22854 allow_any_element = allow_any_element || allow_any;
22855 event
22856 }
22857 ElementHandlerOutput::Break { event, allow_any } => {
22858 break (event, allow_any)
22859 }
22860 }
22861 }
22862 (_, Event::End(_)) => {
22863 if let Some(fallback) = fallback.take() {
22864 self.finish_state(helper, fallback)?;
22865 }
22866 return Ok(DeserializerOutput {
22867 artifact: DeserializerArtifact::Data(self.finish(helper)?),
22868 event: DeserializerEvent::None,
22869 allow_any: false,
22870 });
22871 }
22872 (S::Init__, event) => {
22873 fallback.get_or_insert(S::Init__);
22874 *self.state__ = FieldDeserializerState::Annotation(None);
22875 event
22876 }
22877 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
22878 let output = helper.init_start_tag_deserializer(
22879 event,
22880 Some(&super::NS_XS),
22881 b"annotation",
22882 false,
22883 )?;
22884 match self.handle_annotation(helper, output, &mut fallback)? {
22885 ElementHandlerOutput::Continue { event, allow_any } => {
22886 allow_any_element = allow_any_element || allow_any;
22887 event
22888 }
22889 ElementHandlerOutput::Break { event, allow_any } => {
22890 break (event, allow_any)
22891 }
22892 }
22893 }
22894 (S::Done__, event) => {
22895 fallback.get_or_insert(S::Done__);
22896 break (DeserializerEvent::Continue(event), allow_any_element);
22897 }
22898 (state, event) => {
22899 *self.state__ = state;
22900 break (DeserializerEvent::Break(event), false);
22901 }
22902 }
22903 };
22904 if let Some(fallback) = fallback {
22905 *self.state__ = fallback;
22906 }
22907 Ok(DeserializerOutput {
22908 artifact: DeserializerArtifact::Deserializer(self),
22909 event,
22910 allow_any,
22911 })
22912 }
22913 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::Field, Error> {
22914 let state = replace(&mut *self.state__, FieldDeserializerState::Unknown__);
22915 self.finish_state(helper, state)?;
22916 Ok(super::Field {
22917 id: self.id,
22918 xpath: self.xpath,
22919 xpath_default_namespace: self.xpath_default_namespace,
22920 annotation: self.annotation,
22921 })
22922 }
22923 }
22924 #[derive(Debug)]
22925 pub struct FacetTypeDeserializer {
22926 id: Option<String>,
22927 value: String,
22928 fixed: bool,
22929 annotation: Option<super::Annotation>,
22930 state__: Box<FacetTypeDeserializerState>,
22931 }
22932 #[derive(Debug)]
22933 enum FacetTypeDeserializerState {
22934 Init__,
22935 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
22936 Done__,
22937 Unknown__,
22938 }
22939 impl FacetTypeDeserializer {
22940 fn from_bytes_start(
22941 helper: &mut DeserializeHelper,
22942 bytes_start: &BytesStart<'_>,
22943 ) -> Result<Box<Self>, Error> {
22944 let mut id: Option<String> = None;
22945 let mut value: Option<String> = None;
22946 let mut fixed: Option<bool> = None;
22947 for attrib in helper.filter_xmlns_attributes(bytes_start) {
22948 let attrib = attrib?;
22949 if matches!(
22950 helper.resolve_local_name(attrib.key, &super::NS_XS),
22951 Some(b"id")
22952 ) {
22953 helper.read_attrib(&mut id, b"id", &attrib.value)?;
22954 } else if matches!(
22955 helper.resolve_local_name(attrib.key, &super::NS_XS),
22956 Some(b"value")
22957 ) {
22958 helper.read_attrib(&mut value, b"value", &attrib.value)?;
22959 } else if matches!(
22960 helper.resolve_local_name(attrib.key, &super::NS_XS),
22961 Some(b"fixed")
22962 ) {
22963 helper.read_attrib(&mut fixed, b"fixed", &attrib.value)?;
22964 }
22965 }
22966 Ok(Box::new(Self {
22967 id: id,
22968 value: value.ok_or_else(|| ErrorKind::MissingAttribute("value".into()))?,
22969 fixed: fixed.unwrap_or_else(super::FacetType::default_fixed),
22970 annotation: None,
22971 state__: Box::new(FacetTypeDeserializerState::Init__),
22972 }))
22973 }
22974 fn finish_state(
22975 &mut self,
22976 helper: &mut DeserializeHelper,
22977 state: FacetTypeDeserializerState,
22978 ) -> Result<(), Error> {
22979 use FacetTypeDeserializerState as S;
22980 match state {
22981 S::Annotation(Some(deserializer)) => {
22982 self.store_annotation(deserializer.finish(helper)?)?
22983 }
22984 _ => (),
22985 }
22986 Ok(())
22987 }
22988 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
22989 if self.annotation.is_some() {
22990 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
22991 b"annotation",
22992 )))?;
22993 }
22994 self.annotation = Some(value);
22995 Ok(())
22996 }
22997 fn handle_annotation<'de>(
22998 &mut self,
22999 helper: &mut DeserializeHelper,
23000 output: DeserializerOutput<'de, super::Annotation>,
23001 fallback: &mut Option<FacetTypeDeserializerState>,
23002 ) -> Result<ElementHandlerOutput<'de>, Error> {
23003 let DeserializerOutput {
23004 artifact,
23005 event,
23006 allow_any,
23007 } = output;
23008 if artifact.is_none() {
23009 fallback.get_or_insert(FacetTypeDeserializerState::Annotation(None));
23010 *self.state__ = FacetTypeDeserializerState::Done__;
23011 return Ok(ElementHandlerOutput::from_event(event, allow_any));
23012 }
23013 if let Some(fallback) = fallback.take() {
23014 self.finish_state(helper, fallback)?;
23015 }
23016 Ok(match artifact {
23017 DeserializerArtifact::None => unreachable!(),
23018 DeserializerArtifact::Data(data) => {
23019 self.store_annotation(data)?;
23020 *self.state__ = FacetTypeDeserializerState::Done__;
23021 ElementHandlerOutput::from_event(event, allow_any)
23022 }
23023 DeserializerArtifact::Deserializer(deserializer) => {
23024 let ret = ElementHandlerOutput::from_event(event, allow_any);
23025 match &ret {
23026 ElementHandlerOutput::Continue { .. } => {
23027 fallback.get_or_insert(FacetTypeDeserializerState::Annotation(Some(
23028 deserializer,
23029 )));
23030 *self.state__ = FacetTypeDeserializerState::Done__;
23031 }
23032 ElementHandlerOutput::Break { .. } => {
23033 *self.state__ =
23034 FacetTypeDeserializerState::Annotation(Some(deserializer));
23035 }
23036 }
23037 ret
23038 }
23039 })
23040 }
23041 }
23042 impl<'de> Deserializer<'de, super::FacetType> for Box<FacetTypeDeserializer> {
23043 fn init(
23044 helper: &mut DeserializeHelper,
23045 event: Event<'de>,
23046 ) -> DeserializerResult<'de, super::FacetType> {
23047 helper
23048 .init_deserializer_from_start_event(event, FacetTypeDeserializer::from_bytes_start)
23049 }
23050 fn next(
23051 mut self,
23052 helper: &mut DeserializeHelper,
23053 event: Event<'de>,
23054 ) -> DeserializerResult<'de, super::FacetType> {
23055 use FacetTypeDeserializerState as S;
23056 let mut event = event;
23057 let mut fallback = None;
23058 let mut allow_any_element = false;
23059 let (event, allow_any) = loop {
23060 let state = replace(&mut *self.state__, S::Unknown__);
23061 event = match (state, event) {
23062 (S::Unknown__, _) => unreachable!(),
23063 (S::Annotation(Some(deserializer)), event) => {
23064 let output = deserializer.next(helper, event)?;
23065 match self.handle_annotation(helper, output, &mut fallback)? {
23066 ElementHandlerOutput::Continue { event, allow_any } => {
23067 allow_any_element = allow_any_element || allow_any;
23068 event
23069 }
23070 ElementHandlerOutput::Break { event, allow_any } => {
23071 break (event, allow_any)
23072 }
23073 }
23074 }
23075 (_, Event::End(_)) => {
23076 if let Some(fallback) = fallback.take() {
23077 self.finish_state(helper, fallback)?;
23078 }
23079 return Ok(DeserializerOutput {
23080 artifact: DeserializerArtifact::Data(self.finish(helper)?),
23081 event: DeserializerEvent::None,
23082 allow_any: false,
23083 });
23084 }
23085 (S::Init__, event) => {
23086 fallback.get_or_insert(S::Init__);
23087 *self.state__ = FacetTypeDeserializerState::Annotation(None);
23088 event
23089 }
23090 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
23091 let output = helper.init_start_tag_deserializer(
23092 event,
23093 Some(&super::NS_XS),
23094 b"annotation",
23095 false,
23096 )?;
23097 match self.handle_annotation(helper, output, &mut fallback)? {
23098 ElementHandlerOutput::Continue { event, allow_any } => {
23099 allow_any_element = allow_any_element || allow_any;
23100 event
23101 }
23102 ElementHandlerOutput::Break { event, allow_any } => {
23103 break (event, allow_any)
23104 }
23105 }
23106 }
23107 (S::Done__, event) => {
23108 fallback.get_or_insert(S::Done__);
23109 break (DeserializerEvent::Continue(event), allow_any_element);
23110 }
23111 (state, event) => {
23112 *self.state__ = state;
23113 break (DeserializerEvent::Break(event), false);
23114 }
23115 }
23116 };
23117 if let Some(fallback) = fallback {
23118 *self.state__ = fallback;
23119 }
23120 Ok(DeserializerOutput {
23121 artifact: DeserializerArtifact::Deserializer(self),
23122 event,
23123 allow_any,
23124 })
23125 }
23126 fn finish(mut self, helper: &mut DeserializeHelper) -> Result<super::FacetType, Error> {
23127 let state = replace(&mut *self.state__, FacetTypeDeserializerState::Unknown__);
23128 self.finish_state(helper, state)?;
23129 Ok(super::FacetType {
23130 id: self.id,
23131 value: self.value,
23132 fixed: self.fixed,
23133 annotation: self.annotation,
23134 })
23135 }
23136 }
23137}