1use crate::{
2 quick_xml::{
3 DeserializeBytes, DeserializeReader, Error, ErrorKind, RawByteStr, WithDeserializer,
4 },
5 schema::Namespace,
6};
7pub const NS_XS: Namespace = Namespace::new_const(b"http://www.w3.org/2001/XMLSchema");
8pub const NS_XML: Namespace = Namespace::new_const(b"http://www.w3.org/XML/1998/namespace");
9#[derive(Debug, Clone, Eq, PartialEq)]
10pub struct Schema {
11 pub target_namespace: Option<String>,
12 pub version: Option<String>,
13 pub final_default: FullDerivationSetType,
14 pub block_default: BlockSetType,
15 pub attribute_form_default: FormChoiceType,
16 pub element_form_default: FormChoiceType,
17 pub default_attributes: Option<QName>,
18 pub xpath_default_namespace: XpathDefaultNamespaceType,
19 pub id: Option<String>,
20 pub lang: Option<String>,
21 pub content: Vec<SchemaContent>,
22}
23#[derive(Debug, Clone, Eq, PartialEq)]
24pub enum SchemaContent {
25 Include(Include),
26 Import(Import),
27 Redefine(Redefine),
28 Override(Override),
29 Annotation(Annotation),
30 DefaultOpenContent(DefaultOpenContent),
31 SimpleType(SimpleBaseType),
32 ComplexType(ComplexBaseType),
33 Group(GroupType),
34 AttributeGroup(AttributeGroupType),
35 Element(ElementType),
36 Attribute(AttributeType),
37 Notation(Notation),
38}
39impl Schema {
40 #[must_use]
41 pub fn default_final_default() -> FullDerivationSetType {
42 FullDerivationSetType::TypeDerivationControlList(TypeDerivationControlList(Vec::new()))
43 }
44 #[must_use]
45 pub fn default_block_default() -> BlockSetType {
46 BlockSetType::BlockSetItemList(BlockSetItemList(Vec::new()))
47 }
48 #[must_use]
49 pub fn default_attribute_form_default() -> FormChoiceType {
50 FormChoiceType::Unqualified
51 }
52 #[must_use]
53 pub fn default_element_form_default() -> FormChoiceType {
54 FormChoiceType::Unqualified
55 }
56 #[must_use]
57 pub fn default_xpath_default_namespace() -> XpathDefaultNamespaceType {
58 XpathDefaultNamespaceType::String(String::from("##local"))
59 }
60}
61impl WithDeserializer for Schema {
62 type Deserializer = Box<quick_xml_deserialize::SchemaDeserializer>;
63}
64impl WithDeserializer for SchemaContent {
65 type Deserializer = Box<quick_xml_deserialize::SchemaContentDeserializer>;
66}
67#[derive(Debug, Clone, Eq, PartialEq)]
68pub enum FullDerivationSetType {
69 All,
70 TypeDerivationControlList(TypeDerivationControlList),
71}
72impl DeserializeBytes for FullDerivationSetType {
73 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
74 where
75 R: DeserializeReader,
76 {
77 match bytes {
78 b"#all" => Ok(Self::All),
79 x => Ok(Self::TypeDerivationControlList(
80 TypeDerivationControlList::deserialize_bytes(reader, x)?,
81 )),
82 }
83 }
84}
85#[derive(Debug, Clone, Eq, PartialEq, Default)]
86pub struct TypeDerivationControlList(pub Vec<TypeDerivationControlType>);
87impl DeserializeBytes for TypeDerivationControlList {
88 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
89 where
90 R: DeserializeReader,
91 {
92 Ok(Self(
93 bytes
94 .split(|b| *b == b' ' || *b == b'|' || *b == b',' || *b == b';')
95 .map(|bytes| TypeDerivationControlType::deserialize_bytes(reader, bytes))
96 .collect::<Result<Vec<_>, _>>()?,
97 ))
98 }
99}
100#[derive(Debug, Clone, Eq, PartialEq)]
101pub enum BlockSetType {
102 All,
103 BlockSetItemList(BlockSetItemList),
104}
105impl DeserializeBytes for BlockSetType {
106 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
107 where
108 R: DeserializeReader,
109 {
110 match bytes {
111 b"#all" => Ok(Self::All),
112 x => Ok(Self::BlockSetItemList(BlockSetItemList::deserialize_bytes(
113 reader, x,
114 )?)),
115 }
116 }
117}
118#[derive(Debug, Clone, Eq, PartialEq, Default)]
119pub struct BlockSetItemList(pub Vec<BlockSetItemType>);
120impl DeserializeBytes for BlockSetItemList {
121 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
122 where
123 R: DeserializeReader,
124 {
125 Ok(Self(
126 bytes
127 .split(|b| *b == b' ' || *b == b'|' || *b == b',' || *b == b';')
128 .map(|bytes| BlockSetItemType::deserialize_bytes(reader, bytes))
129 .collect::<Result<Vec<_>, _>>()?,
130 ))
131 }
132}
133#[derive(Debug, Clone, Eq, PartialEq)]
134pub enum FormChoiceType {
135 Qualified,
136 Unqualified,
137}
138impl DeserializeBytes for FormChoiceType {
139 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
140 where
141 R: DeserializeReader,
142 {
143 match bytes {
144 b"qualified" => Ok(Self::Qualified),
145 b"unqualified" => Ok(Self::Unqualified),
146 x => Err(reader.map_error(ErrorKind::UnknownOrInvalidValue(RawByteStr::from_slice(x)))),
147 }
148 }
149}
150#[derive(Debug, Clone, Eq, PartialEq)]
151pub enum XpathDefaultNamespaceType {
152 String(String),
153 DefaultNamespace,
154 TargetNamespace,
155 Local,
156}
157impl DeserializeBytes for XpathDefaultNamespaceType {
158 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
159 where
160 R: DeserializeReader,
161 {
162 match bytes {
163 b"##defaultNamespace" => Ok(Self::DefaultNamespace),
164 b"##targetNamespace" => Ok(Self::TargetNamespace),
165 b"##local" => Ok(Self::Local),
166 x => Ok(Self::String(String::deserialize_bytes(reader, x)?)),
167 }
168 }
169}
170#[derive(Debug, Clone, Eq, PartialEq)]
171pub struct Include {
172 pub id: Option<String>,
173 pub schema_location: String,
174 pub annotation: Option<Annotation>,
175}
176impl WithDeserializer for Include {
177 type Deserializer = Box<quick_xml_deserialize::IncludeDeserializer>;
178}
179#[derive(Debug, Clone, Eq, PartialEq)]
180pub struct Import {
181 pub id: Option<String>,
182 pub namespace: Option<String>,
183 pub schema_location: Option<String>,
184 pub annotation: Option<Annotation>,
185}
186impl WithDeserializer for Import {
187 type Deserializer = Box<quick_xml_deserialize::ImportDeserializer>;
188}
189#[derive(Debug, Clone, Eq, PartialEq)]
190pub struct Redefine {
191 pub schema_location: String,
192 pub id: Option<String>,
193 pub content: Vec<RedefineContent>,
194}
195#[derive(Debug, Clone, Eq, PartialEq)]
196pub enum RedefineContent {
197 Annotation(Annotation),
198 SimpleType(SimpleBaseType),
199 ComplexType(ComplexBaseType),
200 Group(GroupType),
201 AttributeGroup(AttributeGroupType),
202}
203impl WithDeserializer for Redefine {
204 type Deserializer = Box<quick_xml_deserialize::RedefineDeserializer>;
205}
206impl WithDeserializer for RedefineContent {
207 type Deserializer = Box<quick_xml_deserialize::RedefineContentDeserializer>;
208}
209#[derive(Debug, Clone, Eq, PartialEq)]
210pub struct Override {
211 pub schema_location: String,
212 pub id: Option<String>,
213 pub content: Vec<OverrideContent>,
214}
215#[derive(Debug, Clone, Eq, PartialEq)]
216pub enum OverrideContent {
217 Annotation(Annotation),
218 SimpleType(SimpleBaseType),
219 ComplexType(ComplexBaseType),
220 Group(GroupType),
221 AttributeGroup(AttributeGroupType),
222 Element(ElementType),
223 Attribute(AttributeType),
224 Notation(Notation),
225}
226impl WithDeserializer for Override {
227 type Deserializer = Box<quick_xml_deserialize::OverrideDeserializer>;
228}
229impl WithDeserializer for OverrideContent {
230 type Deserializer = Box<quick_xml_deserialize::OverrideContentDeserializer>;
231}
232#[derive(Debug, Clone, Eq, PartialEq)]
233pub struct Annotation {
234 pub id: Option<String>,
235 pub content: Vec<AnnotationContent>,
236}
237#[derive(Debug, Clone, Eq, PartialEq)]
238pub enum AnnotationContent {
239 Appinfo(Appinfo),
240 Documentation(Documentation),
241}
242impl WithDeserializer for Annotation {
243 type Deserializer = Box<quick_xml_deserialize::AnnotationDeserializer>;
244}
245impl WithDeserializer for AnnotationContent {
246 type Deserializer = Box<quick_xml_deserialize::AnnotationContentDeserializer>;
247}
248#[derive(Debug, Clone, Eq, PartialEq)]
249pub struct DefaultOpenContent {
250 pub id: Option<String>,
251 pub applies_to_empty: bool,
252 pub mode: DefaultOpenContentModeType,
253 pub annotation: Option<Annotation>,
254 pub any: WildcardType,
255}
256impl DefaultOpenContent {
257 #[must_use]
258 pub fn default_applies_to_empty() -> bool {
259 false
260 }
261 #[must_use]
262 pub fn default_mode() -> DefaultOpenContentModeType {
263 DefaultOpenContentModeType::Interleave
264 }
265}
266impl WithDeserializer for DefaultOpenContent {
267 type Deserializer = Box<quick_xml_deserialize::DefaultOpenContentDeserializer>;
268}
269#[derive(Debug, Clone, Eq, PartialEq)]
270pub struct SimpleBaseType {
271 pub id: Option<String>,
272 pub final_: Option<SimpleDerivationSetType>,
273 pub name: Option<String>,
274 pub content: Vec<SimpleBaseTypeContent>,
275}
276#[derive(Debug, Clone, Eq, PartialEq)]
277pub enum SimpleBaseTypeContent {
278 Annotation(Annotation),
279 Restriction(Restriction),
280 List(List),
281 Union(Union),
282}
283impl WithDeserializer for SimpleBaseType {
284 type Deserializer = Box<quick_xml_deserialize::SimpleBaseTypeDeserializer>;
285}
286impl WithDeserializer for SimpleBaseTypeContent {
287 type Deserializer = Box<quick_xml_deserialize::SimpleBaseTypeContentDeserializer>;
288}
289#[derive(Debug, Clone, Eq, PartialEq)]
290pub struct ComplexBaseType {
291 pub id: Option<String>,
292 pub name: Option<String>,
293 pub mixed: Option<bool>,
294 pub abstract_: bool,
295 pub final_: Option<DerivationSetType>,
296 pub block: Option<DerivationSetType>,
297 pub default_attributes_apply: bool,
298 pub content: Vec<ComplexBaseTypeContent>,
299}
300#[derive(Debug, Clone, Eq, PartialEq)]
301pub enum ComplexBaseTypeContent {
302 Annotation(Annotation),
303 SimpleContent(SimpleContent),
304 ComplexContent(ComplexContent),
305 OpenContent(OpenContent),
306 Group(GroupType),
307 All(GroupType),
308 Choice(GroupType),
309 Sequence(GroupType),
310 Attribute(AttributeType),
311 AttributeGroup(AttributeGroupType),
312 AnyAttribute(AnyAttribute),
313 Assert(AssertionType),
314}
315impl ComplexBaseType {
316 #[must_use]
317 pub fn default_abstract_() -> bool {
318 false
319 }
320 #[must_use]
321 pub fn default_default_attributes_apply() -> bool {
322 true
323 }
324}
325impl WithDeserializer for ComplexBaseType {
326 type Deserializer = Box<quick_xml_deserialize::ComplexBaseTypeDeserializer>;
327}
328impl WithDeserializer for ComplexBaseTypeContent {
329 type Deserializer = Box<quick_xml_deserialize::ComplexBaseTypeContentDeserializer>;
330}
331#[derive(Debug, Clone, Eq, PartialEq)]
332pub struct GroupType {
333 pub id: Option<String>,
334 pub name: Option<String>,
335 pub ref_: Option<QName>,
336 pub min_occurs: usize,
337 pub max_occurs: MaxOccurs,
338 pub content: Vec<GroupTypeContent>,
339}
340#[derive(Debug, Clone, Eq, PartialEq)]
341pub enum GroupTypeContent {
342 Annotation(Annotation),
343 Element(ElementType),
344 Group(GroupType),
345 All(GroupType),
346 Choice(GroupType),
347 Sequence(GroupType),
348 Any(Any),
349}
350impl GroupType {
351 #[must_use]
352 pub fn default_min_occurs() -> usize {
353 1usize
354 }
355 #[must_use]
356 pub fn default_max_occurs() -> MaxOccurs {
357 MaxOccurs::Bounded(1usize)
358 }
359}
360impl WithDeserializer for GroupType {
361 type Deserializer = Box<quick_xml_deserialize::GroupTypeDeserializer>;
362}
363impl WithDeserializer for GroupTypeContent {
364 type Deserializer = Box<quick_xml_deserialize::GroupTypeContentDeserializer>;
365}
366#[derive(Debug, Clone, Eq, PartialEq)]
367pub struct AttributeGroupType {
368 pub id: Option<String>,
369 pub name: Option<String>,
370 pub ref_: Option<QName>,
371 pub content: Vec<AttributeGroupTypeContent>,
372}
373#[derive(Debug, Clone, Eq, PartialEq)]
374pub enum AttributeGroupTypeContent {
375 Annotation(Annotation),
376 Attribute(AttributeType),
377 AttributeGroup(AttributeGroupType),
378 AnyAttribute(AnyAttribute),
379}
380impl WithDeserializer for AttributeGroupType {
381 type Deserializer = Box<quick_xml_deserialize::AttributeGroupTypeDeserializer>;
382}
383impl WithDeserializer for AttributeGroupTypeContent {
384 type Deserializer = Box<quick_xml_deserialize::AttributeGroupTypeContentDeserializer>;
385}
386#[derive(Debug, Clone, Eq, PartialEq)]
387pub struct ElementType {
388 pub id: Option<String>,
389 pub name: Option<String>,
390 pub ref_: Option<QName>,
391 pub type_: Option<QName>,
392 pub substitution_group: Option<QNameList>,
393 pub min_occurs: usize,
394 pub max_occurs: MaxOccurs,
395 pub default: Option<String>,
396 pub fixed: Option<String>,
397 pub nillable: Option<bool>,
398 pub abstract_: bool,
399 pub final_: Option<DerivationSetType>,
400 pub block: Option<BlockSetType>,
401 pub form: Option<FormChoiceType>,
402 pub target_namespace: Option<String>,
403 pub content: Vec<ElementTypeContent>,
404}
405#[derive(Debug, Clone, Eq, PartialEq)]
406pub enum ElementTypeContent {
407 Annotation(Annotation),
408 SimpleType(SimpleBaseType),
409 ComplexType(ComplexBaseType),
410 Alternative(AltType),
411 Unique(KeybaseType),
412 Key(KeybaseType),
413 Keyref(Keyref),
414}
415impl ElementType {
416 #[must_use]
417 pub fn default_min_occurs() -> usize {
418 1usize
419 }
420 #[must_use]
421 pub fn default_max_occurs() -> MaxOccurs {
422 MaxOccurs::Bounded(1usize)
423 }
424 #[must_use]
425 pub fn default_abstract_() -> bool {
426 false
427 }
428}
429impl WithDeserializer for ElementType {
430 type Deserializer = Box<quick_xml_deserialize::ElementTypeDeserializer>;
431}
432impl WithDeserializer for ElementTypeContent {
433 type Deserializer = Box<quick_xml_deserialize::ElementTypeContentDeserializer>;
434}
435#[derive(Debug, Clone, Eq, PartialEq)]
436pub struct AttributeType {
437 pub id: Option<String>,
438 pub name: Option<String>,
439 pub ref_: Option<QName>,
440 pub type_: Option<QName>,
441 pub use_: AttributeUseType,
442 pub default: Option<String>,
443 pub fixed: Option<String>,
444 pub form: Option<FormChoiceType>,
445 pub target_namespace: Option<String>,
446 pub inheritable: Option<bool>,
447 pub annotation: Option<Annotation>,
448 pub simple_type: Option<SimpleBaseType>,
449}
450impl AttributeType {
451 #[must_use]
452 pub fn default_use_() -> AttributeUseType {
453 AttributeUseType::Optional
454 }
455}
456impl WithDeserializer for AttributeType {
457 type Deserializer = Box<quick_xml_deserialize::AttributeTypeDeserializer>;
458}
459#[derive(Debug, Clone, Eq, PartialEq)]
460pub struct Notation {
461 pub id: Option<String>,
462 pub name: String,
463 pub public: Option<String>,
464 pub system: Option<String>,
465 pub annotation: Option<Annotation>,
466}
467impl WithDeserializer for Notation {
468 type Deserializer = Box<quick_xml_deserialize::NotationDeserializer>;
469}
470#[derive(Debug, Clone, Eq, PartialEq)]
471pub enum TypeDerivationControlType {
472 Extension,
473 Restriction,
474 List,
475 Union,
476}
477impl DeserializeBytes for TypeDerivationControlType {
478 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
479 where
480 R: DeserializeReader,
481 {
482 match bytes {
483 b"extension" => Ok(Self::Extension),
484 b"restriction" => Ok(Self::Restriction),
485 b"list" => Ok(Self::List),
486 b"union" => Ok(Self::Union),
487 x => Err(reader.map_error(ErrorKind::UnknownOrInvalidValue(RawByteStr::from_slice(x)))),
488 }
489 }
490}
491#[derive(Debug, Clone, Eq, PartialEq)]
492pub enum BlockSetItemType {
493 Extension,
494 Restriction,
495 Substitution,
496}
497impl DeserializeBytes for BlockSetItemType {
498 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
499 where
500 R: DeserializeReader,
501 {
502 match bytes {
503 b"extension" => Ok(Self::Extension),
504 b"restriction" => Ok(Self::Restriction),
505 b"substitution" => Ok(Self::Substitution),
506 x => Err(reader.map_error(ErrorKind::UnknownOrInvalidValue(RawByteStr::from_slice(x)))),
507 }
508 }
509}
510#[derive(Debug, Clone, Eq, PartialEq)]
511pub struct Appinfo {
512 pub source: Option<String>,
513}
514impl WithDeserializer for Appinfo {
515 type Deserializer = Box<quick_xml_deserialize::AppinfoDeserializer>;
516}
517#[derive(Debug, Clone, Eq, PartialEq)]
518pub struct Documentation {
519 pub source: Option<String>,
520 pub lang: Option<String>,
521}
522impl WithDeserializer for Documentation {
523 type Deserializer = Box<quick_xml_deserialize::DocumentationDeserializer>;
524}
525#[derive(Debug, Clone, Eq, PartialEq)]
526pub enum DefaultOpenContentModeType {
527 Interleave,
528 Suffix,
529}
530impl DeserializeBytes for DefaultOpenContentModeType {
531 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
532 where
533 R: DeserializeReader,
534 {
535 match bytes {
536 b"interleave" => Ok(Self::Interleave),
537 b"suffix" => Ok(Self::Suffix),
538 x => Err(reader.map_error(ErrorKind::UnknownOrInvalidValue(RawByteStr::from_slice(x)))),
539 }
540 }
541}
542#[derive(Debug, Clone, Eq, PartialEq)]
543pub struct WildcardType {
544 pub id: Option<String>,
545 pub namespace: Option<NamespaceListType>,
546 pub not_namespace: Option<BasicNamespaceListType>,
547 pub process_contents: ProcessContentsType,
548 pub annotation: Option<Annotation>,
549}
550impl WildcardType {
551 #[must_use]
552 pub fn default_process_contents() -> ProcessContentsType {
553 ProcessContentsType::Strict
554 }
555}
556impl WithDeserializer for WildcardType {
557 type Deserializer = Box<quick_xml_deserialize::WildcardTypeDeserializer>;
558}
559#[derive(Debug, Clone, Eq, PartialEq)]
560pub enum SimpleDerivationSetType {
561 All,
562 SimpleDerivationSetItemList(SimpleDerivationSetItemList),
563}
564impl DeserializeBytes for SimpleDerivationSetType {
565 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
566 where
567 R: DeserializeReader,
568 {
569 match bytes {
570 b"#all" => Ok(Self::All),
571 x => Ok(Self::SimpleDerivationSetItemList(
572 SimpleDerivationSetItemList::deserialize_bytes(reader, x)?,
573 )),
574 }
575 }
576}
577#[derive(Debug, Clone, Eq, PartialEq)]
578pub struct Restriction {
579 pub id: Option<String>,
580 pub base: Option<QName>,
581 pub content: Vec<RestrictionContent>,
582}
583#[derive(Debug, Clone, Eq, PartialEq)]
584pub enum RestrictionContent {
585 Annotation(Annotation),
586 SimpleType(SimpleBaseType),
587 Facet(Facet),
588}
589impl WithDeserializer for Restriction {
590 type Deserializer = Box<quick_xml_deserialize::RestrictionDeserializer>;
591}
592impl WithDeserializer for RestrictionContent {
593 type Deserializer = Box<quick_xml_deserialize::RestrictionContentDeserializer>;
594}
595#[derive(Debug, Clone, Eq, PartialEq)]
596pub struct List {
597 pub id: Option<String>,
598 pub item_type: Option<QName>,
599 pub annotation: Option<Annotation>,
600 pub simple_type: Option<SimpleBaseType>,
601}
602impl WithDeserializer for List {
603 type Deserializer = Box<quick_xml_deserialize::ListDeserializer>;
604}
605#[derive(Debug, Clone, Eq, PartialEq)]
606pub struct Union {
607 pub id: Option<String>,
608 pub member_types: Option<QNameList>,
609 pub annotation: Option<Annotation>,
610 pub simple_type: Vec<SimpleBaseType>,
611}
612impl WithDeserializer for Union {
613 type Deserializer = Box<quick_xml_deserialize::UnionDeserializer>;
614}
615#[derive(Debug, Clone, Eq, PartialEq)]
616pub enum DerivationSetType {
617 All,
618 ReducedDerivationControlList(ReducedDerivationControlList),
619}
620impl DeserializeBytes for DerivationSetType {
621 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
622 where
623 R: DeserializeReader,
624 {
625 match bytes {
626 b"#all" => Ok(Self::All),
627 x => Ok(Self::ReducedDerivationControlList(
628 ReducedDerivationControlList::deserialize_bytes(reader, x)?,
629 )),
630 }
631 }
632}
633#[derive(Debug, Clone, Eq, PartialEq)]
634pub struct SimpleContent {
635 pub id: Option<String>,
636 pub content: Vec<SimpleContentContent>,
637}
638#[derive(Debug, Clone, Eq, PartialEq)]
639pub enum SimpleContentContent {
640 Annotation(Annotation),
641 Restriction(RestrictionType),
642 Extension(ExtensionType),
643}
644impl WithDeserializer for SimpleContent {
645 type Deserializer = Box<quick_xml_deserialize::SimpleContentDeserializer>;
646}
647impl WithDeserializer for SimpleContentContent {
648 type Deserializer = Box<quick_xml_deserialize::SimpleContentContentDeserializer>;
649}
650#[derive(Debug, Clone, Eq, PartialEq)]
651pub struct ComplexContent {
652 pub id: Option<String>,
653 pub mixed: Option<bool>,
654 pub content: Vec<ComplexContentContent>,
655}
656#[derive(Debug, Clone, Eq, PartialEq)]
657pub enum ComplexContentContent {
658 Annotation(Annotation),
659 Restriction(RestrictionType),
660 Extension(ExtensionType),
661}
662impl WithDeserializer for ComplexContent {
663 type Deserializer = Box<quick_xml_deserialize::ComplexContentDeserializer>;
664}
665impl WithDeserializer for ComplexContentContent {
666 type Deserializer = Box<quick_xml_deserialize::ComplexContentContentDeserializer>;
667}
668#[derive(Debug, Clone, Eq, PartialEq)]
669pub struct OpenContent {
670 pub id: Option<String>,
671 pub mode: OpenContentModeType,
672 pub annotation: Option<Annotation>,
673 pub any: Option<WildcardType>,
674}
675impl OpenContent {
676 #[must_use]
677 pub fn default_mode() -> OpenContentModeType {
678 OpenContentModeType::Interleave
679 }
680}
681impl WithDeserializer for OpenContent {
682 type Deserializer = Box<quick_xml_deserialize::OpenContentDeserializer>;
683}
684#[derive(Debug, Clone, Eq, PartialEq)]
685pub struct AnyAttribute {
686 pub id: Option<String>,
687 pub namespace: Option<NamespaceListType>,
688 pub not_namespace: Option<BasicNamespaceListType>,
689 pub process_contents: ProcessContentsType,
690 pub not_q_name: Option<QnameListAType>,
691 pub annotation: Option<Annotation>,
692}
693impl AnyAttribute {
694 #[must_use]
695 pub fn default_process_contents() -> ProcessContentsType {
696 ProcessContentsType::Strict
697 }
698}
699impl WithDeserializer for AnyAttribute {
700 type Deserializer = Box<quick_xml_deserialize::AnyAttributeDeserializer>;
701}
702#[derive(Debug, Clone, Eq, PartialEq)]
703pub struct AssertionType {
704 pub id: Option<String>,
705 pub test: Option<String>,
706 pub xpath_default_namespace: Option<XpathDefaultNamespaceType>,
707 pub annotation: Option<Annotation>,
708}
709impl WithDeserializer for AssertionType {
710 type Deserializer = Box<quick_xml_deserialize::AssertionTypeDeserializer>;
711}
712#[derive(Debug, Clone, Eq, PartialEq)]
713pub struct Any {
714 pub id: Option<String>,
715 pub namespace: Option<NamespaceListType>,
716 pub not_namespace: Option<BasicNamespaceListType>,
717 pub process_contents: ProcessContentsType,
718 pub not_q_name: Option<QnameListType>,
719 pub min_occurs: usize,
720 pub max_occurs: MaxOccurs,
721 pub annotation: Option<Annotation>,
722}
723impl Any {
724 #[must_use]
725 pub fn default_process_contents() -> ProcessContentsType {
726 ProcessContentsType::Strict
727 }
728 #[must_use]
729 pub fn default_min_occurs() -> usize {
730 1usize
731 }
732 #[must_use]
733 pub fn default_max_occurs() -> MaxOccurs {
734 MaxOccurs::Bounded(1usize)
735 }
736}
737impl WithDeserializer for Any {
738 type Deserializer = Box<quick_xml_deserialize::AnyDeserializer>;
739}
740#[derive(Debug, Clone, Eq, PartialEq, Default)]
741pub struct QNameList(pub Vec<QName>);
742impl DeserializeBytes for QNameList {
743 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
744 where
745 R: DeserializeReader,
746 {
747 Ok(Self(
748 bytes
749 .split(|b| *b == b' ' || *b == b'|' || *b == b',' || *b == b';')
750 .map(|bytes| QName::deserialize_bytes(reader, bytes))
751 .collect::<Result<Vec<_>, _>>()?,
752 ))
753 }
754}
755#[derive(Debug, Clone, Eq, PartialEq)]
756pub struct AltType {
757 pub id: Option<String>,
758 pub test: Option<String>,
759 pub type_: Option<QName>,
760 pub xpath_default_namespace: Option<XpathDefaultNamespaceType>,
761 pub content: Vec<AltTypeContent>,
762}
763#[derive(Debug, Clone, Eq, PartialEq)]
764pub enum AltTypeContent {
765 Annotation(Annotation),
766 SimpleType(SimpleBaseType),
767 ComplexType(ComplexBaseType),
768}
769impl WithDeserializer for AltType {
770 type Deserializer = Box<quick_xml_deserialize::AltTypeDeserializer>;
771}
772impl WithDeserializer for AltTypeContent {
773 type Deserializer = Box<quick_xml_deserialize::AltTypeContentDeserializer>;
774}
775#[derive(Debug, Clone, Eq, PartialEq)]
776pub struct KeybaseType {
777 pub id: Option<String>,
778 pub name: Option<String>,
779 pub ref_: Option<QName>,
780 pub content: Option<KeybaseTypeContent>,
781}
782#[derive(Debug, Clone, Eq, PartialEq)]
783pub struct KeybaseTypeContent {
784 pub annotation: Option<Annotation>,
785 pub selector: Field,
786 pub field: Vec<Field>,
787}
788impl WithDeserializer for KeybaseType {
789 type Deserializer = Box<quick_xml_deserialize::KeybaseTypeDeserializer>;
790}
791impl WithDeserializer for KeybaseTypeContent {
792 type Deserializer = Box<quick_xml_deserialize::KeybaseTypeContentDeserializer>;
793}
794#[derive(Debug, Clone, Eq, PartialEq)]
795pub struct Keyref {
796 pub id: Option<String>,
797 pub name: Option<String>,
798 pub ref_: Option<QName>,
799 pub refer: Option<QName>,
800 pub content: Option<KeyrefContent>,
801}
802#[derive(Debug, Clone, Eq, PartialEq)]
803pub struct KeyrefContent {
804 pub annotation: Option<Annotation>,
805 pub selector: Field,
806 pub field: Vec<Field>,
807}
808impl WithDeserializer for Keyref {
809 type Deserializer = Box<quick_xml_deserialize::KeyrefDeserializer>;
810}
811impl WithDeserializer for KeyrefContent {
812 type Deserializer = Box<quick_xml_deserialize::KeyrefContentDeserializer>;
813}
814#[derive(Debug, Clone, Eq, PartialEq)]
815pub enum AttributeUseType {
816 Prohibited,
817 Optional,
818 Required,
819}
820impl DeserializeBytes for AttributeUseType {
821 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
822 where
823 R: DeserializeReader,
824 {
825 match bytes {
826 b"prohibited" => Ok(Self::Prohibited),
827 b"optional" => Ok(Self::Optional),
828 b"required" => Ok(Self::Required),
829 x => Err(reader.map_error(ErrorKind::UnknownOrInvalidValue(RawByteStr::from_slice(x)))),
830 }
831 }
832}
833#[derive(Debug, Clone, Eq, PartialEq)]
834pub enum NamespaceListType {
835 Any,
836 Other,
837 BasicNamespaceList(BasicNamespaceListType),
838}
839impl DeserializeBytes for NamespaceListType {
840 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
841 where
842 R: DeserializeReader,
843 {
844 match bytes {
845 b"##any" => Ok(Self::Any),
846 b"##other" => Ok(Self::Other),
847 x => Ok(Self::BasicNamespaceList(
848 BasicNamespaceListType::deserialize_bytes(reader, x)?,
849 )),
850 }
851 }
852}
853#[derive(Debug, Clone, Eq, PartialEq, Default)]
854pub struct BasicNamespaceListType(pub Vec<BasicNamespaceListItemType>);
855impl DeserializeBytes for BasicNamespaceListType {
856 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
857 where
858 R: DeserializeReader,
859 {
860 Ok(Self(
861 bytes
862 .split(|b| *b == b' ' || *b == b'|' || *b == b',' || *b == b';')
863 .map(|bytes| BasicNamespaceListItemType::deserialize_bytes(reader, bytes))
864 .collect::<Result<Vec<_>, _>>()?,
865 ))
866 }
867}
868#[derive(Debug, Clone, Eq, PartialEq)]
869pub enum ProcessContentsType {
870 Skip,
871 Lax,
872 Strict,
873}
874impl DeserializeBytes for ProcessContentsType {
875 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
876 where
877 R: DeserializeReader,
878 {
879 match bytes {
880 b"skip" => Ok(Self::Skip),
881 b"lax" => Ok(Self::Lax),
882 b"strict" => Ok(Self::Strict),
883 x => Err(reader.map_error(ErrorKind::UnknownOrInvalidValue(RawByteStr::from_slice(x)))),
884 }
885 }
886}
887#[derive(Debug, Clone, Eq, PartialEq, Default)]
888pub struct SimpleDerivationSetItemList(pub Vec<SimpleDerivationSetItemType>);
889impl DeserializeBytes for SimpleDerivationSetItemList {
890 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
891 where
892 R: DeserializeReader,
893 {
894 Ok(Self(
895 bytes
896 .split(|b| *b == b' ' || *b == b'|' || *b == b',' || *b == b';')
897 .map(|bytes| SimpleDerivationSetItemType::deserialize_bytes(reader, bytes))
898 .collect::<Result<Vec<_>, _>>()?,
899 ))
900 }
901}
902#[derive(Debug, Clone, Eq, PartialEq)]
903pub enum Facet {
904 MinExclusive(FacetType),
905 MinInclusive(FacetType),
906 MaxExclusive(FacetType),
907 MaxInclusive(FacetType),
908 TotalDigits(FacetType),
909 FractionDigits(FacetType),
910 Length(FacetType),
911 MinLength(FacetType),
912 MaxLength(FacetType),
913 Enumeration(FacetType),
914 WhiteSpace(FacetType),
915 Pattern(FacetType),
916 Assertion(AssertionType),
917 ExplicitTimezone(FacetType),
918}
919impl WithDeserializer for Facet {
920 type Deserializer = Box<quick_xml_deserialize::FacetDeserializer>;
921}
922#[derive(Debug, Clone, Eq, PartialEq, Default)]
923pub struct ReducedDerivationControlList(pub Vec<ReducedDerivationControlType>);
924impl DeserializeBytes for ReducedDerivationControlList {
925 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
926 where
927 R: DeserializeReader,
928 {
929 Ok(Self(
930 bytes
931 .split(|b| *b == b' ' || *b == b'|' || *b == b',' || *b == b';')
932 .map(|bytes| ReducedDerivationControlType::deserialize_bytes(reader, bytes))
933 .collect::<Result<Vec<_>, _>>()?,
934 ))
935 }
936}
937#[derive(Debug, Clone, Eq, PartialEq)]
938pub struct RestrictionType {
939 pub id: Option<String>,
940 pub base: QName,
941 pub content: Vec<RestrictionTypeContent>,
942}
943#[derive(Debug, Clone, Eq, PartialEq)]
944pub enum RestrictionTypeContent {
945 Annotation(Annotation),
946 OpenContent(OpenContent),
947 Group(GroupType),
948 All(GroupType),
949 Choice(GroupType),
950 Sequence(GroupType),
951 SimpleType(SimpleBaseType),
952 Facet(Facet),
953 Attribute(AttributeType),
954 AttributeGroup(AttributeGroupType),
955 AnyAttribute(AnyAttribute),
956 Assert(AssertionType),
957}
958impl WithDeserializer for RestrictionType {
959 type Deserializer = Box<quick_xml_deserialize::RestrictionTypeDeserializer>;
960}
961impl WithDeserializer for RestrictionTypeContent {
962 type Deserializer = Box<quick_xml_deserialize::RestrictionTypeContentDeserializer>;
963}
964#[derive(Debug, Clone, Eq, PartialEq)]
965pub struct ExtensionType {
966 pub id: Option<String>,
967 pub base: QName,
968 pub content: Vec<ExtensionTypeContent>,
969}
970#[derive(Debug, Clone, Eq, PartialEq)]
971pub enum ExtensionTypeContent {
972 Annotation(Annotation),
973 OpenContent(OpenContent),
974 Group(GroupType),
975 All(GroupType),
976 Choice(GroupType),
977 Sequence(GroupType),
978 Attribute(AttributeType),
979 AttributeGroup(AttributeGroupType),
980 AnyAttribute(AnyAttribute),
981 Assert(AssertionType),
982}
983impl WithDeserializer for ExtensionType {
984 type Deserializer = Box<quick_xml_deserialize::ExtensionTypeDeserializer>;
985}
986impl WithDeserializer for ExtensionTypeContent {
987 type Deserializer = Box<quick_xml_deserialize::ExtensionTypeContentDeserializer>;
988}
989#[derive(Debug, Clone, Eq, PartialEq)]
990pub enum OpenContentModeType {
991 None,
992 Interleave,
993 Suffix,
994}
995impl DeserializeBytes for OpenContentModeType {
996 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
997 where
998 R: DeserializeReader,
999 {
1000 match bytes {
1001 b"none" => Ok(Self::None),
1002 b"interleave" => Ok(Self::Interleave),
1003 b"suffix" => Ok(Self::Suffix),
1004 x => Err(reader.map_error(ErrorKind::UnknownOrInvalidValue(RawByteStr::from_slice(x)))),
1005 }
1006 }
1007}
1008#[derive(Debug, Clone, Eq, PartialEq, Default)]
1009pub struct QnameListAType(pub Vec<QnameListAItemType>);
1010impl DeserializeBytes for QnameListAType {
1011 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
1012 where
1013 R: DeserializeReader,
1014 {
1015 Ok(Self(
1016 bytes
1017 .split(|b| *b == b' ' || *b == b'|' || *b == b',' || *b == b';')
1018 .map(|bytes| QnameListAItemType::deserialize_bytes(reader, bytes))
1019 .collect::<Result<Vec<_>, _>>()?,
1020 ))
1021 }
1022}
1023#[derive(Debug, Clone, Eq, PartialEq, Default)]
1024pub struct QnameListType(pub Vec<QnameListItemType>);
1025impl DeserializeBytes for QnameListType {
1026 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
1027 where
1028 R: DeserializeReader,
1029 {
1030 Ok(Self(
1031 bytes
1032 .split(|b| *b == b' ' || *b == b'|' || *b == b',' || *b == b';')
1033 .map(|bytes| QnameListItemType::deserialize_bytes(reader, bytes))
1034 .collect::<Result<Vec<_>, _>>()?,
1035 ))
1036 }
1037}
1038#[derive(Debug, Clone, Eq, PartialEq)]
1039pub struct Field {
1040 pub id: Option<String>,
1041 pub xpath: String,
1042 pub xpath_default_namespace: Option<XpathDefaultNamespaceType>,
1043 pub annotation: Option<Annotation>,
1044}
1045impl WithDeserializer for Field {
1046 type Deserializer = Box<quick_xml_deserialize::FieldDeserializer>;
1047}
1048#[derive(Debug, Clone, Eq, PartialEq)]
1049pub enum BasicNamespaceListItemType {
1050 String(String),
1051 TargetNamespace,
1052 Local,
1053}
1054impl DeserializeBytes for BasicNamespaceListItemType {
1055 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
1056 where
1057 R: DeserializeReader,
1058 {
1059 match bytes {
1060 b"##targetNamespace" => Ok(Self::TargetNamespace),
1061 b"##local" => Ok(Self::Local),
1062 x => Ok(Self::String(String::deserialize_bytes(reader, x)?)),
1063 }
1064 }
1065}
1066#[derive(Debug, Clone, Eq, PartialEq)]
1067pub enum SimpleDerivationSetItemType {
1068 List,
1069 Union,
1070 Restriction,
1071 Extension,
1072}
1073impl DeserializeBytes for SimpleDerivationSetItemType {
1074 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
1075 where
1076 R: DeserializeReader,
1077 {
1078 match bytes {
1079 b"list" => Ok(Self::List),
1080 b"union" => Ok(Self::Union),
1081 b"restriction" => Ok(Self::Restriction),
1082 b"extension" => Ok(Self::Extension),
1083 x => Err(reader.map_error(ErrorKind::UnknownOrInvalidValue(RawByteStr::from_slice(x)))),
1084 }
1085 }
1086}
1087#[derive(Debug, Clone, Eq, PartialEq)]
1088pub struct FacetType {
1089 pub id: Option<String>,
1090 pub value: String,
1091 pub fixed: bool,
1092 pub annotation: Option<Annotation>,
1093}
1094impl FacetType {
1095 #[must_use]
1096 pub fn default_fixed() -> bool {
1097 false
1098 }
1099}
1100impl WithDeserializer for FacetType {
1101 type Deserializer = Box<quick_xml_deserialize::FacetTypeDeserializer>;
1102}
1103#[derive(Debug, Clone, Eq, PartialEq)]
1104pub enum ReducedDerivationControlType {
1105 Extension,
1106 Restriction,
1107}
1108impl DeserializeBytes for ReducedDerivationControlType {
1109 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
1110 where
1111 R: DeserializeReader,
1112 {
1113 match bytes {
1114 b"extension" => Ok(Self::Extension),
1115 b"restriction" => Ok(Self::Restriction),
1116 x => Err(reader.map_error(ErrorKind::UnknownOrInvalidValue(RawByteStr::from_slice(x)))),
1117 }
1118 }
1119}
1120#[derive(Debug, Clone, Eq, PartialEq)]
1121pub enum QnameListAItemType {
1122 QName(QName),
1123 Defined,
1124}
1125impl DeserializeBytes for QnameListAItemType {
1126 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
1127 where
1128 R: DeserializeReader,
1129 {
1130 match bytes {
1131 b"##defined" => Ok(Self::Defined),
1132 x => Ok(Self::QName(QName::deserialize_bytes(reader, x)?)),
1133 }
1134 }
1135}
1136#[derive(Debug, Clone, Eq, PartialEq)]
1137pub enum QnameListItemType {
1138 QName(QName),
1139 Defined,
1140 DefinedSibling,
1141}
1142impl DeserializeBytes for QnameListItemType {
1143 fn deserialize_bytes<R>(reader: &R, bytes: &[u8]) -> Result<Self, Error>
1144 where
1145 R: DeserializeReader,
1146 {
1147 match bytes {
1148 b"##defined" => Ok(Self::Defined),
1149 b"##definedSibling" => Ok(Self::DefinedSibling),
1150 x => Ok(Self::QName(QName::deserialize_bytes(reader, x)?)),
1151 }
1152 }
1153}
1154pub mod quick_xml_deserialize {
1155 use crate::quick_xml::{
1156 filter_xmlns_attributes, BytesStart, DeserializeReader, Deserializer, DeserializerArtifact,
1157 DeserializerEvent, DeserializerOutput, DeserializerResult, ElementHandlerOutput, Error,
1158 ErrorKind, Event, RawByteStr, WithDeserializer,
1159 };
1160 use core::mem::replace;
1161 #[derive(Debug)]
1162 pub struct SchemaDeserializer {
1163 target_namespace: Option<String>,
1164 version: Option<String>,
1165 final_default: super::FullDerivationSetType,
1166 block_default: super::BlockSetType,
1167 attribute_form_default: super::FormChoiceType,
1168 element_form_default: super::FormChoiceType,
1169 default_attributes: Option<super::QName>,
1170 xpath_default_namespace: super::XpathDefaultNamespaceType,
1171 id: Option<String>,
1172 lang: Option<String>,
1173 content: Vec<super::SchemaContent>,
1174 state: Box<SchemaDeserializerState>,
1175 }
1176 #[derive(Debug)]
1177 enum SchemaDeserializerState {
1178 Init__,
1179 Next__,
1180 Content__(<super::SchemaContent as WithDeserializer>::Deserializer),
1181 Unknown__,
1182 }
1183 impl SchemaDeserializer {
1184 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
1185 where
1186 R: DeserializeReader,
1187 {
1188 let mut target_namespace: Option<String> = None;
1189 let mut version: Option<String> = None;
1190 let mut final_default: Option<super::FullDerivationSetType> = None;
1191 let mut block_default: Option<super::BlockSetType> = None;
1192 let mut attribute_form_default: Option<super::FormChoiceType> = None;
1193 let mut element_form_default: Option<super::FormChoiceType> = None;
1194 let mut default_attributes: Option<super::QName> = None;
1195 let mut xpath_default_namespace: Option<super::XpathDefaultNamespaceType> = None;
1196 let mut id: Option<String> = None;
1197 let mut lang: Option<String> = None;
1198 for attrib in filter_xmlns_attributes(bytes_start) {
1199 let attrib = attrib?;
1200 if matches!(
1201 reader.resolve_local_name(attrib.key, &super::NS_XS),
1202 Some(b"targetNamespace")
1203 ) {
1204 reader.read_attrib(&mut target_namespace, b"targetNamespace", &attrib.value)?;
1205 } else if matches!(
1206 reader.resolve_local_name(attrib.key, &super::NS_XS),
1207 Some(b"version")
1208 ) {
1209 reader.read_attrib(&mut version, b"version", &attrib.value)?;
1210 } else if matches!(
1211 reader.resolve_local_name(attrib.key, &super::NS_XS),
1212 Some(b"finalDefault")
1213 ) {
1214 reader.read_attrib(&mut final_default, b"finalDefault", &attrib.value)?;
1215 } else if matches!(
1216 reader.resolve_local_name(attrib.key, &super::NS_XS),
1217 Some(b"blockDefault")
1218 ) {
1219 reader.read_attrib(&mut block_default, b"blockDefault", &attrib.value)?;
1220 } else if matches!(
1221 reader.resolve_local_name(attrib.key, &super::NS_XS),
1222 Some(b"attributeFormDefault")
1223 ) {
1224 reader.read_attrib(
1225 &mut attribute_form_default,
1226 b"attributeFormDefault",
1227 &attrib.value,
1228 )?;
1229 } else if matches!(
1230 reader.resolve_local_name(attrib.key, &super::NS_XS),
1231 Some(b"elementFormDefault")
1232 ) {
1233 reader.read_attrib(
1234 &mut element_form_default,
1235 b"elementFormDefault",
1236 &attrib.value,
1237 )?;
1238 } else if matches!(
1239 reader.resolve_local_name(attrib.key, &super::NS_XS),
1240 Some(b"defaultAttributes")
1241 ) {
1242 reader.read_attrib(
1243 &mut default_attributes,
1244 b"defaultAttributes",
1245 &attrib.value,
1246 )?;
1247 } else if matches!(
1248 reader.resolve_local_name(attrib.key, &super::NS_XS),
1249 Some(b"xpathDefaultNamespace")
1250 ) {
1251 reader.read_attrib(
1252 &mut xpath_default_namespace,
1253 b"xpathDefaultNamespace",
1254 &attrib.value,
1255 )?;
1256 } else if matches!(
1257 reader.resolve_local_name(attrib.key, &super::NS_XS),
1258 Some(b"id")
1259 ) {
1260 reader.read_attrib(&mut id, b"id", &attrib.value)?;
1261 } else if matches!(
1262 reader.resolve_local_name(attrib.key, &super::NS_XML),
1263 Some(b"lang")
1264 ) {
1265 reader.read_attrib(&mut lang, b"lang", &attrib.value)?;
1266 }
1267 }
1268 Ok(Box::new(Self {
1269 target_namespace: target_namespace,
1270 version: version,
1271 final_default: final_default.unwrap_or_else(super::Schema::default_final_default),
1272 block_default: block_default.unwrap_or_else(super::Schema::default_block_default),
1273 attribute_form_default: attribute_form_default
1274 .unwrap_or_else(super::Schema::default_attribute_form_default),
1275 element_form_default: element_form_default
1276 .unwrap_or_else(super::Schema::default_element_form_default),
1277 default_attributes: default_attributes,
1278 xpath_default_namespace: xpath_default_namespace
1279 .unwrap_or_else(super::Schema::default_xpath_default_namespace),
1280 id: id,
1281 lang: lang,
1282 content: Vec::new(),
1283 state: Box::new(SchemaDeserializerState::Init__),
1284 }))
1285 }
1286 fn finish_state<R>(
1287 &mut self,
1288 reader: &R,
1289 state: SchemaDeserializerState,
1290 ) -> Result<(), Error>
1291 where
1292 R: DeserializeReader,
1293 {
1294 if let SchemaDeserializerState::Content__(deserializer) = state {
1295 self.store_content(deserializer.finish(reader)?)?;
1296 }
1297 Ok(())
1298 }
1299 fn store_content(&mut self, value: super::SchemaContent) -> Result<(), Error> {
1300 self.content.push(value);
1301 Ok(())
1302 }
1303 fn handle_content<'de, R>(
1304 &mut self,
1305 reader: &R,
1306 output: DeserializerOutput<'de, super::SchemaContent>,
1307 fallback: &mut Option<SchemaDeserializerState>,
1308 ) -> Result<ElementHandlerOutput<'de>, Error>
1309 where
1310 R: DeserializeReader,
1311 {
1312 let DeserializerOutput {
1313 artifact,
1314 event,
1315 allow_any,
1316 } = output;
1317 if artifact.is_none() {
1318 *self.state = fallback.take().unwrap_or(SchemaDeserializerState::Next__);
1319 return Ok(ElementHandlerOutput::break_(event, allow_any));
1320 }
1321 if let Some(fallback) = fallback.take() {
1322 self.finish_state(reader, fallback)?;
1323 }
1324 Ok(match artifact {
1325 DeserializerArtifact::None => unreachable!(),
1326 DeserializerArtifact::Data(data) => {
1327 self.store_content(data)?;
1328 *self.state = SchemaDeserializerState::Next__;
1329 ElementHandlerOutput::from_event(event, allow_any)
1330 }
1331 DeserializerArtifact::Deserializer(deserializer) => {
1332 let can_have_more = self.content.len().saturating_add(1) < 13usize;
1333 let ret = if can_have_more {
1334 ElementHandlerOutput::from_event(event, allow_any)
1335 } else {
1336 ElementHandlerOutput::from_event_end(event, allow_any)
1337 };
1338 match (can_have_more, &ret) {
1339 (true, ElementHandlerOutput::Continue { .. }) => {
1340 fallback
1341 .get_or_insert(SchemaDeserializerState::Content__(deserializer));
1342 *self.state = SchemaDeserializerState::Next__;
1343 }
1344 (false, _) | (_, ElementHandlerOutput::Break { .. }) => {
1345 *self.state = SchemaDeserializerState::Content__(deserializer);
1346 }
1347 }
1348 ret
1349 }
1350 })
1351 }
1352 }
1353 impl<'de> Deserializer<'de, super::Schema> for Box<SchemaDeserializer> {
1354 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Schema>
1355 where
1356 R: DeserializeReader,
1357 {
1358 reader.init_deserializer_from_start_event(event, SchemaDeserializer::from_bytes_start)
1359 }
1360 fn next<R>(
1361 mut self,
1362 reader: &R,
1363 event: Event<'de>,
1364 ) -> DeserializerResult<'de, super::Schema>
1365 where
1366 R: DeserializeReader,
1367 {
1368 use SchemaDeserializerState as S;
1369 let mut event = event;
1370 let mut fallback = None;
1371 let (event, allow_any) = loop {
1372 let state = replace(&mut *self.state, S::Unknown__);
1373 event = match (state, event) {
1374 (S::Content__(deserializer), event) => {
1375 let output = deserializer.next(reader, event)?;
1376 match self.handle_content(reader, output, &mut fallback)? {
1377 ElementHandlerOutput::Break { event, allow_any } => {
1378 break (event, allow_any)
1379 }
1380 ElementHandlerOutput::Continue { event, .. } => event,
1381 }
1382 }
1383 (_, Event::End(_)) => {
1384 return Ok(DeserializerOutput {
1385 artifact: DeserializerArtifact::Data(self.finish(reader)?),
1386 event: DeserializerEvent::None,
1387 allow_any: false,
1388 });
1389 }
1390 (state @ (S::Init__ | S::Next__), event) => {
1391 fallback.get_or_insert(state);
1392 let output =
1393 <super::SchemaContent as WithDeserializer>::Deserializer::init(
1394 reader, event,
1395 )?;
1396 match self.handle_content(reader, output, &mut fallback)? {
1397 ElementHandlerOutput::Break { event, allow_any } => {
1398 break (event, allow_any)
1399 }
1400 ElementHandlerOutput::Continue { event, .. } => event,
1401 }
1402 }
1403 (S::Unknown__, _) => unreachable!(),
1404 }
1405 };
1406 let artifact = DeserializerArtifact::Deserializer(self);
1407 Ok(DeserializerOutput {
1408 artifact,
1409 event,
1410 allow_any,
1411 })
1412 }
1413 fn finish<R>(mut self, reader: &R) -> Result<super::Schema, Error>
1414 where
1415 R: DeserializeReader,
1416 {
1417 let state = replace(&mut *self.state, SchemaDeserializerState::Unknown__);
1418 self.finish_state(reader, state)?;
1419 Ok(super::Schema {
1420 target_namespace: self.target_namespace,
1421 version: self.version,
1422 final_default: self.final_default,
1423 block_default: self.block_default,
1424 attribute_form_default: self.attribute_form_default,
1425 element_form_default: self.element_form_default,
1426 default_attributes: self.default_attributes,
1427 xpath_default_namespace: self.xpath_default_namespace,
1428 id: self.id,
1429 lang: self.lang,
1430 content: self.content,
1431 })
1432 }
1433 }
1434 #[derive(Debug)]
1435 pub struct SchemaContentDeserializer {
1436 state: Box<SchemaContentDeserializerState>,
1437 }
1438 #[derive(Debug)]
1439 pub enum SchemaContentDeserializerState {
1440 Init__,
1441 Include(
1442 Option<super::Include>,
1443 Option<<super::Include as WithDeserializer>::Deserializer>,
1444 ),
1445 Import(
1446 Option<super::Import>,
1447 Option<<super::Import as WithDeserializer>::Deserializer>,
1448 ),
1449 Redefine(
1450 Option<super::Redefine>,
1451 Option<<super::Redefine as WithDeserializer>::Deserializer>,
1452 ),
1453 Override(
1454 Option<super::Override>,
1455 Option<<super::Override as WithDeserializer>::Deserializer>,
1456 ),
1457 Annotation(
1458 Option<super::Annotation>,
1459 Option<<super::Annotation as WithDeserializer>::Deserializer>,
1460 ),
1461 DefaultOpenContent(
1462 Option<super::DefaultOpenContent>,
1463 Option<<super::DefaultOpenContent as WithDeserializer>::Deserializer>,
1464 ),
1465 SimpleType(
1466 Option<super::SimpleBaseType>,
1467 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
1468 ),
1469 ComplexType(
1470 Option<super::ComplexBaseType>,
1471 Option<<super::ComplexBaseType as WithDeserializer>::Deserializer>,
1472 ),
1473 Group(
1474 Option<super::GroupType>,
1475 Option<<super::GroupType as WithDeserializer>::Deserializer>,
1476 ),
1477 AttributeGroup(
1478 Option<super::AttributeGroupType>,
1479 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
1480 ),
1481 Element(
1482 Option<super::ElementType>,
1483 Option<<super::ElementType as WithDeserializer>::Deserializer>,
1484 ),
1485 Attribute(
1486 Option<super::AttributeType>,
1487 Option<<super::AttributeType as WithDeserializer>::Deserializer>,
1488 ),
1489 Notation(
1490 Option<super::Notation>,
1491 Option<<super::Notation as WithDeserializer>::Deserializer>,
1492 ),
1493 Done__(super::SchemaContent),
1494 Unknown__,
1495 }
1496 impl SchemaContentDeserializer {
1497 fn find_suitable<'de, R>(
1498 &mut self,
1499 reader: &R,
1500 event: Event<'de>,
1501 fallback: &mut Option<SchemaContentDeserializerState>,
1502 ) -> Result<ElementHandlerOutput<'de>, Error>
1503 where
1504 R: DeserializeReader,
1505 {
1506 let (Event::Start(x) | Event::Empty(x)) = &event else {
1507 *self.state = fallback
1508 .take()
1509 .unwrap_or(SchemaContentDeserializerState::Init__);
1510 return Ok(ElementHandlerOutput::return_to_parent(event, false));
1511 };
1512 if matches!(
1513 reader.resolve_local_name(x.name(), &super::NS_XS),
1514 Some(b"include")
1515 ) {
1516 let output =
1517 <super::Include as WithDeserializer>::Deserializer::init(reader, event)?;
1518 return self.handle_include(reader, Default::default(), output, &mut *fallback);
1519 }
1520 if matches!(
1521 reader.resolve_local_name(x.name(), &super::NS_XS),
1522 Some(b"import")
1523 ) {
1524 let output =
1525 <super::Import as WithDeserializer>::Deserializer::init(reader, event)?;
1526 return self.handle_import(reader, Default::default(), output, &mut *fallback);
1527 }
1528 if matches!(
1529 reader.resolve_local_name(x.name(), &super::NS_XS),
1530 Some(b"redefine")
1531 ) {
1532 let output =
1533 <super::Redefine as WithDeserializer>::Deserializer::init(reader, event)?;
1534 return self.handle_redefine(reader, Default::default(), output, &mut *fallback);
1535 }
1536 if matches!(
1537 reader.resolve_local_name(x.name(), &super::NS_XS),
1538 Some(b"override")
1539 ) {
1540 let output =
1541 <super::Override as WithDeserializer>::Deserializer::init(reader, event)?;
1542 return self.handle_override_(reader, Default::default(), output, &mut *fallback);
1543 }
1544 if matches!(
1545 reader.resolve_local_name(x.name(), &super::NS_XS),
1546 Some(b"annotation")
1547 ) {
1548 let output =
1549 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
1550 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
1551 }
1552 if matches!(
1553 reader.resolve_local_name(x.name(), &super::NS_XS),
1554 Some(b"defaultOpenContent")
1555 ) {
1556 let output = <super::DefaultOpenContent as WithDeserializer>::Deserializer::init(
1557 reader, event,
1558 )?;
1559 return self.handle_default_open_content(
1560 reader,
1561 Default::default(),
1562 output,
1563 &mut *fallback,
1564 );
1565 }
1566 if matches!(
1567 reader.resolve_local_name(x.name(), &super::NS_XS),
1568 Some(b"simpleType")
1569 ) {
1570 let output =
1571 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(reader, event)?;
1572 return self.handle_simple_type(reader, Default::default(), output, &mut *fallback);
1573 }
1574 if matches!(
1575 reader.resolve_local_name(x.name(), &super::NS_XS),
1576 Some(b"complexType")
1577 ) {
1578 let output = <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
1579 reader, event,
1580 )?;
1581 return self.handle_complex_type(
1582 reader,
1583 Default::default(),
1584 output,
1585 &mut *fallback,
1586 );
1587 }
1588 if matches!(
1589 reader.resolve_local_name(x.name(), &super::NS_XS),
1590 Some(b"group")
1591 ) {
1592 let output =
1593 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
1594 return self.handle_group(reader, Default::default(), output, &mut *fallback);
1595 }
1596 if matches!(
1597 reader.resolve_local_name(x.name(), &super::NS_XS),
1598 Some(b"attributeGroup")
1599 ) {
1600 let output = <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
1601 reader, event,
1602 )?;
1603 return self.handle_attribute_group(
1604 reader,
1605 Default::default(),
1606 output,
1607 &mut *fallback,
1608 );
1609 }
1610 if matches!(
1611 reader.resolve_local_name(x.name(), &super::NS_XS),
1612 Some(b"element")
1613 ) {
1614 let output =
1615 <super::ElementType as WithDeserializer>::Deserializer::init(reader, event)?;
1616 return self.handle_element(reader, Default::default(), output, &mut *fallback);
1617 }
1618 if matches!(
1619 reader.resolve_local_name(x.name(), &super::NS_XS),
1620 Some(b"attribute")
1621 ) {
1622 let output =
1623 <super::AttributeType as WithDeserializer>::Deserializer::init(reader, event)?;
1624 return self.handle_attribute(reader, Default::default(), output, &mut *fallback);
1625 }
1626 if matches!(
1627 reader.resolve_local_name(x.name(), &super::NS_XS),
1628 Some(b"notation")
1629 ) {
1630 let output =
1631 <super::Notation as WithDeserializer>::Deserializer::init(reader, event)?;
1632 return self.handle_notation(reader, Default::default(), output, &mut *fallback);
1633 }
1634 *self.state = fallback
1635 .take()
1636 .unwrap_or(SchemaContentDeserializerState::Init__);
1637 Ok(ElementHandlerOutput::return_to_parent(event, false))
1638 }
1639 fn finish_state<R>(
1640 reader: &R,
1641 state: SchemaContentDeserializerState,
1642 ) -> Result<super::SchemaContent, Error>
1643 where
1644 R: DeserializeReader,
1645 {
1646 use SchemaContentDeserializerState as S;
1647 match state {
1648 S::Init__ => Err(ErrorKind::MissingContent.into()),
1649 S::Include(mut values, deserializer) => {
1650 if let Some(deserializer) = deserializer {
1651 let value = deserializer.finish(reader)?;
1652 SchemaContentDeserializer::store_include(&mut values, value)?;
1653 }
1654 Ok(super::SchemaContent::Include(values.ok_or_else(|| {
1655 ErrorKind::MissingElement("include".into())
1656 })?))
1657 }
1658 S::Import(mut values, deserializer) => {
1659 if let Some(deserializer) = deserializer {
1660 let value = deserializer.finish(reader)?;
1661 SchemaContentDeserializer::store_import(&mut values, value)?;
1662 }
1663 Ok(super::SchemaContent::Import(values.ok_or_else(|| {
1664 ErrorKind::MissingElement("import".into())
1665 })?))
1666 }
1667 S::Redefine(mut values, deserializer) => {
1668 if let Some(deserializer) = deserializer {
1669 let value = deserializer.finish(reader)?;
1670 SchemaContentDeserializer::store_redefine(&mut values, value)?;
1671 }
1672 Ok(super::SchemaContent::Redefine(values.ok_or_else(|| {
1673 ErrorKind::MissingElement("redefine".into())
1674 })?))
1675 }
1676 S::Override(mut values, deserializer) => {
1677 if let Some(deserializer) = deserializer {
1678 let value = deserializer.finish(reader)?;
1679 SchemaContentDeserializer::store_override_(&mut values, value)?;
1680 }
1681 Ok(super::SchemaContent::Override(values.ok_or_else(|| {
1682 ErrorKind::MissingElement("override".into())
1683 })?))
1684 }
1685 S::Annotation(mut values, deserializer) => {
1686 if let Some(deserializer) = deserializer {
1687 let value = deserializer.finish(reader)?;
1688 SchemaContentDeserializer::store_annotation(&mut values, value)?;
1689 }
1690 Ok(super::SchemaContent::Annotation(values.ok_or_else(
1691 || ErrorKind::MissingElement("annotation".into()),
1692 )?))
1693 }
1694 S::DefaultOpenContent(mut values, deserializer) => {
1695 if let Some(deserializer) = deserializer {
1696 let value = deserializer.finish(reader)?;
1697 SchemaContentDeserializer::store_default_open_content(&mut values, value)?;
1698 }
1699 Ok(super::SchemaContent::DefaultOpenContent(
1700 values.ok_or_else(|| {
1701 ErrorKind::MissingElement("defaultOpenContent".into())
1702 })?,
1703 ))
1704 }
1705 S::SimpleType(mut values, deserializer) => {
1706 if let Some(deserializer) = deserializer {
1707 let value = deserializer.finish(reader)?;
1708 SchemaContentDeserializer::store_simple_type(&mut values, value)?;
1709 }
1710 Ok(super::SchemaContent::SimpleType(values.ok_or_else(
1711 || ErrorKind::MissingElement("simpleType".into()),
1712 )?))
1713 }
1714 S::ComplexType(mut values, deserializer) => {
1715 if let Some(deserializer) = deserializer {
1716 let value = deserializer.finish(reader)?;
1717 SchemaContentDeserializer::store_complex_type(&mut values, value)?;
1718 }
1719 Ok(super::SchemaContent::ComplexType(values.ok_or_else(
1720 || ErrorKind::MissingElement("complexType".into()),
1721 )?))
1722 }
1723 S::Group(mut values, deserializer) => {
1724 if let Some(deserializer) = deserializer {
1725 let value = deserializer.finish(reader)?;
1726 SchemaContentDeserializer::store_group(&mut values, value)?;
1727 }
1728 Ok(super::SchemaContent::Group(values.ok_or_else(|| {
1729 ErrorKind::MissingElement("group".into())
1730 })?))
1731 }
1732 S::AttributeGroup(mut values, deserializer) => {
1733 if let Some(deserializer) = deserializer {
1734 let value = deserializer.finish(reader)?;
1735 SchemaContentDeserializer::store_attribute_group(&mut values, value)?;
1736 }
1737 Ok(super::SchemaContent::AttributeGroup(values.ok_or_else(
1738 || ErrorKind::MissingElement("attributeGroup".into()),
1739 )?))
1740 }
1741 S::Element(mut values, deserializer) => {
1742 if let Some(deserializer) = deserializer {
1743 let value = deserializer.finish(reader)?;
1744 SchemaContentDeserializer::store_element(&mut values, value)?;
1745 }
1746 Ok(super::SchemaContent::Element(values.ok_or_else(|| {
1747 ErrorKind::MissingElement("element".into())
1748 })?))
1749 }
1750 S::Attribute(mut values, deserializer) => {
1751 if let Some(deserializer) = deserializer {
1752 let value = deserializer.finish(reader)?;
1753 SchemaContentDeserializer::store_attribute(&mut values, value)?;
1754 }
1755 Ok(super::SchemaContent::Attribute(values.ok_or_else(
1756 || ErrorKind::MissingElement("attribute".into()),
1757 )?))
1758 }
1759 S::Notation(mut values, deserializer) => {
1760 if let Some(deserializer) = deserializer {
1761 let value = deserializer.finish(reader)?;
1762 SchemaContentDeserializer::store_notation(&mut values, value)?;
1763 }
1764 Ok(super::SchemaContent::Notation(values.ok_or_else(|| {
1765 ErrorKind::MissingElement("notation".into())
1766 })?))
1767 }
1768 S::Done__(data) => Ok(data),
1769 S::Unknown__ => unreachable!(),
1770 }
1771 }
1772 fn store_include(
1773 values: &mut Option<super::Include>,
1774 value: super::Include,
1775 ) -> Result<(), Error> {
1776 if values.is_some() {
1777 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1778 b"include",
1779 )))?;
1780 }
1781 *values = Some(value);
1782 Ok(())
1783 }
1784 fn store_import(
1785 values: &mut Option<super::Import>,
1786 value: super::Import,
1787 ) -> Result<(), Error> {
1788 if values.is_some() {
1789 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1790 b"import",
1791 )))?;
1792 }
1793 *values = Some(value);
1794 Ok(())
1795 }
1796 fn store_redefine(
1797 values: &mut Option<super::Redefine>,
1798 value: super::Redefine,
1799 ) -> Result<(), Error> {
1800 if values.is_some() {
1801 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1802 b"redefine",
1803 )))?;
1804 }
1805 *values = Some(value);
1806 Ok(())
1807 }
1808 fn store_override_(
1809 values: &mut Option<super::Override>,
1810 value: super::Override,
1811 ) -> Result<(), Error> {
1812 if values.is_some() {
1813 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1814 b"override",
1815 )))?;
1816 }
1817 *values = Some(value);
1818 Ok(())
1819 }
1820 fn store_annotation(
1821 values: &mut Option<super::Annotation>,
1822 value: super::Annotation,
1823 ) -> Result<(), Error> {
1824 if values.is_some() {
1825 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1826 b"annotation",
1827 )))?;
1828 }
1829 *values = Some(value);
1830 Ok(())
1831 }
1832 fn store_default_open_content(
1833 values: &mut Option<super::DefaultOpenContent>,
1834 value: super::DefaultOpenContent,
1835 ) -> Result<(), Error> {
1836 if values.is_some() {
1837 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1838 b"defaultOpenContent",
1839 )))?;
1840 }
1841 *values = Some(value);
1842 Ok(())
1843 }
1844 fn store_simple_type(
1845 values: &mut Option<super::SimpleBaseType>,
1846 value: super::SimpleBaseType,
1847 ) -> Result<(), Error> {
1848 if values.is_some() {
1849 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1850 b"simpleType",
1851 )))?;
1852 }
1853 *values = Some(value);
1854 Ok(())
1855 }
1856 fn store_complex_type(
1857 values: &mut Option<super::ComplexBaseType>,
1858 value: super::ComplexBaseType,
1859 ) -> Result<(), Error> {
1860 if values.is_some() {
1861 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1862 b"complexType",
1863 )))?;
1864 }
1865 *values = Some(value);
1866 Ok(())
1867 }
1868 fn store_group(
1869 values: &mut Option<super::GroupType>,
1870 value: super::GroupType,
1871 ) -> Result<(), Error> {
1872 if values.is_some() {
1873 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1874 b"group",
1875 )))?;
1876 }
1877 *values = Some(value);
1878 Ok(())
1879 }
1880 fn store_attribute_group(
1881 values: &mut Option<super::AttributeGroupType>,
1882 value: super::AttributeGroupType,
1883 ) -> Result<(), Error> {
1884 if values.is_some() {
1885 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1886 b"attributeGroup",
1887 )))?;
1888 }
1889 *values = Some(value);
1890 Ok(())
1891 }
1892 fn store_element(
1893 values: &mut Option<super::ElementType>,
1894 value: super::ElementType,
1895 ) -> Result<(), Error> {
1896 if values.is_some() {
1897 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1898 b"element",
1899 )))?;
1900 }
1901 *values = Some(value);
1902 Ok(())
1903 }
1904 fn store_attribute(
1905 values: &mut Option<super::AttributeType>,
1906 value: super::AttributeType,
1907 ) -> Result<(), Error> {
1908 if values.is_some() {
1909 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1910 b"attribute",
1911 )))?;
1912 }
1913 *values = Some(value);
1914 Ok(())
1915 }
1916 fn store_notation(
1917 values: &mut Option<super::Notation>,
1918 value: super::Notation,
1919 ) -> Result<(), Error> {
1920 if values.is_some() {
1921 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1922 b"notation",
1923 )))?;
1924 }
1925 *values = Some(value);
1926 Ok(())
1927 }
1928 fn handle_include<'de, R>(
1929 &mut self,
1930 reader: &R,
1931 mut values: Option<super::Include>,
1932 output: DeserializerOutput<'de, super::Include>,
1933 fallback: &mut Option<SchemaContentDeserializerState>,
1934 ) -> Result<ElementHandlerOutput<'de>, Error>
1935 where
1936 R: DeserializeReader,
1937 {
1938 let DeserializerOutput {
1939 artifact,
1940 event,
1941 allow_any,
1942 } = output;
1943 if artifact.is_none() {
1944 *self.state = match fallback.take() {
1945 None => SchemaContentDeserializerState::Init__,
1946 Some(SchemaContentDeserializerState::Include(_, Some(deserializer))) => {
1947 SchemaContentDeserializerState::Include(values, Some(deserializer))
1948 }
1949 _ => unreachable!(),
1950 };
1951 return Ok(ElementHandlerOutput::break_(event, allow_any));
1952 }
1953 match fallback.take() {
1954 None => (),
1955 Some(SchemaContentDeserializerState::Include(_, Some(deserializer))) => {
1956 let data = deserializer.finish(reader)?;
1957 SchemaContentDeserializer::store_include(&mut values, data)?;
1958 }
1959 Some(_) => unreachable!(),
1960 }
1961 Ok(match artifact {
1962 DeserializerArtifact::None => unreachable!(),
1963 DeserializerArtifact::Data(data) => {
1964 SchemaContentDeserializer::store_include(&mut values, data)?;
1965 let data = SchemaContentDeserializer::finish_state(
1966 reader,
1967 SchemaContentDeserializerState::Include(values, None),
1968 )?;
1969 *self.state = SchemaContentDeserializerState::Done__(data);
1970 ElementHandlerOutput::Break { event, allow_any }
1971 }
1972 DeserializerArtifact::Deserializer(deserializer) => {
1973 *self.state =
1974 SchemaContentDeserializerState::Include(values, Some(deserializer));
1975 ElementHandlerOutput::from_event_end(event, allow_any)
1976 }
1977 })
1978 }
1979 fn handle_import<'de, R>(
1980 &mut self,
1981 reader: &R,
1982 mut values: Option<super::Import>,
1983 output: DeserializerOutput<'de, super::Import>,
1984 fallback: &mut Option<SchemaContentDeserializerState>,
1985 ) -> Result<ElementHandlerOutput<'de>, Error>
1986 where
1987 R: DeserializeReader,
1988 {
1989 let DeserializerOutput {
1990 artifact,
1991 event,
1992 allow_any,
1993 } = output;
1994 if artifact.is_none() {
1995 *self.state = match fallback.take() {
1996 None => SchemaContentDeserializerState::Init__,
1997 Some(SchemaContentDeserializerState::Import(_, Some(deserializer))) => {
1998 SchemaContentDeserializerState::Import(values, Some(deserializer))
1999 }
2000 _ => unreachable!(),
2001 };
2002 return Ok(ElementHandlerOutput::break_(event, allow_any));
2003 }
2004 match fallback.take() {
2005 None => (),
2006 Some(SchemaContentDeserializerState::Import(_, Some(deserializer))) => {
2007 let data = deserializer.finish(reader)?;
2008 SchemaContentDeserializer::store_import(&mut values, data)?;
2009 }
2010 Some(_) => unreachable!(),
2011 }
2012 Ok(match artifact {
2013 DeserializerArtifact::None => unreachable!(),
2014 DeserializerArtifact::Data(data) => {
2015 SchemaContentDeserializer::store_import(&mut values, data)?;
2016 let data = SchemaContentDeserializer::finish_state(
2017 reader,
2018 SchemaContentDeserializerState::Import(values, None),
2019 )?;
2020 *self.state = SchemaContentDeserializerState::Done__(data);
2021 ElementHandlerOutput::Break { event, allow_any }
2022 }
2023 DeserializerArtifact::Deserializer(deserializer) => {
2024 *self.state =
2025 SchemaContentDeserializerState::Import(values, Some(deserializer));
2026 ElementHandlerOutput::from_event_end(event, allow_any)
2027 }
2028 })
2029 }
2030 fn handle_redefine<'de, R>(
2031 &mut self,
2032 reader: &R,
2033 mut values: Option<super::Redefine>,
2034 output: DeserializerOutput<'de, super::Redefine>,
2035 fallback: &mut Option<SchemaContentDeserializerState>,
2036 ) -> Result<ElementHandlerOutput<'de>, Error>
2037 where
2038 R: DeserializeReader,
2039 {
2040 let DeserializerOutput {
2041 artifact,
2042 event,
2043 allow_any,
2044 } = output;
2045 if artifact.is_none() {
2046 *self.state = match fallback.take() {
2047 None => SchemaContentDeserializerState::Init__,
2048 Some(SchemaContentDeserializerState::Redefine(_, Some(deserializer))) => {
2049 SchemaContentDeserializerState::Redefine(values, Some(deserializer))
2050 }
2051 _ => unreachable!(),
2052 };
2053 return Ok(ElementHandlerOutput::break_(event, allow_any));
2054 }
2055 match fallback.take() {
2056 None => (),
2057 Some(SchemaContentDeserializerState::Redefine(_, Some(deserializer))) => {
2058 let data = deserializer.finish(reader)?;
2059 SchemaContentDeserializer::store_redefine(&mut values, data)?;
2060 }
2061 Some(_) => unreachable!(),
2062 }
2063 Ok(match artifact {
2064 DeserializerArtifact::None => unreachable!(),
2065 DeserializerArtifact::Data(data) => {
2066 SchemaContentDeserializer::store_redefine(&mut values, data)?;
2067 let data = SchemaContentDeserializer::finish_state(
2068 reader,
2069 SchemaContentDeserializerState::Redefine(values, None),
2070 )?;
2071 *self.state = SchemaContentDeserializerState::Done__(data);
2072 ElementHandlerOutput::Break { event, allow_any }
2073 }
2074 DeserializerArtifact::Deserializer(deserializer) => {
2075 *self.state =
2076 SchemaContentDeserializerState::Redefine(values, Some(deserializer));
2077 ElementHandlerOutput::from_event_end(event, allow_any)
2078 }
2079 })
2080 }
2081 fn handle_override_<'de, R>(
2082 &mut self,
2083 reader: &R,
2084 mut values: Option<super::Override>,
2085 output: DeserializerOutput<'de, super::Override>,
2086 fallback: &mut Option<SchemaContentDeserializerState>,
2087 ) -> Result<ElementHandlerOutput<'de>, Error>
2088 where
2089 R: DeserializeReader,
2090 {
2091 let DeserializerOutput {
2092 artifact,
2093 event,
2094 allow_any,
2095 } = output;
2096 if artifact.is_none() {
2097 *self.state = match fallback.take() {
2098 None => SchemaContentDeserializerState::Init__,
2099 Some(SchemaContentDeserializerState::Override(_, Some(deserializer))) => {
2100 SchemaContentDeserializerState::Override(values, Some(deserializer))
2101 }
2102 _ => unreachable!(),
2103 };
2104 return Ok(ElementHandlerOutput::break_(event, allow_any));
2105 }
2106 match fallback.take() {
2107 None => (),
2108 Some(SchemaContentDeserializerState::Override(_, Some(deserializer))) => {
2109 let data = deserializer.finish(reader)?;
2110 SchemaContentDeserializer::store_override_(&mut values, data)?;
2111 }
2112 Some(_) => unreachable!(),
2113 }
2114 Ok(match artifact {
2115 DeserializerArtifact::None => unreachable!(),
2116 DeserializerArtifact::Data(data) => {
2117 SchemaContentDeserializer::store_override_(&mut values, data)?;
2118 let data = SchemaContentDeserializer::finish_state(
2119 reader,
2120 SchemaContentDeserializerState::Override(values, None),
2121 )?;
2122 *self.state = SchemaContentDeserializerState::Done__(data);
2123 ElementHandlerOutput::Break { event, allow_any }
2124 }
2125 DeserializerArtifact::Deserializer(deserializer) => {
2126 *self.state =
2127 SchemaContentDeserializerState::Override(values, Some(deserializer));
2128 ElementHandlerOutput::from_event_end(event, allow_any)
2129 }
2130 })
2131 }
2132 fn handle_annotation<'de, R>(
2133 &mut self,
2134 reader: &R,
2135 mut values: Option<super::Annotation>,
2136 output: DeserializerOutput<'de, super::Annotation>,
2137 fallback: &mut Option<SchemaContentDeserializerState>,
2138 ) -> Result<ElementHandlerOutput<'de>, Error>
2139 where
2140 R: DeserializeReader,
2141 {
2142 let DeserializerOutput {
2143 artifact,
2144 event,
2145 allow_any,
2146 } = output;
2147 if artifact.is_none() {
2148 *self.state = match fallback.take() {
2149 None => SchemaContentDeserializerState::Init__,
2150 Some(SchemaContentDeserializerState::Annotation(_, Some(deserializer))) => {
2151 SchemaContentDeserializerState::Annotation(values, Some(deserializer))
2152 }
2153 _ => unreachable!(),
2154 };
2155 return Ok(ElementHandlerOutput::break_(event, allow_any));
2156 }
2157 match fallback.take() {
2158 None => (),
2159 Some(SchemaContentDeserializerState::Annotation(_, Some(deserializer))) => {
2160 let data = deserializer.finish(reader)?;
2161 SchemaContentDeserializer::store_annotation(&mut values, data)?;
2162 }
2163 Some(_) => unreachable!(),
2164 }
2165 Ok(match artifact {
2166 DeserializerArtifact::None => unreachable!(),
2167 DeserializerArtifact::Data(data) => {
2168 SchemaContentDeserializer::store_annotation(&mut values, data)?;
2169 let data = SchemaContentDeserializer::finish_state(
2170 reader,
2171 SchemaContentDeserializerState::Annotation(values, None),
2172 )?;
2173 *self.state = SchemaContentDeserializerState::Done__(data);
2174 ElementHandlerOutput::Break { event, allow_any }
2175 }
2176 DeserializerArtifact::Deserializer(deserializer) => {
2177 *self.state =
2178 SchemaContentDeserializerState::Annotation(values, Some(deserializer));
2179 ElementHandlerOutput::from_event_end(event, allow_any)
2180 }
2181 })
2182 }
2183 fn handle_default_open_content<'de, R>(
2184 &mut self,
2185 reader: &R,
2186 mut values: Option<super::DefaultOpenContent>,
2187 output: DeserializerOutput<'de, super::DefaultOpenContent>,
2188 fallback: &mut Option<SchemaContentDeserializerState>,
2189 ) -> Result<ElementHandlerOutput<'de>, Error>
2190 where
2191 R: DeserializeReader,
2192 {
2193 let DeserializerOutput {
2194 artifact,
2195 event,
2196 allow_any,
2197 } = output;
2198 if artifact.is_none() {
2199 *self.state = match fallback.take() {
2200 None => SchemaContentDeserializerState::Init__,
2201 Some(SchemaContentDeserializerState::DefaultOpenContent(
2202 _,
2203 Some(deserializer),
2204 )) => SchemaContentDeserializerState::DefaultOpenContent(
2205 values,
2206 Some(deserializer),
2207 ),
2208 _ => unreachable!(),
2209 };
2210 return Ok(ElementHandlerOutput::break_(event, allow_any));
2211 }
2212 match fallback.take() {
2213 None => (),
2214 Some(SchemaContentDeserializerState::DefaultOpenContent(_, Some(deserializer))) => {
2215 let data = deserializer.finish(reader)?;
2216 SchemaContentDeserializer::store_default_open_content(&mut values, data)?;
2217 }
2218 Some(_) => unreachable!(),
2219 }
2220 Ok(match artifact {
2221 DeserializerArtifact::None => unreachable!(),
2222 DeserializerArtifact::Data(data) => {
2223 SchemaContentDeserializer::store_default_open_content(&mut values, data)?;
2224 let data = SchemaContentDeserializer::finish_state(
2225 reader,
2226 SchemaContentDeserializerState::DefaultOpenContent(values, None),
2227 )?;
2228 *self.state = SchemaContentDeserializerState::Done__(data);
2229 ElementHandlerOutput::Break { event, allow_any }
2230 }
2231 DeserializerArtifact::Deserializer(deserializer) => {
2232 *self.state = SchemaContentDeserializerState::DefaultOpenContent(
2233 values,
2234 Some(deserializer),
2235 );
2236 ElementHandlerOutput::from_event_end(event, allow_any)
2237 }
2238 })
2239 }
2240 fn handle_simple_type<'de, R>(
2241 &mut self,
2242 reader: &R,
2243 mut values: Option<super::SimpleBaseType>,
2244 output: DeserializerOutput<'de, super::SimpleBaseType>,
2245 fallback: &mut Option<SchemaContentDeserializerState>,
2246 ) -> Result<ElementHandlerOutput<'de>, Error>
2247 where
2248 R: DeserializeReader,
2249 {
2250 let DeserializerOutput {
2251 artifact,
2252 event,
2253 allow_any,
2254 } = output;
2255 if artifact.is_none() {
2256 *self.state = match fallback.take() {
2257 None => SchemaContentDeserializerState::Init__,
2258 Some(SchemaContentDeserializerState::SimpleType(_, Some(deserializer))) => {
2259 SchemaContentDeserializerState::SimpleType(values, Some(deserializer))
2260 }
2261 _ => unreachable!(),
2262 };
2263 return Ok(ElementHandlerOutput::break_(event, allow_any));
2264 }
2265 match fallback.take() {
2266 None => (),
2267 Some(SchemaContentDeserializerState::SimpleType(_, Some(deserializer))) => {
2268 let data = deserializer.finish(reader)?;
2269 SchemaContentDeserializer::store_simple_type(&mut values, data)?;
2270 }
2271 Some(_) => unreachable!(),
2272 }
2273 Ok(match artifact {
2274 DeserializerArtifact::None => unreachable!(),
2275 DeserializerArtifact::Data(data) => {
2276 SchemaContentDeserializer::store_simple_type(&mut values, data)?;
2277 let data = SchemaContentDeserializer::finish_state(
2278 reader,
2279 SchemaContentDeserializerState::SimpleType(values, None),
2280 )?;
2281 *self.state = SchemaContentDeserializerState::Done__(data);
2282 ElementHandlerOutput::Break { event, allow_any }
2283 }
2284 DeserializerArtifact::Deserializer(deserializer) => {
2285 *self.state =
2286 SchemaContentDeserializerState::SimpleType(values, Some(deserializer));
2287 ElementHandlerOutput::from_event_end(event, allow_any)
2288 }
2289 })
2290 }
2291 fn handle_complex_type<'de, R>(
2292 &mut self,
2293 reader: &R,
2294 mut values: Option<super::ComplexBaseType>,
2295 output: DeserializerOutput<'de, super::ComplexBaseType>,
2296 fallback: &mut Option<SchemaContentDeserializerState>,
2297 ) -> Result<ElementHandlerOutput<'de>, Error>
2298 where
2299 R: DeserializeReader,
2300 {
2301 let DeserializerOutput {
2302 artifact,
2303 event,
2304 allow_any,
2305 } = output;
2306 if artifact.is_none() {
2307 *self.state = match fallback.take() {
2308 None => SchemaContentDeserializerState::Init__,
2309 Some(SchemaContentDeserializerState::ComplexType(_, Some(deserializer))) => {
2310 SchemaContentDeserializerState::ComplexType(values, Some(deserializer))
2311 }
2312 _ => unreachable!(),
2313 };
2314 return Ok(ElementHandlerOutput::break_(event, allow_any));
2315 }
2316 match fallback.take() {
2317 None => (),
2318 Some(SchemaContentDeserializerState::ComplexType(_, Some(deserializer))) => {
2319 let data = deserializer.finish(reader)?;
2320 SchemaContentDeserializer::store_complex_type(&mut values, data)?;
2321 }
2322 Some(_) => unreachable!(),
2323 }
2324 Ok(match artifact {
2325 DeserializerArtifact::None => unreachable!(),
2326 DeserializerArtifact::Data(data) => {
2327 SchemaContentDeserializer::store_complex_type(&mut values, data)?;
2328 let data = SchemaContentDeserializer::finish_state(
2329 reader,
2330 SchemaContentDeserializerState::ComplexType(values, None),
2331 )?;
2332 *self.state = SchemaContentDeserializerState::Done__(data);
2333 ElementHandlerOutput::Break { event, allow_any }
2334 }
2335 DeserializerArtifact::Deserializer(deserializer) => {
2336 *self.state =
2337 SchemaContentDeserializerState::ComplexType(values, Some(deserializer));
2338 ElementHandlerOutput::from_event_end(event, allow_any)
2339 }
2340 })
2341 }
2342 fn handle_group<'de, R>(
2343 &mut self,
2344 reader: &R,
2345 mut values: Option<super::GroupType>,
2346 output: DeserializerOutput<'de, super::GroupType>,
2347 fallback: &mut Option<SchemaContentDeserializerState>,
2348 ) -> Result<ElementHandlerOutput<'de>, Error>
2349 where
2350 R: DeserializeReader,
2351 {
2352 let DeserializerOutput {
2353 artifact,
2354 event,
2355 allow_any,
2356 } = output;
2357 if artifact.is_none() {
2358 *self.state = match fallback.take() {
2359 None => SchemaContentDeserializerState::Init__,
2360 Some(SchemaContentDeserializerState::Group(_, Some(deserializer))) => {
2361 SchemaContentDeserializerState::Group(values, Some(deserializer))
2362 }
2363 _ => unreachable!(),
2364 };
2365 return Ok(ElementHandlerOutput::break_(event, allow_any));
2366 }
2367 match fallback.take() {
2368 None => (),
2369 Some(SchemaContentDeserializerState::Group(_, Some(deserializer))) => {
2370 let data = deserializer.finish(reader)?;
2371 SchemaContentDeserializer::store_group(&mut values, data)?;
2372 }
2373 Some(_) => unreachable!(),
2374 }
2375 Ok(match artifact {
2376 DeserializerArtifact::None => unreachable!(),
2377 DeserializerArtifact::Data(data) => {
2378 SchemaContentDeserializer::store_group(&mut values, data)?;
2379 let data = SchemaContentDeserializer::finish_state(
2380 reader,
2381 SchemaContentDeserializerState::Group(values, None),
2382 )?;
2383 *self.state = SchemaContentDeserializerState::Done__(data);
2384 ElementHandlerOutput::Break { event, allow_any }
2385 }
2386 DeserializerArtifact::Deserializer(deserializer) => {
2387 *self.state = SchemaContentDeserializerState::Group(values, Some(deserializer));
2388 ElementHandlerOutput::from_event_end(event, allow_any)
2389 }
2390 })
2391 }
2392 fn handle_attribute_group<'de, R>(
2393 &mut self,
2394 reader: &R,
2395 mut values: Option<super::AttributeGroupType>,
2396 output: DeserializerOutput<'de, super::AttributeGroupType>,
2397 fallback: &mut Option<SchemaContentDeserializerState>,
2398 ) -> Result<ElementHandlerOutput<'de>, Error>
2399 where
2400 R: DeserializeReader,
2401 {
2402 let DeserializerOutput {
2403 artifact,
2404 event,
2405 allow_any,
2406 } = output;
2407 if artifact.is_none() {
2408 *self.state = match fallback.take() {
2409 None => SchemaContentDeserializerState::Init__,
2410 Some(SchemaContentDeserializerState::AttributeGroup(_, Some(deserializer))) => {
2411 SchemaContentDeserializerState::AttributeGroup(values, Some(deserializer))
2412 }
2413 _ => unreachable!(),
2414 };
2415 return Ok(ElementHandlerOutput::break_(event, allow_any));
2416 }
2417 match fallback.take() {
2418 None => (),
2419 Some(SchemaContentDeserializerState::AttributeGroup(_, Some(deserializer))) => {
2420 let data = deserializer.finish(reader)?;
2421 SchemaContentDeserializer::store_attribute_group(&mut values, data)?;
2422 }
2423 Some(_) => unreachable!(),
2424 }
2425 Ok(match artifact {
2426 DeserializerArtifact::None => unreachable!(),
2427 DeserializerArtifact::Data(data) => {
2428 SchemaContentDeserializer::store_attribute_group(&mut values, data)?;
2429 let data = SchemaContentDeserializer::finish_state(
2430 reader,
2431 SchemaContentDeserializerState::AttributeGroup(values, None),
2432 )?;
2433 *self.state = SchemaContentDeserializerState::Done__(data);
2434 ElementHandlerOutput::Break { event, allow_any }
2435 }
2436 DeserializerArtifact::Deserializer(deserializer) => {
2437 *self.state =
2438 SchemaContentDeserializerState::AttributeGroup(values, Some(deserializer));
2439 ElementHandlerOutput::from_event_end(event, allow_any)
2440 }
2441 })
2442 }
2443 fn handle_element<'de, R>(
2444 &mut self,
2445 reader: &R,
2446 mut values: Option<super::ElementType>,
2447 output: DeserializerOutput<'de, super::ElementType>,
2448 fallback: &mut Option<SchemaContentDeserializerState>,
2449 ) -> Result<ElementHandlerOutput<'de>, Error>
2450 where
2451 R: DeserializeReader,
2452 {
2453 let DeserializerOutput {
2454 artifact,
2455 event,
2456 allow_any,
2457 } = output;
2458 if artifact.is_none() {
2459 *self.state = match fallback.take() {
2460 None => SchemaContentDeserializerState::Init__,
2461 Some(SchemaContentDeserializerState::Element(_, Some(deserializer))) => {
2462 SchemaContentDeserializerState::Element(values, Some(deserializer))
2463 }
2464 _ => unreachable!(),
2465 };
2466 return Ok(ElementHandlerOutput::break_(event, allow_any));
2467 }
2468 match fallback.take() {
2469 None => (),
2470 Some(SchemaContentDeserializerState::Element(_, Some(deserializer))) => {
2471 let data = deserializer.finish(reader)?;
2472 SchemaContentDeserializer::store_element(&mut values, data)?;
2473 }
2474 Some(_) => unreachable!(),
2475 }
2476 Ok(match artifact {
2477 DeserializerArtifact::None => unreachable!(),
2478 DeserializerArtifact::Data(data) => {
2479 SchemaContentDeserializer::store_element(&mut values, data)?;
2480 let data = SchemaContentDeserializer::finish_state(
2481 reader,
2482 SchemaContentDeserializerState::Element(values, None),
2483 )?;
2484 *self.state = SchemaContentDeserializerState::Done__(data);
2485 ElementHandlerOutput::Break { event, allow_any }
2486 }
2487 DeserializerArtifact::Deserializer(deserializer) => {
2488 *self.state =
2489 SchemaContentDeserializerState::Element(values, Some(deserializer));
2490 ElementHandlerOutput::from_event_end(event, allow_any)
2491 }
2492 })
2493 }
2494 fn handle_attribute<'de, R>(
2495 &mut self,
2496 reader: &R,
2497 mut values: Option<super::AttributeType>,
2498 output: DeserializerOutput<'de, super::AttributeType>,
2499 fallback: &mut Option<SchemaContentDeserializerState>,
2500 ) -> Result<ElementHandlerOutput<'de>, Error>
2501 where
2502 R: DeserializeReader,
2503 {
2504 let DeserializerOutput {
2505 artifact,
2506 event,
2507 allow_any,
2508 } = output;
2509 if artifact.is_none() {
2510 *self.state = match fallback.take() {
2511 None => SchemaContentDeserializerState::Init__,
2512 Some(SchemaContentDeserializerState::Attribute(_, Some(deserializer))) => {
2513 SchemaContentDeserializerState::Attribute(values, Some(deserializer))
2514 }
2515 _ => unreachable!(),
2516 };
2517 return Ok(ElementHandlerOutput::break_(event, allow_any));
2518 }
2519 match fallback.take() {
2520 None => (),
2521 Some(SchemaContentDeserializerState::Attribute(_, Some(deserializer))) => {
2522 let data = deserializer.finish(reader)?;
2523 SchemaContentDeserializer::store_attribute(&mut values, data)?;
2524 }
2525 Some(_) => unreachable!(),
2526 }
2527 Ok(match artifact {
2528 DeserializerArtifact::None => unreachable!(),
2529 DeserializerArtifact::Data(data) => {
2530 SchemaContentDeserializer::store_attribute(&mut values, data)?;
2531 let data = SchemaContentDeserializer::finish_state(
2532 reader,
2533 SchemaContentDeserializerState::Attribute(values, None),
2534 )?;
2535 *self.state = SchemaContentDeserializerState::Done__(data);
2536 ElementHandlerOutput::Break { event, allow_any }
2537 }
2538 DeserializerArtifact::Deserializer(deserializer) => {
2539 *self.state =
2540 SchemaContentDeserializerState::Attribute(values, Some(deserializer));
2541 ElementHandlerOutput::from_event_end(event, allow_any)
2542 }
2543 })
2544 }
2545 fn handle_notation<'de, R>(
2546 &mut self,
2547 reader: &R,
2548 mut values: Option<super::Notation>,
2549 output: DeserializerOutput<'de, super::Notation>,
2550 fallback: &mut Option<SchemaContentDeserializerState>,
2551 ) -> Result<ElementHandlerOutput<'de>, Error>
2552 where
2553 R: DeserializeReader,
2554 {
2555 let DeserializerOutput {
2556 artifact,
2557 event,
2558 allow_any,
2559 } = output;
2560 if artifact.is_none() {
2561 *self.state = match fallback.take() {
2562 None => SchemaContentDeserializerState::Init__,
2563 Some(SchemaContentDeserializerState::Notation(_, Some(deserializer))) => {
2564 SchemaContentDeserializerState::Notation(values, Some(deserializer))
2565 }
2566 _ => unreachable!(),
2567 };
2568 return Ok(ElementHandlerOutput::break_(event, allow_any));
2569 }
2570 match fallback.take() {
2571 None => (),
2572 Some(SchemaContentDeserializerState::Notation(_, Some(deserializer))) => {
2573 let data = deserializer.finish(reader)?;
2574 SchemaContentDeserializer::store_notation(&mut values, data)?;
2575 }
2576 Some(_) => unreachable!(),
2577 }
2578 Ok(match artifact {
2579 DeserializerArtifact::None => unreachable!(),
2580 DeserializerArtifact::Data(data) => {
2581 SchemaContentDeserializer::store_notation(&mut values, data)?;
2582 let data = SchemaContentDeserializer::finish_state(
2583 reader,
2584 SchemaContentDeserializerState::Notation(values, None),
2585 )?;
2586 *self.state = SchemaContentDeserializerState::Done__(data);
2587 ElementHandlerOutput::Break { event, allow_any }
2588 }
2589 DeserializerArtifact::Deserializer(deserializer) => {
2590 *self.state =
2591 SchemaContentDeserializerState::Notation(values, Some(deserializer));
2592 ElementHandlerOutput::from_event_end(event, allow_any)
2593 }
2594 })
2595 }
2596 }
2597 impl<'de> Deserializer<'de, super::SchemaContent> for Box<SchemaContentDeserializer> {
2598 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::SchemaContent>
2599 where
2600 R: DeserializeReader,
2601 {
2602 let deserializer = Box::new(SchemaContentDeserializer {
2603 state: Box::new(SchemaContentDeserializerState::Init__),
2604 });
2605 let mut output = deserializer.next(reader, event)?;
2606 output.artifact = match output.artifact {
2607 DeserializerArtifact::Deserializer(x)
2608 if matches!(&*x.state, SchemaContentDeserializerState::Init__) =>
2609 {
2610 DeserializerArtifact::None
2611 }
2612 artifact => artifact,
2613 };
2614 Ok(output)
2615 }
2616 fn next<R>(
2617 mut self,
2618 reader: &R,
2619 event: Event<'de>,
2620 ) -> DeserializerResult<'de, super::SchemaContent>
2621 where
2622 R: DeserializeReader,
2623 {
2624 use SchemaContentDeserializerState as S;
2625 let mut event = event;
2626 let mut fallback = None;
2627 let (event, allow_any) = loop {
2628 let state = replace(&mut *self.state, S::Unknown__);
2629 event = match (state, event) {
2630 (S::Include(values, Some(deserializer)), event) => {
2631 let output = deserializer.next(reader, event)?;
2632 match self.handle_include(reader, values, output, &mut fallback)? {
2633 ElementHandlerOutput::Break { event, allow_any } => {
2634 break (event, allow_any)
2635 }
2636 ElementHandlerOutput::Continue { event, .. } => event,
2637 }
2638 }
2639 (S::Import(values, Some(deserializer)), event) => {
2640 let output = deserializer.next(reader, event)?;
2641 match self.handle_import(reader, values, output, &mut fallback)? {
2642 ElementHandlerOutput::Break { event, allow_any } => {
2643 break (event, allow_any)
2644 }
2645 ElementHandlerOutput::Continue { event, .. } => event,
2646 }
2647 }
2648 (S::Redefine(values, Some(deserializer)), event) => {
2649 let output = deserializer.next(reader, event)?;
2650 match self.handle_redefine(reader, values, output, &mut fallback)? {
2651 ElementHandlerOutput::Break { event, allow_any } => {
2652 break (event, allow_any)
2653 }
2654 ElementHandlerOutput::Continue { event, .. } => event,
2655 }
2656 }
2657 (S::Override(values, Some(deserializer)), event) => {
2658 let output = deserializer.next(reader, event)?;
2659 match self.handle_override_(reader, values, output, &mut fallback)? {
2660 ElementHandlerOutput::Break { event, allow_any } => {
2661 break (event, allow_any)
2662 }
2663 ElementHandlerOutput::Continue { event, .. } => event,
2664 }
2665 }
2666 (S::Annotation(values, Some(deserializer)), event) => {
2667 let output = deserializer.next(reader, event)?;
2668 match self.handle_annotation(reader, values, output, &mut fallback)? {
2669 ElementHandlerOutput::Break { event, allow_any } => {
2670 break (event, allow_any)
2671 }
2672 ElementHandlerOutput::Continue { event, .. } => event,
2673 }
2674 }
2675 (S::DefaultOpenContent(values, Some(deserializer)), event) => {
2676 let output = deserializer.next(reader, event)?;
2677 match self.handle_default_open_content(
2678 reader,
2679 values,
2680 output,
2681 &mut fallback,
2682 )? {
2683 ElementHandlerOutput::Break { event, allow_any } => {
2684 break (event, allow_any)
2685 }
2686 ElementHandlerOutput::Continue { event, .. } => event,
2687 }
2688 }
2689 (S::SimpleType(values, Some(deserializer)), event) => {
2690 let output = deserializer.next(reader, event)?;
2691 match self.handle_simple_type(reader, values, output, &mut fallback)? {
2692 ElementHandlerOutput::Break { event, allow_any } => {
2693 break (event, allow_any)
2694 }
2695 ElementHandlerOutput::Continue { event, .. } => event,
2696 }
2697 }
2698 (S::ComplexType(values, Some(deserializer)), event) => {
2699 let output = deserializer.next(reader, event)?;
2700 match self.handle_complex_type(reader, values, output, &mut fallback)? {
2701 ElementHandlerOutput::Break { event, allow_any } => {
2702 break (event, allow_any)
2703 }
2704 ElementHandlerOutput::Continue { event, .. } => event,
2705 }
2706 }
2707 (S::Group(values, Some(deserializer)), event) => {
2708 let output = deserializer.next(reader, event)?;
2709 match self.handle_group(reader, values, output, &mut fallback)? {
2710 ElementHandlerOutput::Break { event, allow_any } => {
2711 break (event, allow_any)
2712 }
2713 ElementHandlerOutput::Continue { event, .. } => event,
2714 }
2715 }
2716 (S::AttributeGroup(values, Some(deserializer)), event) => {
2717 let output = deserializer.next(reader, event)?;
2718 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
2719 ElementHandlerOutput::Break { event, allow_any } => {
2720 break (event, allow_any)
2721 }
2722 ElementHandlerOutput::Continue { event, .. } => event,
2723 }
2724 }
2725 (S::Element(values, Some(deserializer)), event) => {
2726 let output = deserializer.next(reader, event)?;
2727 match self.handle_element(reader, values, output, &mut fallback)? {
2728 ElementHandlerOutput::Break { event, allow_any } => {
2729 break (event, allow_any)
2730 }
2731 ElementHandlerOutput::Continue { event, .. } => event,
2732 }
2733 }
2734 (S::Attribute(values, Some(deserializer)), event) => {
2735 let output = deserializer.next(reader, event)?;
2736 match self.handle_attribute(reader, values, output, &mut fallback)? {
2737 ElementHandlerOutput::Break { event, allow_any } => {
2738 break (event, allow_any)
2739 }
2740 ElementHandlerOutput::Continue { event, .. } => event,
2741 }
2742 }
2743 (S::Notation(values, Some(deserializer)), event) => {
2744 let output = deserializer.next(reader, event)?;
2745 match self.handle_notation(reader, values, output, &mut fallback)? {
2746 ElementHandlerOutput::Break { event, allow_any } => {
2747 break (event, allow_any)
2748 }
2749 ElementHandlerOutput::Continue { event, .. } => event,
2750 }
2751 }
2752 (state, event @ Event::End(_)) => {
2753 return Ok(DeserializerOutput {
2754 artifact: DeserializerArtifact::Data(
2755 SchemaContentDeserializer::finish_state(reader, state)?,
2756 ),
2757 event: DeserializerEvent::Continue(event),
2758 allow_any: false,
2759 });
2760 }
2761 (S::Init__, event) => match self.find_suitable(reader, event, &mut fallback)? {
2762 ElementHandlerOutput::Break { event, allow_any } => {
2763 break (event, allow_any)
2764 }
2765 ElementHandlerOutput::Continue { event, .. } => event,
2766 },
2767 (S::Include(values, None), event) => {
2768 let output = <super::Include as WithDeserializer>::Deserializer::init(
2769 reader, event,
2770 )?;
2771 match self.handle_include(reader, 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) => {
2779 let output =
2780 <super::Import as WithDeserializer>::Deserializer::init(reader, event)?;
2781 match self.handle_import(reader, values, output, &mut fallback)? {
2782 ElementHandlerOutput::Break { event, allow_any } => {
2783 break (event, allow_any)
2784 }
2785 ElementHandlerOutput::Continue { event, .. } => event,
2786 }
2787 }
2788 (S::Redefine(values, None), event) => {
2789 let output = <super::Redefine as WithDeserializer>::Deserializer::init(
2790 reader, event,
2791 )?;
2792 match self.handle_redefine(reader, values, output, &mut fallback)? {
2793 ElementHandlerOutput::Break { event, allow_any } => {
2794 break (event, allow_any)
2795 }
2796 ElementHandlerOutput::Continue { event, .. } => event,
2797 }
2798 }
2799 (S::Override(values, None), event) => {
2800 let output = <super::Override as WithDeserializer>::Deserializer::init(
2801 reader, event,
2802 )?;
2803 match self.handle_override_(reader, values, output, &mut fallback)? {
2804 ElementHandlerOutput::Break { event, allow_any } => {
2805 break (event, allow_any)
2806 }
2807 ElementHandlerOutput::Continue { event, .. } => event,
2808 }
2809 }
2810 (S::Annotation(values, None), event) => {
2811 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
2812 reader, event,
2813 )?;
2814 match self.handle_annotation(reader, values, output, &mut fallback)? {
2815 ElementHandlerOutput::Break { event, allow_any } => {
2816 break (event, allow_any)
2817 }
2818 ElementHandlerOutput::Continue { event, .. } => event,
2819 }
2820 }
2821 (S::DefaultOpenContent(values, None), event) => {
2822 let output =
2823 <super::DefaultOpenContent as WithDeserializer>::Deserializer::init(
2824 reader, event,
2825 )?;
2826 match self.handle_default_open_content(
2827 reader,
2828 values,
2829 output,
2830 &mut fallback,
2831 )? {
2832 ElementHandlerOutput::Break { event, allow_any } => {
2833 break (event, allow_any)
2834 }
2835 ElementHandlerOutput::Continue { event, .. } => event,
2836 }
2837 }
2838 (S::SimpleType(values, None), event) => {
2839 let output =
2840 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
2841 reader, event,
2842 )?;
2843 match self.handle_simple_type(reader, values, output, &mut fallback)? {
2844 ElementHandlerOutput::Break { event, allow_any } => {
2845 break (event, allow_any)
2846 }
2847 ElementHandlerOutput::Continue { event, .. } => event,
2848 }
2849 }
2850 (S::ComplexType(values, None), event) => {
2851 let output =
2852 <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
2853 reader, event,
2854 )?;
2855 match self.handle_complex_type(reader, values, output, &mut fallback)? {
2856 ElementHandlerOutput::Break { event, allow_any } => {
2857 break (event, allow_any)
2858 }
2859 ElementHandlerOutput::Continue { event, .. } => event,
2860 }
2861 }
2862 (S::Group(values, None), event) => {
2863 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
2864 reader, event,
2865 )?;
2866 match self.handle_group(reader, values, output, &mut fallback)? {
2867 ElementHandlerOutput::Break { event, allow_any } => {
2868 break (event, allow_any)
2869 }
2870 ElementHandlerOutput::Continue { event, .. } => event,
2871 }
2872 }
2873 (S::AttributeGroup(values, None), event) => {
2874 let output =
2875 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
2876 reader, event,
2877 )?;
2878 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
2879 ElementHandlerOutput::Break { event, allow_any } => {
2880 break (event, allow_any)
2881 }
2882 ElementHandlerOutput::Continue { event, .. } => event,
2883 }
2884 }
2885 (S::Element(values, None), event) => {
2886 let output = <super::ElementType as WithDeserializer>::Deserializer::init(
2887 reader, event,
2888 )?;
2889 match self.handle_element(reader, values, output, &mut fallback)? {
2890 ElementHandlerOutput::Break { event, allow_any } => {
2891 break (event, allow_any)
2892 }
2893 ElementHandlerOutput::Continue { event, .. } => event,
2894 }
2895 }
2896 (S::Attribute(values, None), event) => {
2897 let output =
2898 <super::AttributeType as WithDeserializer>::Deserializer::init(
2899 reader, event,
2900 )?;
2901 match self.handle_attribute(reader, values, output, &mut fallback)? {
2902 ElementHandlerOutput::Break { event, allow_any } => {
2903 break (event, allow_any)
2904 }
2905 ElementHandlerOutput::Continue { event, .. } => event,
2906 }
2907 }
2908 (S::Notation(values, None), event) => {
2909 let output = <super::Notation as WithDeserializer>::Deserializer::init(
2910 reader, event,
2911 )?;
2912 match self.handle_notation(reader, values, output, &mut fallback)? {
2913 ElementHandlerOutput::Break { event, allow_any } => {
2914 break (event, allow_any)
2915 }
2916 ElementHandlerOutput::Continue { event, .. } => event,
2917 }
2918 }
2919 (s @ S::Done__(_), event) => {
2920 *self.state = s;
2921 break (DeserializerEvent::Continue(event), false);
2922 }
2923 (S::Unknown__, _) => unreachable!(),
2924 }
2925 };
2926 let artifact = if matches!(&*self.state, S::Done__(_)) {
2927 DeserializerArtifact::Data(self.finish(reader)?)
2928 } else {
2929 DeserializerArtifact::Deserializer(self)
2930 };
2931 Ok(DeserializerOutput {
2932 artifact,
2933 event,
2934 allow_any,
2935 })
2936 }
2937 fn finish<R>(self, reader: &R) -> Result<super::SchemaContent, Error>
2938 where
2939 R: DeserializeReader,
2940 {
2941 SchemaContentDeserializer::finish_state(reader, *self.state)
2942 }
2943 }
2944 #[derive(Debug)]
2945 pub struct IncludeDeserializer {
2946 id: Option<String>,
2947 schema_location: String,
2948 annotation: Option<super::Annotation>,
2949 state: Box<IncludeDeserializerState>,
2950 }
2951 #[derive(Debug)]
2952 enum IncludeDeserializerState {
2953 Init__,
2954 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
2955 Done__,
2956 Unknown__,
2957 }
2958 impl IncludeDeserializer {
2959 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
2960 where
2961 R: DeserializeReader,
2962 {
2963 let mut id: Option<String> = None;
2964 let mut schema_location: Option<String> = None;
2965 for attrib in filter_xmlns_attributes(bytes_start) {
2966 let attrib = attrib?;
2967 if matches!(
2968 reader.resolve_local_name(attrib.key, &super::NS_XS),
2969 Some(b"id")
2970 ) {
2971 reader.read_attrib(&mut id, b"id", &attrib.value)?;
2972 } else if matches!(
2973 reader.resolve_local_name(attrib.key, &super::NS_XS),
2974 Some(b"schemaLocation")
2975 ) {
2976 reader.read_attrib(&mut schema_location, b"schemaLocation", &attrib.value)?;
2977 }
2978 }
2979 Ok(Box::new(Self {
2980 id: id,
2981 schema_location: schema_location.ok_or_else(|| {
2982 reader.map_error(ErrorKind::MissingAttribute("schemaLocation".into()))
2983 })?,
2984 annotation: None,
2985 state: Box::new(IncludeDeserializerState::Init__),
2986 }))
2987 }
2988 fn finish_state<R>(
2989 &mut self,
2990 reader: &R,
2991 state: IncludeDeserializerState,
2992 ) -> Result<(), Error>
2993 where
2994 R: DeserializeReader,
2995 {
2996 use IncludeDeserializerState as S;
2997 match state {
2998 S::Annotation(Some(deserializer)) => {
2999 self.store_annotation(deserializer.finish(reader)?)?
3000 }
3001 _ => (),
3002 }
3003 Ok(())
3004 }
3005 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
3006 if self.annotation.is_some() {
3007 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3008 b"annotation",
3009 )))?;
3010 }
3011 self.annotation = Some(value);
3012 Ok(())
3013 }
3014 fn handle_annotation<'de, R>(
3015 &mut self,
3016 reader: &R,
3017 output: DeserializerOutput<'de, super::Annotation>,
3018 fallback: &mut Option<IncludeDeserializerState>,
3019 ) -> Result<ElementHandlerOutput<'de>, Error>
3020 where
3021 R: DeserializeReader,
3022 {
3023 let DeserializerOutput {
3024 artifact,
3025 event,
3026 allow_any,
3027 } = output;
3028 if artifact.is_none() {
3029 fallback.get_or_insert(IncludeDeserializerState::Annotation(None));
3030 *self.state = IncludeDeserializerState::Done__;
3031 return Ok(ElementHandlerOutput::from_event(event, allow_any));
3032 }
3033 if let Some(fallback) = fallback.take() {
3034 self.finish_state(reader, fallback)?;
3035 }
3036 Ok(match artifact {
3037 DeserializerArtifact::None => unreachable!(),
3038 DeserializerArtifact::Data(data) => {
3039 self.store_annotation(data)?;
3040 *self.state = IncludeDeserializerState::Done__;
3041 ElementHandlerOutput::from_event(event, allow_any)
3042 }
3043 DeserializerArtifact::Deserializer(deserializer) => {
3044 let ret = ElementHandlerOutput::from_event(event, allow_any);
3045 match &ret {
3046 ElementHandlerOutput::Continue { .. } => {
3047 fallback.get_or_insert(IncludeDeserializerState::Annotation(Some(
3048 deserializer,
3049 )));
3050 *self.state = IncludeDeserializerState::Done__;
3051 }
3052 ElementHandlerOutput::Break { .. } => {
3053 *self.state = IncludeDeserializerState::Annotation(Some(deserializer));
3054 }
3055 }
3056 ret
3057 }
3058 })
3059 }
3060 }
3061 impl<'de> Deserializer<'de, super::Include> for Box<IncludeDeserializer> {
3062 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Include>
3063 where
3064 R: DeserializeReader,
3065 {
3066 reader.init_deserializer_from_start_event(event, IncludeDeserializer::from_bytes_start)
3067 }
3068 fn next<R>(
3069 mut self,
3070 reader: &R,
3071 event: Event<'de>,
3072 ) -> DeserializerResult<'de, super::Include>
3073 where
3074 R: DeserializeReader,
3075 {
3076 use IncludeDeserializerState as S;
3077 let mut event = event;
3078 let mut fallback = None;
3079 let mut allow_any_element = false;
3080 let (event, allow_any) = loop {
3081 let state = replace(&mut *self.state, S::Unknown__);
3082 event = match (state, event) {
3083 (S::Annotation(Some(deserializer)), event) => {
3084 let output = deserializer.next(reader, event)?;
3085 match self.handle_annotation(reader, output, &mut fallback)? {
3086 ElementHandlerOutput::Continue { event, allow_any } => {
3087 allow_any_element = allow_any_element || allow_any;
3088 event
3089 }
3090 ElementHandlerOutput::Break { event, allow_any } => {
3091 break (event, allow_any)
3092 }
3093 }
3094 }
3095 (_, Event::End(_)) => {
3096 if let Some(fallback) = fallback.take() {
3097 self.finish_state(reader, fallback)?;
3098 }
3099 return Ok(DeserializerOutput {
3100 artifact: DeserializerArtifact::Data(self.finish(reader)?),
3101 event: DeserializerEvent::None,
3102 allow_any: false,
3103 });
3104 }
3105 (S::Init__, event) => {
3106 fallback.get_or_insert(S::Init__);
3107 *self.state = IncludeDeserializerState::Annotation(None);
3108 event
3109 }
3110 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
3111 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
3112 let output =
3113 <super::Annotation as WithDeserializer>::Deserializer::init(
3114 reader, event,
3115 )?;
3116 match self.handle_annotation(reader, output, &mut fallback)? {
3117 ElementHandlerOutput::Continue { event, allow_any } => {
3118 allow_any_element = allow_any_element || allow_any;
3119 event
3120 }
3121 ElementHandlerOutput::Break { event, allow_any } => {
3122 break (event, allow_any)
3123 }
3124 }
3125 } else {
3126 *self.state = S::Done__;
3127 allow_any_element = true;
3128 fallback.get_or_insert(S::Annotation(None));
3129 event
3130 }
3131 }
3132 (S::Done__, event) => {
3133 fallback.get_or_insert(S::Done__);
3134 break (DeserializerEvent::Continue(event), allow_any_element);
3135 }
3136 (S::Unknown__, _) => unreachable!(),
3137 (state, event) => {
3138 *self.state = state;
3139 break (DeserializerEvent::Break(event), false);
3140 }
3141 }
3142 };
3143 if let Some(fallback) = fallback {
3144 *self.state = fallback;
3145 }
3146 Ok(DeserializerOutput {
3147 artifact: DeserializerArtifact::Deserializer(self),
3148 event,
3149 allow_any,
3150 })
3151 }
3152 fn finish<R>(mut self, reader: &R) -> Result<super::Include, Error>
3153 where
3154 R: DeserializeReader,
3155 {
3156 let state = replace(&mut *self.state, IncludeDeserializerState::Unknown__);
3157 self.finish_state(reader, state)?;
3158 Ok(super::Include {
3159 id: self.id,
3160 schema_location: self.schema_location,
3161 annotation: self.annotation,
3162 })
3163 }
3164 }
3165 #[derive(Debug)]
3166 pub struct ImportDeserializer {
3167 id: Option<String>,
3168 namespace: Option<String>,
3169 schema_location: Option<String>,
3170 annotation: Option<super::Annotation>,
3171 state: Box<ImportDeserializerState>,
3172 }
3173 #[derive(Debug)]
3174 enum ImportDeserializerState {
3175 Init__,
3176 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
3177 Done__,
3178 Unknown__,
3179 }
3180 impl ImportDeserializer {
3181 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
3182 where
3183 R: DeserializeReader,
3184 {
3185 let mut id: Option<String> = None;
3186 let mut namespace: Option<String> = None;
3187 let mut schema_location: Option<String> = None;
3188 for attrib in filter_xmlns_attributes(bytes_start) {
3189 let attrib = attrib?;
3190 if matches!(
3191 reader.resolve_local_name(attrib.key, &super::NS_XS),
3192 Some(b"id")
3193 ) {
3194 reader.read_attrib(&mut id, b"id", &attrib.value)?;
3195 } else if matches!(
3196 reader.resolve_local_name(attrib.key, &super::NS_XS),
3197 Some(b"namespace")
3198 ) {
3199 reader.read_attrib(&mut namespace, b"namespace", &attrib.value)?;
3200 } else if matches!(
3201 reader.resolve_local_name(attrib.key, &super::NS_XS),
3202 Some(b"schemaLocation")
3203 ) {
3204 reader.read_attrib(&mut schema_location, b"schemaLocation", &attrib.value)?;
3205 }
3206 }
3207 Ok(Box::new(Self {
3208 id: id,
3209 namespace: namespace,
3210 schema_location: schema_location,
3211 annotation: None,
3212 state: Box::new(ImportDeserializerState::Init__),
3213 }))
3214 }
3215 fn finish_state<R>(
3216 &mut self,
3217 reader: &R,
3218 state: ImportDeserializerState,
3219 ) -> Result<(), Error>
3220 where
3221 R: DeserializeReader,
3222 {
3223 use ImportDeserializerState as S;
3224 match state {
3225 S::Annotation(Some(deserializer)) => {
3226 self.store_annotation(deserializer.finish(reader)?)?
3227 }
3228 _ => (),
3229 }
3230 Ok(())
3231 }
3232 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
3233 if self.annotation.is_some() {
3234 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3235 b"annotation",
3236 )))?;
3237 }
3238 self.annotation = Some(value);
3239 Ok(())
3240 }
3241 fn handle_annotation<'de, R>(
3242 &mut self,
3243 reader: &R,
3244 output: DeserializerOutput<'de, super::Annotation>,
3245 fallback: &mut Option<ImportDeserializerState>,
3246 ) -> Result<ElementHandlerOutput<'de>, Error>
3247 where
3248 R: DeserializeReader,
3249 {
3250 let DeserializerOutput {
3251 artifact,
3252 event,
3253 allow_any,
3254 } = output;
3255 if artifact.is_none() {
3256 fallback.get_or_insert(ImportDeserializerState::Annotation(None));
3257 *self.state = ImportDeserializerState::Done__;
3258 return Ok(ElementHandlerOutput::from_event(event, allow_any));
3259 }
3260 if let Some(fallback) = fallback.take() {
3261 self.finish_state(reader, fallback)?;
3262 }
3263 Ok(match artifact {
3264 DeserializerArtifact::None => unreachable!(),
3265 DeserializerArtifact::Data(data) => {
3266 self.store_annotation(data)?;
3267 *self.state = ImportDeserializerState::Done__;
3268 ElementHandlerOutput::from_event(event, allow_any)
3269 }
3270 DeserializerArtifact::Deserializer(deserializer) => {
3271 let ret = ElementHandlerOutput::from_event(event, allow_any);
3272 match &ret {
3273 ElementHandlerOutput::Continue { .. } => {
3274 fallback.get_or_insert(ImportDeserializerState::Annotation(Some(
3275 deserializer,
3276 )));
3277 *self.state = ImportDeserializerState::Done__;
3278 }
3279 ElementHandlerOutput::Break { .. } => {
3280 *self.state = ImportDeserializerState::Annotation(Some(deserializer));
3281 }
3282 }
3283 ret
3284 }
3285 })
3286 }
3287 }
3288 impl<'de> Deserializer<'de, super::Import> for Box<ImportDeserializer> {
3289 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Import>
3290 where
3291 R: DeserializeReader,
3292 {
3293 reader.init_deserializer_from_start_event(event, ImportDeserializer::from_bytes_start)
3294 }
3295 fn next<R>(
3296 mut self,
3297 reader: &R,
3298 event: Event<'de>,
3299 ) -> DeserializerResult<'de, super::Import>
3300 where
3301 R: DeserializeReader,
3302 {
3303 use ImportDeserializerState as S;
3304 let mut event = event;
3305 let mut fallback = None;
3306 let mut allow_any_element = false;
3307 let (event, allow_any) = loop {
3308 let state = replace(&mut *self.state, S::Unknown__);
3309 event = match (state, event) {
3310 (S::Annotation(Some(deserializer)), event) => {
3311 let output = deserializer.next(reader, event)?;
3312 match self.handle_annotation(reader, output, &mut fallback)? {
3313 ElementHandlerOutput::Continue { event, allow_any } => {
3314 allow_any_element = allow_any_element || allow_any;
3315 event
3316 }
3317 ElementHandlerOutput::Break { event, allow_any } => {
3318 break (event, allow_any)
3319 }
3320 }
3321 }
3322 (_, Event::End(_)) => {
3323 if let Some(fallback) = fallback.take() {
3324 self.finish_state(reader, fallback)?;
3325 }
3326 return Ok(DeserializerOutput {
3327 artifact: DeserializerArtifact::Data(self.finish(reader)?),
3328 event: DeserializerEvent::None,
3329 allow_any: false,
3330 });
3331 }
3332 (S::Init__, event) => {
3333 fallback.get_or_insert(S::Init__);
3334 *self.state = ImportDeserializerState::Annotation(None);
3335 event
3336 }
3337 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
3338 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
3339 let output =
3340 <super::Annotation as WithDeserializer>::Deserializer::init(
3341 reader, event,
3342 )?;
3343 match self.handle_annotation(reader, output, &mut fallback)? {
3344 ElementHandlerOutput::Continue { event, allow_any } => {
3345 allow_any_element = allow_any_element || allow_any;
3346 event
3347 }
3348 ElementHandlerOutput::Break { event, allow_any } => {
3349 break (event, allow_any)
3350 }
3351 }
3352 } else {
3353 *self.state = S::Done__;
3354 allow_any_element = true;
3355 fallback.get_or_insert(S::Annotation(None));
3356 event
3357 }
3358 }
3359 (S::Done__, event) => {
3360 fallback.get_or_insert(S::Done__);
3361 break (DeserializerEvent::Continue(event), allow_any_element);
3362 }
3363 (S::Unknown__, _) => unreachable!(),
3364 (state, event) => {
3365 *self.state = state;
3366 break (DeserializerEvent::Break(event), false);
3367 }
3368 }
3369 };
3370 if let Some(fallback) = fallback {
3371 *self.state = fallback;
3372 }
3373 Ok(DeserializerOutput {
3374 artifact: DeserializerArtifact::Deserializer(self),
3375 event,
3376 allow_any,
3377 })
3378 }
3379 fn finish<R>(mut self, reader: &R) -> Result<super::Import, Error>
3380 where
3381 R: DeserializeReader,
3382 {
3383 let state = replace(&mut *self.state, ImportDeserializerState::Unknown__);
3384 self.finish_state(reader, state)?;
3385 Ok(super::Import {
3386 id: self.id,
3387 namespace: self.namespace,
3388 schema_location: self.schema_location,
3389 annotation: self.annotation,
3390 })
3391 }
3392 }
3393 #[derive(Debug)]
3394 pub struct RedefineDeserializer {
3395 schema_location: String,
3396 id: Option<String>,
3397 content: Vec<super::RedefineContent>,
3398 state: Box<RedefineDeserializerState>,
3399 }
3400 #[derive(Debug)]
3401 enum RedefineDeserializerState {
3402 Init__,
3403 Next__,
3404 Content__(<super::RedefineContent as WithDeserializer>::Deserializer),
3405 Unknown__,
3406 }
3407 impl RedefineDeserializer {
3408 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
3409 where
3410 R: DeserializeReader,
3411 {
3412 let mut schema_location: Option<String> = None;
3413 let mut id: Option<String> = None;
3414 for attrib in filter_xmlns_attributes(bytes_start) {
3415 let attrib = attrib?;
3416 if matches!(
3417 reader.resolve_local_name(attrib.key, &super::NS_XS),
3418 Some(b"schemaLocation")
3419 ) {
3420 reader.read_attrib(&mut schema_location, b"schemaLocation", &attrib.value)?;
3421 } else if matches!(
3422 reader.resolve_local_name(attrib.key, &super::NS_XS),
3423 Some(b"id")
3424 ) {
3425 reader.read_attrib(&mut id, b"id", &attrib.value)?;
3426 }
3427 }
3428 Ok(Box::new(Self {
3429 schema_location: schema_location.ok_or_else(|| {
3430 reader.map_error(ErrorKind::MissingAttribute("schemaLocation".into()))
3431 })?,
3432 id: id,
3433 content: Vec::new(),
3434 state: Box::new(RedefineDeserializerState::Init__),
3435 }))
3436 }
3437 fn finish_state<R>(
3438 &mut self,
3439 reader: &R,
3440 state: RedefineDeserializerState,
3441 ) -> Result<(), Error>
3442 where
3443 R: DeserializeReader,
3444 {
3445 if let RedefineDeserializerState::Content__(deserializer) = state {
3446 self.store_content(deserializer.finish(reader)?)?;
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, R>(
3455 &mut self,
3456 reader: &R,
3457 output: DeserializerOutput<'de, super::RedefineContent>,
3458 fallback: &mut Option<RedefineDeserializerState>,
3459 ) -> Result<ElementHandlerOutput<'de>, Error>
3460 where
3461 R: DeserializeReader,
3462 {
3463 let DeserializerOutput {
3464 artifact,
3465 event,
3466 allow_any,
3467 } = output;
3468 if artifact.is_none() {
3469 *self.state = fallback.take().unwrap_or(RedefineDeserializerState::Next__);
3470 return Ok(ElementHandlerOutput::break_(event, allow_any));
3471 }
3472 if let Some(fallback) = fallback.take() {
3473 self.finish_state(reader, fallback)?;
3474 }
3475 Ok(match artifact {
3476 DeserializerArtifact::None => unreachable!(),
3477 DeserializerArtifact::Data(data) => {
3478 self.store_content(data)?;
3479 *self.state = RedefineDeserializerState::Next__;
3480 ElementHandlerOutput::from_event(event, allow_any)
3481 }
3482 DeserializerArtifact::Deserializer(deserializer) => {
3483 let ret = ElementHandlerOutput::from_event(event, allow_any);
3484 match &ret {
3485 ElementHandlerOutput::Break { .. } => {
3486 *self.state = RedefineDeserializerState::Content__(deserializer);
3487 }
3488 ElementHandlerOutput::Continue { .. } => {
3489 fallback
3490 .get_or_insert(RedefineDeserializerState::Content__(deserializer));
3491 *self.state = RedefineDeserializerState::Next__;
3492 }
3493 }
3494 ret
3495 }
3496 })
3497 }
3498 }
3499 impl<'de> Deserializer<'de, super::Redefine> for Box<RedefineDeserializer> {
3500 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Redefine>
3501 where
3502 R: DeserializeReader,
3503 {
3504 reader.init_deserializer_from_start_event(event, RedefineDeserializer::from_bytes_start)
3505 }
3506 fn next<R>(
3507 mut self,
3508 reader: &R,
3509 event: Event<'de>,
3510 ) -> DeserializerResult<'de, super::Redefine>
3511 where
3512 R: DeserializeReader,
3513 {
3514 use RedefineDeserializerState as S;
3515 let mut event = event;
3516 let mut fallback = None;
3517 let (event, allow_any) = loop {
3518 let state = replace(&mut *self.state, S::Unknown__);
3519 event = match (state, event) {
3520 (S::Content__(deserializer), event) => {
3521 let output = deserializer.next(reader, event)?;
3522 match self.handle_content(reader, output, &mut fallback)? {
3523 ElementHandlerOutput::Break { event, allow_any } => {
3524 break (event, allow_any)
3525 }
3526 ElementHandlerOutput::Continue { event, .. } => event,
3527 }
3528 }
3529 (_, Event::End(_)) => {
3530 return Ok(DeserializerOutput {
3531 artifact: DeserializerArtifact::Data(self.finish(reader)?),
3532 event: DeserializerEvent::None,
3533 allow_any: false,
3534 });
3535 }
3536 (state @ (S::Init__ | S::Next__), event) => {
3537 fallback.get_or_insert(state);
3538 let output =
3539 <super::RedefineContent as WithDeserializer>::Deserializer::init(
3540 reader, event,
3541 )?;
3542 match self.handle_content(reader, output, &mut fallback)? {
3543 ElementHandlerOutput::Break { event, allow_any } => {
3544 break (event, allow_any)
3545 }
3546 ElementHandlerOutput::Continue { event, .. } => event,
3547 }
3548 }
3549 (S::Unknown__, _) => unreachable!(),
3550 }
3551 };
3552 let artifact = DeserializerArtifact::Deserializer(self);
3553 Ok(DeserializerOutput {
3554 artifact,
3555 event,
3556 allow_any,
3557 })
3558 }
3559 fn finish<R>(mut self, reader: &R) -> Result<super::Redefine, Error>
3560 where
3561 R: DeserializeReader,
3562 {
3563 let state = replace(&mut *self.state, RedefineDeserializerState::Unknown__);
3564 self.finish_state(reader, state)?;
3565 Ok(super::Redefine {
3566 schema_location: self.schema_location,
3567 id: self.id,
3568 content: self.content,
3569 })
3570 }
3571 }
3572 #[derive(Debug)]
3573 pub struct RedefineContentDeserializer {
3574 state: Box<RedefineContentDeserializerState>,
3575 }
3576 #[derive(Debug)]
3577 pub enum RedefineContentDeserializerState {
3578 Init__,
3579 Annotation(
3580 Option<super::Annotation>,
3581 Option<<super::Annotation as WithDeserializer>::Deserializer>,
3582 ),
3583 SimpleType(
3584 Option<super::SimpleBaseType>,
3585 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
3586 ),
3587 ComplexType(
3588 Option<super::ComplexBaseType>,
3589 Option<<super::ComplexBaseType as WithDeserializer>::Deserializer>,
3590 ),
3591 Group(
3592 Option<super::GroupType>,
3593 Option<<super::GroupType as WithDeserializer>::Deserializer>,
3594 ),
3595 AttributeGroup(
3596 Option<super::AttributeGroupType>,
3597 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
3598 ),
3599 Done__(super::RedefineContent),
3600 Unknown__,
3601 }
3602 impl RedefineContentDeserializer {
3603 fn find_suitable<'de, R>(
3604 &mut self,
3605 reader: &R,
3606 event: Event<'de>,
3607 fallback: &mut Option<RedefineContentDeserializerState>,
3608 ) -> Result<ElementHandlerOutput<'de>, Error>
3609 where
3610 R: DeserializeReader,
3611 {
3612 let (Event::Start(x) | Event::Empty(x)) = &event else {
3613 *self.state = fallback
3614 .take()
3615 .unwrap_or(RedefineContentDeserializerState::Init__);
3616 return Ok(ElementHandlerOutput::return_to_parent(event, false));
3617 };
3618 if matches!(
3619 reader.resolve_local_name(x.name(), &super::NS_XS),
3620 Some(b"annotation")
3621 ) {
3622 let output =
3623 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
3624 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
3625 }
3626 if matches!(
3627 reader.resolve_local_name(x.name(), &super::NS_XS),
3628 Some(b"simpleType")
3629 ) {
3630 let output =
3631 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(reader, event)?;
3632 return self.handle_simple_type(reader, Default::default(), output, &mut *fallback);
3633 }
3634 if matches!(
3635 reader.resolve_local_name(x.name(), &super::NS_XS),
3636 Some(b"complexType")
3637 ) {
3638 let output = <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
3639 reader, event,
3640 )?;
3641 return self.handle_complex_type(
3642 reader,
3643 Default::default(),
3644 output,
3645 &mut *fallback,
3646 );
3647 }
3648 if matches!(
3649 reader.resolve_local_name(x.name(), &super::NS_XS),
3650 Some(b"group")
3651 ) {
3652 let output =
3653 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
3654 return self.handle_group(reader, Default::default(), output, &mut *fallback);
3655 }
3656 if matches!(
3657 reader.resolve_local_name(x.name(), &super::NS_XS),
3658 Some(b"attributeGroup")
3659 ) {
3660 let output = <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
3661 reader, event,
3662 )?;
3663 return self.handle_attribute_group(
3664 reader,
3665 Default::default(),
3666 output,
3667 &mut *fallback,
3668 );
3669 }
3670 *self.state = fallback
3671 .take()
3672 .unwrap_or(RedefineContentDeserializerState::Init__);
3673 Ok(ElementHandlerOutput::return_to_parent(event, false))
3674 }
3675 fn finish_state<R>(
3676 reader: &R,
3677 state: RedefineContentDeserializerState,
3678 ) -> Result<super::RedefineContent, Error>
3679 where
3680 R: DeserializeReader,
3681 {
3682 use RedefineContentDeserializerState as S;
3683 match state {
3684 S::Init__ => Err(ErrorKind::MissingContent.into()),
3685 S::Annotation(mut values, deserializer) => {
3686 if let Some(deserializer) = deserializer {
3687 let value = deserializer.finish(reader)?;
3688 RedefineContentDeserializer::store_annotation(&mut values, value)?;
3689 }
3690 Ok(super::RedefineContent::Annotation(values.ok_or_else(
3691 || ErrorKind::MissingElement("annotation".into()),
3692 )?))
3693 }
3694 S::SimpleType(mut values, deserializer) => {
3695 if let Some(deserializer) = deserializer {
3696 let value = deserializer.finish(reader)?;
3697 RedefineContentDeserializer::store_simple_type(&mut values, value)?;
3698 }
3699 Ok(super::RedefineContent::SimpleType(values.ok_or_else(
3700 || ErrorKind::MissingElement("simpleType".into()),
3701 )?))
3702 }
3703 S::ComplexType(mut values, deserializer) => {
3704 if let Some(deserializer) = deserializer {
3705 let value = deserializer.finish(reader)?;
3706 RedefineContentDeserializer::store_complex_type(&mut values, value)?;
3707 }
3708 Ok(super::RedefineContent::ComplexType(values.ok_or_else(
3709 || ErrorKind::MissingElement("complexType".into()),
3710 )?))
3711 }
3712 S::Group(mut values, deserializer) => {
3713 if let Some(deserializer) = deserializer {
3714 let value = deserializer.finish(reader)?;
3715 RedefineContentDeserializer::store_group(&mut values, value)?;
3716 }
3717 Ok(super::RedefineContent::Group(values.ok_or_else(|| {
3718 ErrorKind::MissingElement("group".into())
3719 })?))
3720 }
3721 S::AttributeGroup(mut values, deserializer) => {
3722 if let Some(deserializer) = deserializer {
3723 let value = deserializer.finish(reader)?;
3724 RedefineContentDeserializer::store_attribute_group(&mut values, value)?;
3725 }
3726 Ok(super::RedefineContent::AttributeGroup(values.ok_or_else(
3727 || ErrorKind::MissingElement("attributeGroup".into()),
3728 )?))
3729 }
3730 S::Done__(data) => Ok(data),
3731 S::Unknown__ => unreachable!(),
3732 }
3733 }
3734 fn store_annotation(
3735 values: &mut Option<super::Annotation>,
3736 value: super::Annotation,
3737 ) -> Result<(), Error> {
3738 if values.is_some() {
3739 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3740 b"annotation",
3741 )))?;
3742 }
3743 *values = Some(value);
3744 Ok(())
3745 }
3746 fn store_simple_type(
3747 values: &mut Option<super::SimpleBaseType>,
3748 value: super::SimpleBaseType,
3749 ) -> Result<(), Error> {
3750 if values.is_some() {
3751 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3752 b"simpleType",
3753 )))?;
3754 }
3755 *values = Some(value);
3756 Ok(())
3757 }
3758 fn store_complex_type(
3759 values: &mut Option<super::ComplexBaseType>,
3760 value: super::ComplexBaseType,
3761 ) -> Result<(), Error> {
3762 if values.is_some() {
3763 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3764 b"complexType",
3765 )))?;
3766 }
3767 *values = Some(value);
3768 Ok(())
3769 }
3770 fn store_group(
3771 values: &mut Option<super::GroupType>,
3772 value: super::GroupType,
3773 ) -> Result<(), Error> {
3774 if values.is_some() {
3775 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3776 b"group",
3777 )))?;
3778 }
3779 *values = Some(value);
3780 Ok(())
3781 }
3782 fn store_attribute_group(
3783 values: &mut Option<super::AttributeGroupType>,
3784 value: super::AttributeGroupType,
3785 ) -> Result<(), Error> {
3786 if values.is_some() {
3787 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3788 b"attributeGroup",
3789 )))?;
3790 }
3791 *values = Some(value);
3792 Ok(())
3793 }
3794 fn handle_annotation<'de, R>(
3795 &mut self,
3796 reader: &R,
3797 mut values: Option<super::Annotation>,
3798 output: DeserializerOutput<'de, super::Annotation>,
3799 fallback: &mut Option<RedefineContentDeserializerState>,
3800 ) -> Result<ElementHandlerOutput<'de>, Error>
3801 where
3802 R: DeserializeReader,
3803 {
3804 let DeserializerOutput {
3805 artifact,
3806 event,
3807 allow_any,
3808 } = output;
3809 if artifact.is_none() {
3810 *self.state = match fallback.take() {
3811 None => RedefineContentDeserializerState::Init__,
3812 Some(RedefineContentDeserializerState::Annotation(_, Some(deserializer))) => {
3813 RedefineContentDeserializerState::Annotation(values, Some(deserializer))
3814 }
3815 _ => unreachable!(),
3816 };
3817 return Ok(ElementHandlerOutput::break_(event, allow_any));
3818 }
3819 match fallback.take() {
3820 None => (),
3821 Some(RedefineContentDeserializerState::Annotation(_, Some(deserializer))) => {
3822 let data = deserializer.finish(reader)?;
3823 RedefineContentDeserializer::store_annotation(&mut values, data)?;
3824 }
3825 Some(_) => unreachable!(),
3826 }
3827 Ok(match artifact {
3828 DeserializerArtifact::None => unreachable!(),
3829 DeserializerArtifact::Data(data) => {
3830 RedefineContentDeserializer::store_annotation(&mut values, data)?;
3831 let data = RedefineContentDeserializer::finish_state(
3832 reader,
3833 RedefineContentDeserializerState::Annotation(values, None),
3834 )?;
3835 *self.state = RedefineContentDeserializerState::Done__(data);
3836 ElementHandlerOutput::Break { event, allow_any }
3837 }
3838 DeserializerArtifact::Deserializer(deserializer) => {
3839 *self.state =
3840 RedefineContentDeserializerState::Annotation(values, Some(deserializer));
3841 ElementHandlerOutput::from_event_end(event, allow_any)
3842 }
3843 })
3844 }
3845 fn handle_simple_type<'de, R>(
3846 &mut self,
3847 reader: &R,
3848 mut values: Option<super::SimpleBaseType>,
3849 output: DeserializerOutput<'de, super::SimpleBaseType>,
3850 fallback: &mut Option<RedefineContentDeserializerState>,
3851 ) -> Result<ElementHandlerOutput<'de>, Error>
3852 where
3853 R: DeserializeReader,
3854 {
3855 let DeserializerOutput {
3856 artifact,
3857 event,
3858 allow_any,
3859 } = output;
3860 if artifact.is_none() {
3861 *self.state = match fallback.take() {
3862 None => RedefineContentDeserializerState::Init__,
3863 Some(RedefineContentDeserializerState::SimpleType(_, Some(deserializer))) => {
3864 RedefineContentDeserializerState::SimpleType(values, Some(deserializer))
3865 }
3866 _ => unreachable!(),
3867 };
3868 return Ok(ElementHandlerOutput::break_(event, allow_any));
3869 }
3870 match fallback.take() {
3871 None => (),
3872 Some(RedefineContentDeserializerState::SimpleType(_, Some(deserializer))) => {
3873 let data = deserializer.finish(reader)?;
3874 RedefineContentDeserializer::store_simple_type(&mut values, data)?;
3875 }
3876 Some(_) => unreachable!(),
3877 }
3878 Ok(match artifact {
3879 DeserializerArtifact::None => unreachable!(),
3880 DeserializerArtifact::Data(data) => {
3881 RedefineContentDeserializer::store_simple_type(&mut values, data)?;
3882 let data = RedefineContentDeserializer::finish_state(
3883 reader,
3884 RedefineContentDeserializerState::SimpleType(values, None),
3885 )?;
3886 *self.state = RedefineContentDeserializerState::Done__(data);
3887 ElementHandlerOutput::Break { event, allow_any }
3888 }
3889 DeserializerArtifact::Deserializer(deserializer) => {
3890 *self.state =
3891 RedefineContentDeserializerState::SimpleType(values, Some(deserializer));
3892 ElementHandlerOutput::from_event_end(event, allow_any)
3893 }
3894 })
3895 }
3896 fn handle_complex_type<'de, R>(
3897 &mut self,
3898 reader: &R,
3899 mut values: Option<super::ComplexBaseType>,
3900 output: DeserializerOutput<'de, super::ComplexBaseType>,
3901 fallback: &mut Option<RedefineContentDeserializerState>,
3902 ) -> Result<ElementHandlerOutput<'de>, Error>
3903 where
3904 R: DeserializeReader,
3905 {
3906 let DeserializerOutput {
3907 artifact,
3908 event,
3909 allow_any,
3910 } = output;
3911 if artifact.is_none() {
3912 *self.state = match fallback.take() {
3913 None => RedefineContentDeserializerState::Init__,
3914 Some(RedefineContentDeserializerState::ComplexType(_, Some(deserializer))) => {
3915 RedefineContentDeserializerState::ComplexType(values, Some(deserializer))
3916 }
3917 _ => unreachable!(),
3918 };
3919 return Ok(ElementHandlerOutput::break_(event, allow_any));
3920 }
3921 match fallback.take() {
3922 None => (),
3923 Some(RedefineContentDeserializerState::ComplexType(_, Some(deserializer))) => {
3924 let data = deserializer.finish(reader)?;
3925 RedefineContentDeserializer::store_complex_type(&mut values, data)?;
3926 }
3927 Some(_) => unreachable!(),
3928 }
3929 Ok(match artifact {
3930 DeserializerArtifact::None => unreachable!(),
3931 DeserializerArtifact::Data(data) => {
3932 RedefineContentDeserializer::store_complex_type(&mut values, data)?;
3933 let data = RedefineContentDeserializer::finish_state(
3934 reader,
3935 RedefineContentDeserializerState::ComplexType(values, None),
3936 )?;
3937 *self.state = RedefineContentDeserializerState::Done__(data);
3938 ElementHandlerOutput::Break { event, allow_any }
3939 }
3940 DeserializerArtifact::Deserializer(deserializer) => {
3941 *self.state =
3942 RedefineContentDeserializerState::ComplexType(values, Some(deserializer));
3943 ElementHandlerOutput::from_event_end(event, allow_any)
3944 }
3945 })
3946 }
3947 fn handle_group<'de, R>(
3948 &mut self,
3949 reader: &R,
3950 mut values: Option<super::GroupType>,
3951 output: DeserializerOutput<'de, super::GroupType>,
3952 fallback: &mut Option<RedefineContentDeserializerState>,
3953 ) -> Result<ElementHandlerOutput<'de>, Error>
3954 where
3955 R: DeserializeReader,
3956 {
3957 let DeserializerOutput {
3958 artifact,
3959 event,
3960 allow_any,
3961 } = output;
3962 if artifact.is_none() {
3963 *self.state = match fallback.take() {
3964 None => RedefineContentDeserializerState::Init__,
3965 Some(RedefineContentDeserializerState::Group(_, Some(deserializer))) => {
3966 RedefineContentDeserializerState::Group(values, Some(deserializer))
3967 }
3968 _ => unreachable!(),
3969 };
3970 return Ok(ElementHandlerOutput::break_(event, allow_any));
3971 }
3972 match fallback.take() {
3973 None => (),
3974 Some(RedefineContentDeserializerState::Group(_, Some(deserializer))) => {
3975 let data = deserializer.finish(reader)?;
3976 RedefineContentDeserializer::store_group(&mut values, data)?;
3977 }
3978 Some(_) => unreachable!(),
3979 }
3980 Ok(match artifact {
3981 DeserializerArtifact::None => unreachable!(),
3982 DeserializerArtifact::Data(data) => {
3983 RedefineContentDeserializer::store_group(&mut values, data)?;
3984 let data = RedefineContentDeserializer::finish_state(
3985 reader,
3986 RedefineContentDeserializerState::Group(values, None),
3987 )?;
3988 *self.state = RedefineContentDeserializerState::Done__(data);
3989 ElementHandlerOutput::Break { event, allow_any }
3990 }
3991 DeserializerArtifact::Deserializer(deserializer) => {
3992 *self.state =
3993 RedefineContentDeserializerState::Group(values, Some(deserializer));
3994 ElementHandlerOutput::from_event_end(event, allow_any)
3995 }
3996 })
3997 }
3998 fn handle_attribute_group<'de, R>(
3999 &mut self,
4000 reader: &R,
4001 mut values: Option<super::AttributeGroupType>,
4002 output: DeserializerOutput<'de, super::AttributeGroupType>,
4003 fallback: &mut Option<RedefineContentDeserializerState>,
4004 ) -> Result<ElementHandlerOutput<'de>, Error>
4005 where
4006 R: DeserializeReader,
4007 {
4008 let DeserializerOutput {
4009 artifact,
4010 event,
4011 allow_any,
4012 } = output;
4013 if artifact.is_none() {
4014 *self.state = match fallback.take() {
4015 None => RedefineContentDeserializerState::Init__,
4016 Some(RedefineContentDeserializerState::AttributeGroup(
4017 _,
4018 Some(deserializer),
4019 )) => {
4020 RedefineContentDeserializerState::AttributeGroup(values, Some(deserializer))
4021 }
4022 _ => unreachable!(),
4023 };
4024 return Ok(ElementHandlerOutput::break_(event, allow_any));
4025 }
4026 match fallback.take() {
4027 None => (),
4028 Some(RedefineContentDeserializerState::AttributeGroup(_, Some(deserializer))) => {
4029 let data = deserializer.finish(reader)?;
4030 RedefineContentDeserializer::store_attribute_group(&mut values, data)?;
4031 }
4032 Some(_) => unreachable!(),
4033 }
4034 Ok(match artifact {
4035 DeserializerArtifact::None => unreachable!(),
4036 DeserializerArtifact::Data(data) => {
4037 RedefineContentDeserializer::store_attribute_group(&mut values, data)?;
4038 let data = RedefineContentDeserializer::finish_state(
4039 reader,
4040 RedefineContentDeserializerState::AttributeGroup(values, None),
4041 )?;
4042 *self.state = RedefineContentDeserializerState::Done__(data);
4043 ElementHandlerOutput::Break { event, allow_any }
4044 }
4045 DeserializerArtifact::Deserializer(deserializer) => {
4046 *self.state = RedefineContentDeserializerState::AttributeGroup(
4047 values,
4048 Some(deserializer),
4049 );
4050 ElementHandlerOutput::from_event_end(event, allow_any)
4051 }
4052 })
4053 }
4054 }
4055 impl<'de> Deserializer<'de, super::RedefineContent> for Box<RedefineContentDeserializer> {
4056 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::RedefineContent>
4057 where
4058 R: DeserializeReader,
4059 {
4060 let deserializer = Box::new(RedefineContentDeserializer {
4061 state: Box::new(RedefineContentDeserializerState::Init__),
4062 });
4063 let mut output = deserializer.next(reader, event)?;
4064 output.artifact = match output.artifact {
4065 DeserializerArtifact::Deserializer(x)
4066 if matches!(&*x.state, RedefineContentDeserializerState::Init__) =>
4067 {
4068 DeserializerArtifact::None
4069 }
4070 artifact => artifact,
4071 };
4072 Ok(output)
4073 }
4074 fn next<R>(
4075 mut self,
4076 reader: &R,
4077 event: Event<'de>,
4078 ) -> DeserializerResult<'de, super::RedefineContent>
4079 where
4080 R: DeserializeReader,
4081 {
4082 use RedefineContentDeserializerState as S;
4083 let mut event = event;
4084 let mut fallback = None;
4085 let (event, allow_any) = loop {
4086 let state = replace(&mut *self.state, S::Unknown__);
4087 event = match (state, event) {
4088 (S::Annotation(values, Some(deserializer)), event) => {
4089 let output = deserializer.next(reader, event)?;
4090 match self.handle_annotation(reader, values, output, &mut fallback)? {
4091 ElementHandlerOutput::Break { event, allow_any } => {
4092 break (event, allow_any)
4093 }
4094 ElementHandlerOutput::Continue { event, .. } => event,
4095 }
4096 }
4097 (S::SimpleType(values, Some(deserializer)), event) => {
4098 let output = deserializer.next(reader, event)?;
4099 match self.handle_simple_type(reader, values, output, &mut fallback)? {
4100 ElementHandlerOutput::Break { event, allow_any } => {
4101 break (event, allow_any)
4102 }
4103 ElementHandlerOutput::Continue { event, .. } => event,
4104 }
4105 }
4106 (S::ComplexType(values, Some(deserializer)), event) => {
4107 let output = deserializer.next(reader, event)?;
4108 match self.handle_complex_type(reader, values, output, &mut fallback)? {
4109 ElementHandlerOutput::Break { event, allow_any } => {
4110 break (event, allow_any)
4111 }
4112 ElementHandlerOutput::Continue { event, .. } => event,
4113 }
4114 }
4115 (S::Group(values, Some(deserializer)), event) => {
4116 let output = deserializer.next(reader, event)?;
4117 match self.handle_group(reader, values, output, &mut fallback)? {
4118 ElementHandlerOutput::Break { event, allow_any } => {
4119 break (event, allow_any)
4120 }
4121 ElementHandlerOutput::Continue { event, .. } => event,
4122 }
4123 }
4124 (S::AttributeGroup(values, Some(deserializer)), event) => {
4125 let output = deserializer.next(reader, event)?;
4126 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
4127 ElementHandlerOutput::Break { event, allow_any } => {
4128 break (event, allow_any)
4129 }
4130 ElementHandlerOutput::Continue { event, .. } => event,
4131 }
4132 }
4133 (state, event @ Event::End(_)) => {
4134 return Ok(DeserializerOutput {
4135 artifact: DeserializerArtifact::Data(
4136 RedefineContentDeserializer::finish_state(reader, state)?,
4137 ),
4138 event: DeserializerEvent::Continue(event),
4139 allow_any: false,
4140 });
4141 }
4142 (S::Init__, event) => match self.find_suitable(reader, event, &mut fallback)? {
4143 ElementHandlerOutput::Break { event, allow_any } => {
4144 break (event, allow_any)
4145 }
4146 ElementHandlerOutput::Continue { event, .. } => event,
4147 },
4148 (S::Annotation(values, None), event) => {
4149 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
4150 reader, event,
4151 )?;
4152 match self.handle_annotation(reader, values, output, &mut fallback)? {
4153 ElementHandlerOutput::Break { event, allow_any } => {
4154 break (event, allow_any)
4155 }
4156 ElementHandlerOutput::Continue { event, .. } => event,
4157 }
4158 }
4159 (S::SimpleType(values, None), event) => {
4160 let output =
4161 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
4162 reader, event,
4163 )?;
4164 match self.handle_simple_type(reader, values, output, &mut fallback)? {
4165 ElementHandlerOutput::Break { event, allow_any } => {
4166 break (event, allow_any)
4167 }
4168 ElementHandlerOutput::Continue { event, .. } => event,
4169 }
4170 }
4171 (S::ComplexType(values, None), event) => {
4172 let output =
4173 <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
4174 reader, event,
4175 )?;
4176 match self.handle_complex_type(reader, values, output, &mut fallback)? {
4177 ElementHandlerOutput::Break { event, allow_any } => {
4178 break (event, allow_any)
4179 }
4180 ElementHandlerOutput::Continue { event, .. } => event,
4181 }
4182 }
4183 (S::Group(values, None), event) => {
4184 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
4185 reader, event,
4186 )?;
4187 match self.handle_group(reader, values, output, &mut fallback)? {
4188 ElementHandlerOutput::Break { event, allow_any } => {
4189 break (event, allow_any)
4190 }
4191 ElementHandlerOutput::Continue { event, .. } => event,
4192 }
4193 }
4194 (S::AttributeGroup(values, None), event) => {
4195 let output =
4196 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
4197 reader, event,
4198 )?;
4199 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
4200 ElementHandlerOutput::Break { event, allow_any } => {
4201 break (event, allow_any)
4202 }
4203 ElementHandlerOutput::Continue { event, .. } => event,
4204 }
4205 }
4206 (s @ S::Done__(_), event) => {
4207 *self.state = s;
4208 break (DeserializerEvent::Continue(event), false);
4209 }
4210 (S::Unknown__, _) => unreachable!(),
4211 }
4212 };
4213 let artifact = if matches!(&*self.state, S::Done__(_)) {
4214 DeserializerArtifact::Data(self.finish(reader)?)
4215 } else {
4216 DeserializerArtifact::Deserializer(self)
4217 };
4218 Ok(DeserializerOutput {
4219 artifact,
4220 event,
4221 allow_any,
4222 })
4223 }
4224 fn finish<R>(self, reader: &R) -> Result<super::RedefineContent, Error>
4225 where
4226 R: DeserializeReader,
4227 {
4228 RedefineContentDeserializer::finish_state(reader, *self.state)
4229 }
4230 }
4231 #[derive(Debug)]
4232 pub struct OverrideDeserializer {
4233 schema_location: String,
4234 id: Option<String>,
4235 content: Vec<super::OverrideContent>,
4236 state: Box<OverrideDeserializerState>,
4237 }
4238 #[derive(Debug)]
4239 enum OverrideDeserializerState {
4240 Init__,
4241 Next__,
4242 Content__(<super::OverrideContent as WithDeserializer>::Deserializer),
4243 Unknown__,
4244 }
4245 impl OverrideDeserializer {
4246 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
4247 where
4248 R: DeserializeReader,
4249 {
4250 let mut schema_location: Option<String> = None;
4251 let mut id: Option<String> = None;
4252 for attrib in filter_xmlns_attributes(bytes_start) {
4253 let attrib = attrib?;
4254 if matches!(
4255 reader.resolve_local_name(attrib.key, &super::NS_XS),
4256 Some(b"schemaLocation")
4257 ) {
4258 reader.read_attrib(&mut schema_location, b"schemaLocation", &attrib.value)?;
4259 } else if matches!(
4260 reader.resolve_local_name(attrib.key, &super::NS_XS),
4261 Some(b"id")
4262 ) {
4263 reader.read_attrib(&mut id, b"id", &attrib.value)?;
4264 }
4265 }
4266 Ok(Box::new(Self {
4267 schema_location: schema_location.ok_or_else(|| {
4268 reader.map_error(ErrorKind::MissingAttribute("schemaLocation".into()))
4269 })?,
4270 id: id,
4271 content: Vec::new(),
4272 state: Box::new(OverrideDeserializerState::Init__),
4273 }))
4274 }
4275 fn finish_state<R>(
4276 &mut self,
4277 reader: &R,
4278 state: OverrideDeserializerState,
4279 ) -> Result<(), Error>
4280 where
4281 R: DeserializeReader,
4282 {
4283 if let OverrideDeserializerState::Content__(deserializer) = state {
4284 self.store_content(deserializer.finish(reader)?)?;
4285 }
4286 Ok(())
4287 }
4288 fn store_content(&mut self, value: super::OverrideContent) -> Result<(), Error> {
4289 self.content.push(value);
4290 Ok(())
4291 }
4292 fn handle_content<'de, R>(
4293 &mut self,
4294 reader: &R,
4295 output: DeserializerOutput<'de, super::OverrideContent>,
4296 fallback: &mut Option<OverrideDeserializerState>,
4297 ) -> Result<ElementHandlerOutput<'de>, Error>
4298 where
4299 R: DeserializeReader,
4300 {
4301 let DeserializerOutput {
4302 artifact,
4303 event,
4304 allow_any,
4305 } = output;
4306 if artifact.is_none() {
4307 *self.state = fallback.take().unwrap_or(OverrideDeserializerState::Next__);
4308 return Ok(ElementHandlerOutput::break_(event, allow_any));
4309 }
4310 if let Some(fallback) = fallback.take() {
4311 self.finish_state(reader, fallback)?;
4312 }
4313 Ok(match artifact {
4314 DeserializerArtifact::None => unreachable!(),
4315 DeserializerArtifact::Data(data) => {
4316 self.store_content(data)?;
4317 *self.state = OverrideDeserializerState::Next__;
4318 ElementHandlerOutput::from_event(event, allow_any)
4319 }
4320 DeserializerArtifact::Deserializer(deserializer) => {
4321 let ret = ElementHandlerOutput::from_event(event, allow_any);
4322 match &ret {
4323 ElementHandlerOutput::Break { .. } => {
4324 *self.state = OverrideDeserializerState::Content__(deserializer);
4325 }
4326 ElementHandlerOutput::Continue { .. } => {
4327 fallback
4328 .get_or_insert(OverrideDeserializerState::Content__(deserializer));
4329 *self.state = OverrideDeserializerState::Next__;
4330 }
4331 }
4332 ret
4333 }
4334 })
4335 }
4336 }
4337 impl<'de> Deserializer<'de, super::Override> for Box<OverrideDeserializer> {
4338 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Override>
4339 where
4340 R: DeserializeReader,
4341 {
4342 reader.init_deserializer_from_start_event(event, OverrideDeserializer::from_bytes_start)
4343 }
4344 fn next<R>(
4345 mut self,
4346 reader: &R,
4347 event: Event<'de>,
4348 ) -> DeserializerResult<'de, super::Override>
4349 where
4350 R: DeserializeReader,
4351 {
4352 use OverrideDeserializerState as S;
4353 let mut event = event;
4354 let mut fallback = None;
4355 let (event, allow_any) = loop {
4356 let state = replace(&mut *self.state, S::Unknown__);
4357 event = match (state, event) {
4358 (S::Content__(deserializer), event) => {
4359 let output = deserializer.next(reader, event)?;
4360 match self.handle_content(reader, output, &mut fallback)? {
4361 ElementHandlerOutput::Break { event, allow_any } => {
4362 break (event, allow_any)
4363 }
4364 ElementHandlerOutput::Continue { event, .. } => event,
4365 }
4366 }
4367 (_, Event::End(_)) => {
4368 return Ok(DeserializerOutput {
4369 artifact: DeserializerArtifact::Data(self.finish(reader)?),
4370 event: DeserializerEvent::None,
4371 allow_any: false,
4372 });
4373 }
4374 (state @ (S::Init__ | S::Next__), event) => {
4375 fallback.get_or_insert(state);
4376 let output =
4377 <super::OverrideContent as WithDeserializer>::Deserializer::init(
4378 reader, event,
4379 )?;
4380 match self.handle_content(reader, output, &mut fallback)? {
4381 ElementHandlerOutput::Break { event, allow_any } => {
4382 break (event, allow_any)
4383 }
4384 ElementHandlerOutput::Continue { event, .. } => event,
4385 }
4386 }
4387 (S::Unknown__, _) => unreachable!(),
4388 }
4389 };
4390 let artifact = DeserializerArtifact::Deserializer(self);
4391 Ok(DeserializerOutput {
4392 artifact,
4393 event,
4394 allow_any,
4395 })
4396 }
4397 fn finish<R>(mut self, reader: &R) -> Result<super::Override, Error>
4398 where
4399 R: DeserializeReader,
4400 {
4401 let state = replace(&mut *self.state, OverrideDeserializerState::Unknown__);
4402 self.finish_state(reader, state)?;
4403 Ok(super::Override {
4404 schema_location: self.schema_location,
4405 id: self.id,
4406 content: self.content,
4407 })
4408 }
4409 }
4410 #[derive(Debug)]
4411 pub struct OverrideContentDeserializer {
4412 state: Box<OverrideContentDeserializerState>,
4413 }
4414 #[derive(Debug)]
4415 pub enum OverrideContentDeserializerState {
4416 Init__,
4417 Annotation(
4418 Option<super::Annotation>,
4419 Option<<super::Annotation as WithDeserializer>::Deserializer>,
4420 ),
4421 SimpleType(
4422 Option<super::SimpleBaseType>,
4423 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
4424 ),
4425 ComplexType(
4426 Option<super::ComplexBaseType>,
4427 Option<<super::ComplexBaseType as WithDeserializer>::Deserializer>,
4428 ),
4429 Group(
4430 Option<super::GroupType>,
4431 Option<<super::GroupType as WithDeserializer>::Deserializer>,
4432 ),
4433 AttributeGroup(
4434 Option<super::AttributeGroupType>,
4435 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
4436 ),
4437 Element(
4438 Option<super::ElementType>,
4439 Option<<super::ElementType as WithDeserializer>::Deserializer>,
4440 ),
4441 Attribute(
4442 Option<super::AttributeType>,
4443 Option<<super::AttributeType as WithDeserializer>::Deserializer>,
4444 ),
4445 Notation(
4446 Option<super::Notation>,
4447 Option<<super::Notation as WithDeserializer>::Deserializer>,
4448 ),
4449 Done__(super::OverrideContent),
4450 Unknown__,
4451 }
4452 impl OverrideContentDeserializer {
4453 fn find_suitable<'de, R>(
4454 &mut self,
4455 reader: &R,
4456 event: Event<'de>,
4457 fallback: &mut Option<OverrideContentDeserializerState>,
4458 ) -> Result<ElementHandlerOutput<'de>, Error>
4459 where
4460 R: DeserializeReader,
4461 {
4462 let (Event::Start(x) | Event::Empty(x)) = &event else {
4463 *self.state = fallback
4464 .take()
4465 .unwrap_or(OverrideContentDeserializerState::Init__);
4466 return Ok(ElementHandlerOutput::return_to_parent(event, false));
4467 };
4468 if matches!(
4469 reader.resolve_local_name(x.name(), &super::NS_XS),
4470 Some(b"annotation")
4471 ) {
4472 let output =
4473 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
4474 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
4475 }
4476 if matches!(
4477 reader.resolve_local_name(x.name(), &super::NS_XS),
4478 Some(b"simpleType")
4479 ) {
4480 let output =
4481 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(reader, event)?;
4482 return self.handle_simple_type(reader, Default::default(), output, &mut *fallback);
4483 }
4484 if matches!(
4485 reader.resolve_local_name(x.name(), &super::NS_XS),
4486 Some(b"complexType")
4487 ) {
4488 let output = <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
4489 reader, event,
4490 )?;
4491 return self.handle_complex_type(
4492 reader,
4493 Default::default(),
4494 output,
4495 &mut *fallback,
4496 );
4497 }
4498 if matches!(
4499 reader.resolve_local_name(x.name(), &super::NS_XS),
4500 Some(b"group")
4501 ) {
4502 let output =
4503 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
4504 return self.handle_group(reader, Default::default(), output, &mut *fallback);
4505 }
4506 if matches!(
4507 reader.resolve_local_name(x.name(), &super::NS_XS),
4508 Some(b"attributeGroup")
4509 ) {
4510 let output = <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
4511 reader, event,
4512 )?;
4513 return self.handle_attribute_group(
4514 reader,
4515 Default::default(),
4516 output,
4517 &mut *fallback,
4518 );
4519 }
4520 if matches!(
4521 reader.resolve_local_name(x.name(), &super::NS_XS),
4522 Some(b"element")
4523 ) {
4524 let output =
4525 <super::ElementType as WithDeserializer>::Deserializer::init(reader, event)?;
4526 return self.handle_element(reader, Default::default(), output, &mut *fallback);
4527 }
4528 if matches!(
4529 reader.resolve_local_name(x.name(), &super::NS_XS),
4530 Some(b"attribute")
4531 ) {
4532 let output =
4533 <super::AttributeType as WithDeserializer>::Deserializer::init(reader, event)?;
4534 return self.handle_attribute(reader, Default::default(), output, &mut *fallback);
4535 }
4536 if matches!(
4537 reader.resolve_local_name(x.name(), &super::NS_XS),
4538 Some(b"notation")
4539 ) {
4540 let output =
4541 <super::Notation as WithDeserializer>::Deserializer::init(reader, event)?;
4542 return self.handle_notation(reader, Default::default(), output, &mut *fallback);
4543 }
4544 *self.state = fallback
4545 .take()
4546 .unwrap_or(OverrideContentDeserializerState::Init__);
4547 Ok(ElementHandlerOutput::return_to_parent(event, false))
4548 }
4549 fn finish_state<R>(
4550 reader: &R,
4551 state: OverrideContentDeserializerState,
4552 ) -> Result<super::OverrideContent, Error>
4553 where
4554 R: DeserializeReader,
4555 {
4556 use OverrideContentDeserializerState as S;
4557 match state {
4558 S::Init__ => Err(ErrorKind::MissingContent.into()),
4559 S::Annotation(mut values, deserializer) => {
4560 if let Some(deserializer) = deserializer {
4561 let value = deserializer.finish(reader)?;
4562 OverrideContentDeserializer::store_annotation(&mut values, value)?;
4563 }
4564 Ok(super::OverrideContent::Annotation(values.ok_or_else(
4565 || ErrorKind::MissingElement("annotation".into()),
4566 )?))
4567 }
4568 S::SimpleType(mut values, deserializer) => {
4569 if let Some(deserializer) = deserializer {
4570 let value = deserializer.finish(reader)?;
4571 OverrideContentDeserializer::store_simple_type(&mut values, value)?;
4572 }
4573 Ok(super::OverrideContent::SimpleType(values.ok_or_else(
4574 || ErrorKind::MissingElement("simpleType".into()),
4575 )?))
4576 }
4577 S::ComplexType(mut values, deserializer) => {
4578 if let Some(deserializer) = deserializer {
4579 let value = deserializer.finish(reader)?;
4580 OverrideContentDeserializer::store_complex_type(&mut values, value)?;
4581 }
4582 Ok(super::OverrideContent::ComplexType(values.ok_or_else(
4583 || ErrorKind::MissingElement("complexType".into()),
4584 )?))
4585 }
4586 S::Group(mut values, deserializer) => {
4587 if let Some(deserializer) = deserializer {
4588 let value = deserializer.finish(reader)?;
4589 OverrideContentDeserializer::store_group(&mut values, value)?;
4590 }
4591 Ok(super::OverrideContent::Group(values.ok_or_else(|| {
4592 ErrorKind::MissingElement("group".into())
4593 })?))
4594 }
4595 S::AttributeGroup(mut values, deserializer) => {
4596 if let Some(deserializer) = deserializer {
4597 let value = deserializer.finish(reader)?;
4598 OverrideContentDeserializer::store_attribute_group(&mut values, value)?;
4599 }
4600 Ok(super::OverrideContent::AttributeGroup(values.ok_or_else(
4601 || ErrorKind::MissingElement("attributeGroup".into()),
4602 )?))
4603 }
4604 S::Element(mut values, deserializer) => {
4605 if let Some(deserializer) = deserializer {
4606 let value = deserializer.finish(reader)?;
4607 OverrideContentDeserializer::store_element(&mut values, value)?;
4608 }
4609 Ok(super::OverrideContent::Element(values.ok_or_else(
4610 || ErrorKind::MissingElement("element".into()),
4611 )?))
4612 }
4613 S::Attribute(mut values, deserializer) => {
4614 if let Some(deserializer) = deserializer {
4615 let value = deserializer.finish(reader)?;
4616 OverrideContentDeserializer::store_attribute(&mut values, value)?;
4617 }
4618 Ok(super::OverrideContent::Attribute(values.ok_or_else(
4619 || ErrorKind::MissingElement("attribute".into()),
4620 )?))
4621 }
4622 S::Notation(mut values, deserializer) => {
4623 if let Some(deserializer) = deserializer {
4624 let value = deserializer.finish(reader)?;
4625 OverrideContentDeserializer::store_notation(&mut values, value)?;
4626 }
4627 Ok(super::OverrideContent::Notation(values.ok_or_else(
4628 || ErrorKind::MissingElement("notation".into()),
4629 )?))
4630 }
4631 S::Done__(data) => Ok(data),
4632 S::Unknown__ => unreachable!(),
4633 }
4634 }
4635 fn store_annotation(
4636 values: &mut Option<super::Annotation>,
4637 value: super::Annotation,
4638 ) -> Result<(), Error> {
4639 if values.is_some() {
4640 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4641 b"annotation",
4642 )))?;
4643 }
4644 *values = Some(value);
4645 Ok(())
4646 }
4647 fn store_simple_type(
4648 values: &mut Option<super::SimpleBaseType>,
4649 value: super::SimpleBaseType,
4650 ) -> Result<(), Error> {
4651 if values.is_some() {
4652 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4653 b"simpleType",
4654 )))?;
4655 }
4656 *values = Some(value);
4657 Ok(())
4658 }
4659 fn store_complex_type(
4660 values: &mut Option<super::ComplexBaseType>,
4661 value: super::ComplexBaseType,
4662 ) -> Result<(), Error> {
4663 if values.is_some() {
4664 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4665 b"complexType",
4666 )))?;
4667 }
4668 *values = Some(value);
4669 Ok(())
4670 }
4671 fn store_group(
4672 values: &mut Option<super::GroupType>,
4673 value: super::GroupType,
4674 ) -> Result<(), Error> {
4675 if values.is_some() {
4676 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4677 b"group",
4678 )))?;
4679 }
4680 *values = Some(value);
4681 Ok(())
4682 }
4683 fn store_attribute_group(
4684 values: &mut Option<super::AttributeGroupType>,
4685 value: super::AttributeGroupType,
4686 ) -> Result<(), Error> {
4687 if values.is_some() {
4688 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4689 b"attributeGroup",
4690 )))?;
4691 }
4692 *values = Some(value);
4693 Ok(())
4694 }
4695 fn store_element(
4696 values: &mut Option<super::ElementType>,
4697 value: super::ElementType,
4698 ) -> Result<(), Error> {
4699 if values.is_some() {
4700 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4701 b"element",
4702 )))?;
4703 }
4704 *values = Some(value);
4705 Ok(())
4706 }
4707 fn store_attribute(
4708 values: &mut Option<super::AttributeType>,
4709 value: super::AttributeType,
4710 ) -> Result<(), Error> {
4711 if values.is_some() {
4712 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4713 b"attribute",
4714 )))?;
4715 }
4716 *values = Some(value);
4717 Ok(())
4718 }
4719 fn store_notation(
4720 values: &mut Option<super::Notation>,
4721 value: super::Notation,
4722 ) -> Result<(), Error> {
4723 if values.is_some() {
4724 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4725 b"notation",
4726 )))?;
4727 }
4728 *values = Some(value);
4729 Ok(())
4730 }
4731 fn handle_annotation<'de, R>(
4732 &mut self,
4733 reader: &R,
4734 mut values: Option<super::Annotation>,
4735 output: DeserializerOutput<'de, super::Annotation>,
4736 fallback: &mut Option<OverrideContentDeserializerState>,
4737 ) -> Result<ElementHandlerOutput<'de>, Error>
4738 where
4739 R: DeserializeReader,
4740 {
4741 let DeserializerOutput {
4742 artifact,
4743 event,
4744 allow_any,
4745 } = output;
4746 if artifact.is_none() {
4747 *self.state = match fallback.take() {
4748 None => OverrideContentDeserializerState::Init__,
4749 Some(OverrideContentDeserializerState::Annotation(_, Some(deserializer))) => {
4750 OverrideContentDeserializerState::Annotation(values, Some(deserializer))
4751 }
4752 _ => unreachable!(),
4753 };
4754 return Ok(ElementHandlerOutput::break_(event, allow_any));
4755 }
4756 match fallback.take() {
4757 None => (),
4758 Some(OverrideContentDeserializerState::Annotation(_, Some(deserializer))) => {
4759 let data = deserializer.finish(reader)?;
4760 OverrideContentDeserializer::store_annotation(&mut values, data)?;
4761 }
4762 Some(_) => unreachable!(),
4763 }
4764 Ok(match artifact {
4765 DeserializerArtifact::None => unreachable!(),
4766 DeserializerArtifact::Data(data) => {
4767 OverrideContentDeserializer::store_annotation(&mut values, data)?;
4768 let data = OverrideContentDeserializer::finish_state(
4769 reader,
4770 OverrideContentDeserializerState::Annotation(values, None),
4771 )?;
4772 *self.state = OverrideContentDeserializerState::Done__(data);
4773 ElementHandlerOutput::Break { event, allow_any }
4774 }
4775 DeserializerArtifact::Deserializer(deserializer) => {
4776 *self.state =
4777 OverrideContentDeserializerState::Annotation(values, Some(deserializer));
4778 ElementHandlerOutput::from_event_end(event, allow_any)
4779 }
4780 })
4781 }
4782 fn handle_simple_type<'de, R>(
4783 &mut self,
4784 reader: &R,
4785 mut values: Option<super::SimpleBaseType>,
4786 output: DeserializerOutput<'de, super::SimpleBaseType>,
4787 fallback: &mut Option<OverrideContentDeserializerState>,
4788 ) -> Result<ElementHandlerOutput<'de>, Error>
4789 where
4790 R: DeserializeReader,
4791 {
4792 let DeserializerOutput {
4793 artifact,
4794 event,
4795 allow_any,
4796 } = output;
4797 if artifact.is_none() {
4798 *self.state = match fallback.take() {
4799 None => OverrideContentDeserializerState::Init__,
4800 Some(OverrideContentDeserializerState::SimpleType(_, Some(deserializer))) => {
4801 OverrideContentDeserializerState::SimpleType(values, Some(deserializer))
4802 }
4803 _ => unreachable!(),
4804 };
4805 return Ok(ElementHandlerOutput::break_(event, allow_any));
4806 }
4807 match fallback.take() {
4808 None => (),
4809 Some(OverrideContentDeserializerState::SimpleType(_, Some(deserializer))) => {
4810 let data = deserializer.finish(reader)?;
4811 OverrideContentDeserializer::store_simple_type(&mut values, data)?;
4812 }
4813 Some(_) => unreachable!(),
4814 }
4815 Ok(match artifact {
4816 DeserializerArtifact::None => unreachable!(),
4817 DeserializerArtifact::Data(data) => {
4818 OverrideContentDeserializer::store_simple_type(&mut values, data)?;
4819 let data = OverrideContentDeserializer::finish_state(
4820 reader,
4821 OverrideContentDeserializerState::SimpleType(values, None),
4822 )?;
4823 *self.state = OverrideContentDeserializerState::Done__(data);
4824 ElementHandlerOutput::Break { event, allow_any }
4825 }
4826 DeserializerArtifact::Deserializer(deserializer) => {
4827 *self.state =
4828 OverrideContentDeserializerState::SimpleType(values, Some(deserializer));
4829 ElementHandlerOutput::from_event_end(event, allow_any)
4830 }
4831 })
4832 }
4833 fn handle_complex_type<'de, R>(
4834 &mut self,
4835 reader: &R,
4836 mut values: Option<super::ComplexBaseType>,
4837 output: DeserializerOutput<'de, super::ComplexBaseType>,
4838 fallback: &mut Option<OverrideContentDeserializerState>,
4839 ) -> Result<ElementHandlerOutput<'de>, Error>
4840 where
4841 R: DeserializeReader,
4842 {
4843 let DeserializerOutput {
4844 artifact,
4845 event,
4846 allow_any,
4847 } = output;
4848 if artifact.is_none() {
4849 *self.state = match fallback.take() {
4850 None => OverrideContentDeserializerState::Init__,
4851 Some(OverrideContentDeserializerState::ComplexType(_, Some(deserializer))) => {
4852 OverrideContentDeserializerState::ComplexType(values, Some(deserializer))
4853 }
4854 _ => unreachable!(),
4855 };
4856 return Ok(ElementHandlerOutput::break_(event, allow_any));
4857 }
4858 match fallback.take() {
4859 None => (),
4860 Some(OverrideContentDeserializerState::ComplexType(_, Some(deserializer))) => {
4861 let data = deserializer.finish(reader)?;
4862 OverrideContentDeserializer::store_complex_type(&mut values, data)?;
4863 }
4864 Some(_) => unreachable!(),
4865 }
4866 Ok(match artifact {
4867 DeserializerArtifact::None => unreachable!(),
4868 DeserializerArtifact::Data(data) => {
4869 OverrideContentDeserializer::store_complex_type(&mut values, data)?;
4870 let data = OverrideContentDeserializer::finish_state(
4871 reader,
4872 OverrideContentDeserializerState::ComplexType(values, None),
4873 )?;
4874 *self.state = OverrideContentDeserializerState::Done__(data);
4875 ElementHandlerOutput::Break { event, allow_any }
4876 }
4877 DeserializerArtifact::Deserializer(deserializer) => {
4878 *self.state =
4879 OverrideContentDeserializerState::ComplexType(values, Some(deserializer));
4880 ElementHandlerOutput::from_event_end(event, allow_any)
4881 }
4882 })
4883 }
4884 fn handle_group<'de, R>(
4885 &mut self,
4886 reader: &R,
4887 mut values: Option<super::GroupType>,
4888 output: DeserializerOutput<'de, super::GroupType>,
4889 fallback: &mut Option<OverrideContentDeserializerState>,
4890 ) -> Result<ElementHandlerOutput<'de>, Error>
4891 where
4892 R: DeserializeReader,
4893 {
4894 let DeserializerOutput {
4895 artifact,
4896 event,
4897 allow_any,
4898 } = output;
4899 if artifact.is_none() {
4900 *self.state = match fallback.take() {
4901 None => OverrideContentDeserializerState::Init__,
4902 Some(OverrideContentDeserializerState::Group(_, Some(deserializer))) => {
4903 OverrideContentDeserializerState::Group(values, Some(deserializer))
4904 }
4905 _ => unreachable!(),
4906 };
4907 return Ok(ElementHandlerOutput::break_(event, allow_any));
4908 }
4909 match fallback.take() {
4910 None => (),
4911 Some(OverrideContentDeserializerState::Group(_, Some(deserializer))) => {
4912 let data = deserializer.finish(reader)?;
4913 OverrideContentDeserializer::store_group(&mut values, data)?;
4914 }
4915 Some(_) => unreachable!(),
4916 }
4917 Ok(match artifact {
4918 DeserializerArtifact::None => unreachable!(),
4919 DeserializerArtifact::Data(data) => {
4920 OverrideContentDeserializer::store_group(&mut values, data)?;
4921 let data = OverrideContentDeserializer::finish_state(
4922 reader,
4923 OverrideContentDeserializerState::Group(values, None),
4924 )?;
4925 *self.state = OverrideContentDeserializerState::Done__(data);
4926 ElementHandlerOutput::Break { event, allow_any }
4927 }
4928 DeserializerArtifact::Deserializer(deserializer) => {
4929 *self.state =
4930 OverrideContentDeserializerState::Group(values, Some(deserializer));
4931 ElementHandlerOutput::from_event_end(event, allow_any)
4932 }
4933 })
4934 }
4935 fn handle_attribute_group<'de, R>(
4936 &mut self,
4937 reader: &R,
4938 mut values: Option<super::AttributeGroupType>,
4939 output: DeserializerOutput<'de, super::AttributeGroupType>,
4940 fallback: &mut Option<OverrideContentDeserializerState>,
4941 ) -> Result<ElementHandlerOutput<'de>, Error>
4942 where
4943 R: DeserializeReader,
4944 {
4945 let DeserializerOutput {
4946 artifact,
4947 event,
4948 allow_any,
4949 } = output;
4950 if artifact.is_none() {
4951 *self.state = match fallback.take() {
4952 None => OverrideContentDeserializerState::Init__,
4953 Some(OverrideContentDeserializerState::AttributeGroup(
4954 _,
4955 Some(deserializer),
4956 )) => {
4957 OverrideContentDeserializerState::AttributeGroup(values, Some(deserializer))
4958 }
4959 _ => unreachable!(),
4960 };
4961 return Ok(ElementHandlerOutput::break_(event, allow_any));
4962 }
4963 match fallback.take() {
4964 None => (),
4965 Some(OverrideContentDeserializerState::AttributeGroup(_, Some(deserializer))) => {
4966 let data = deserializer.finish(reader)?;
4967 OverrideContentDeserializer::store_attribute_group(&mut values, data)?;
4968 }
4969 Some(_) => unreachable!(),
4970 }
4971 Ok(match artifact {
4972 DeserializerArtifact::None => unreachable!(),
4973 DeserializerArtifact::Data(data) => {
4974 OverrideContentDeserializer::store_attribute_group(&mut values, data)?;
4975 let data = OverrideContentDeserializer::finish_state(
4976 reader,
4977 OverrideContentDeserializerState::AttributeGroup(values, None),
4978 )?;
4979 *self.state = OverrideContentDeserializerState::Done__(data);
4980 ElementHandlerOutput::Break { event, allow_any }
4981 }
4982 DeserializerArtifact::Deserializer(deserializer) => {
4983 *self.state = OverrideContentDeserializerState::AttributeGroup(
4984 values,
4985 Some(deserializer),
4986 );
4987 ElementHandlerOutput::from_event_end(event, allow_any)
4988 }
4989 })
4990 }
4991 fn handle_element<'de, R>(
4992 &mut self,
4993 reader: &R,
4994 mut values: Option<super::ElementType>,
4995 output: DeserializerOutput<'de, super::ElementType>,
4996 fallback: &mut Option<OverrideContentDeserializerState>,
4997 ) -> Result<ElementHandlerOutput<'de>, Error>
4998 where
4999 R: DeserializeReader,
5000 {
5001 let DeserializerOutput {
5002 artifact,
5003 event,
5004 allow_any,
5005 } = output;
5006 if artifact.is_none() {
5007 *self.state = match fallback.take() {
5008 None => OverrideContentDeserializerState::Init__,
5009 Some(OverrideContentDeserializerState::Element(_, Some(deserializer))) => {
5010 OverrideContentDeserializerState::Element(values, Some(deserializer))
5011 }
5012 _ => unreachable!(),
5013 };
5014 return Ok(ElementHandlerOutput::break_(event, allow_any));
5015 }
5016 match fallback.take() {
5017 None => (),
5018 Some(OverrideContentDeserializerState::Element(_, Some(deserializer))) => {
5019 let data = deserializer.finish(reader)?;
5020 OverrideContentDeserializer::store_element(&mut values, data)?;
5021 }
5022 Some(_) => unreachable!(),
5023 }
5024 Ok(match artifact {
5025 DeserializerArtifact::None => unreachable!(),
5026 DeserializerArtifact::Data(data) => {
5027 OverrideContentDeserializer::store_element(&mut values, data)?;
5028 let data = OverrideContentDeserializer::finish_state(
5029 reader,
5030 OverrideContentDeserializerState::Element(values, None),
5031 )?;
5032 *self.state = OverrideContentDeserializerState::Done__(data);
5033 ElementHandlerOutput::Break { event, allow_any }
5034 }
5035 DeserializerArtifact::Deserializer(deserializer) => {
5036 *self.state =
5037 OverrideContentDeserializerState::Element(values, Some(deserializer));
5038 ElementHandlerOutput::from_event_end(event, allow_any)
5039 }
5040 })
5041 }
5042 fn handle_attribute<'de, R>(
5043 &mut self,
5044 reader: &R,
5045 mut values: Option<super::AttributeType>,
5046 output: DeserializerOutput<'de, super::AttributeType>,
5047 fallback: &mut Option<OverrideContentDeserializerState>,
5048 ) -> Result<ElementHandlerOutput<'de>, Error>
5049 where
5050 R: DeserializeReader,
5051 {
5052 let DeserializerOutput {
5053 artifact,
5054 event,
5055 allow_any,
5056 } = output;
5057 if artifact.is_none() {
5058 *self.state = match fallback.take() {
5059 None => OverrideContentDeserializerState::Init__,
5060 Some(OverrideContentDeserializerState::Attribute(_, Some(deserializer))) => {
5061 OverrideContentDeserializerState::Attribute(values, Some(deserializer))
5062 }
5063 _ => unreachable!(),
5064 };
5065 return Ok(ElementHandlerOutput::break_(event, allow_any));
5066 }
5067 match fallback.take() {
5068 None => (),
5069 Some(OverrideContentDeserializerState::Attribute(_, Some(deserializer))) => {
5070 let data = deserializer.finish(reader)?;
5071 OverrideContentDeserializer::store_attribute(&mut values, data)?;
5072 }
5073 Some(_) => unreachable!(),
5074 }
5075 Ok(match artifact {
5076 DeserializerArtifact::None => unreachable!(),
5077 DeserializerArtifact::Data(data) => {
5078 OverrideContentDeserializer::store_attribute(&mut values, data)?;
5079 let data = OverrideContentDeserializer::finish_state(
5080 reader,
5081 OverrideContentDeserializerState::Attribute(values, None),
5082 )?;
5083 *self.state = OverrideContentDeserializerState::Done__(data);
5084 ElementHandlerOutput::Break { event, allow_any }
5085 }
5086 DeserializerArtifact::Deserializer(deserializer) => {
5087 *self.state =
5088 OverrideContentDeserializerState::Attribute(values, Some(deserializer));
5089 ElementHandlerOutput::from_event_end(event, allow_any)
5090 }
5091 })
5092 }
5093 fn handle_notation<'de, R>(
5094 &mut self,
5095 reader: &R,
5096 mut values: Option<super::Notation>,
5097 output: DeserializerOutput<'de, super::Notation>,
5098 fallback: &mut Option<OverrideContentDeserializerState>,
5099 ) -> Result<ElementHandlerOutput<'de>, Error>
5100 where
5101 R: DeserializeReader,
5102 {
5103 let DeserializerOutput {
5104 artifact,
5105 event,
5106 allow_any,
5107 } = output;
5108 if artifact.is_none() {
5109 *self.state = match fallback.take() {
5110 None => OverrideContentDeserializerState::Init__,
5111 Some(OverrideContentDeserializerState::Notation(_, Some(deserializer))) => {
5112 OverrideContentDeserializerState::Notation(values, Some(deserializer))
5113 }
5114 _ => unreachable!(),
5115 };
5116 return Ok(ElementHandlerOutput::break_(event, allow_any));
5117 }
5118 match fallback.take() {
5119 None => (),
5120 Some(OverrideContentDeserializerState::Notation(_, Some(deserializer))) => {
5121 let data = deserializer.finish(reader)?;
5122 OverrideContentDeserializer::store_notation(&mut values, data)?;
5123 }
5124 Some(_) => unreachable!(),
5125 }
5126 Ok(match artifact {
5127 DeserializerArtifact::None => unreachable!(),
5128 DeserializerArtifact::Data(data) => {
5129 OverrideContentDeserializer::store_notation(&mut values, data)?;
5130 let data = OverrideContentDeserializer::finish_state(
5131 reader,
5132 OverrideContentDeserializerState::Notation(values, None),
5133 )?;
5134 *self.state = OverrideContentDeserializerState::Done__(data);
5135 ElementHandlerOutput::Break { event, allow_any }
5136 }
5137 DeserializerArtifact::Deserializer(deserializer) => {
5138 *self.state =
5139 OverrideContentDeserializerState::Notation(values, Some(deserializer));
5140 ElementHandlerOutput::from_event_end(event, allow_any)
5141 }
5142 })
5143 }
5144 }
5145 impl<'de> Deserializer<'de, super::OverrideContent> for Box<OverrideContentDeserializer> {
5146 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::OverrideContent>
5147 where
5148 R: DeserializeReader,
5149 {
5150 let deserializer = Box::new(OverrideContentDeserializer {
5151 state: Box::new(OverrideContentDeserializerState::Init__),
5152 });
5153 let mut output = deserializer.next(reader, event)?;
5154 output.artifact = match output.artifact {
5155 DeserializerArtifact::Deserializer(x)
5156 if matches!(&*x.state, OverrideContentDeserializerState::Init__) =>
5157 {
5158 DeserializerArtifact::None
5159 }
5160 artifact => artifact,
5161 };
5162 Ok(output)
5163 }
5164 fn next<R>(
5165 mut self,
5166 reader: &R,
5167 event: Event<'de>,
5168 ) -> DeserializerResult<'de, super::OverrideContent>
5169 where
5170 R: DeserializeReader,
5171 {
5172 use OverrideContentDeserializerState as S;
5173 let mut event = event;
5174 let mut fallback = None;
5175 let (event, allow_any) = loop {
5176 let state = replace(&mut *self.state, S::Unknown__);
5177 event = match (state, event) {
5178 (S::Annotation(values, Some(deserializer)), event) => {
5179 let output = deserializer.next(reader, event)?;
5180 match self.handle_annotation(reader, values, output, &mut fallback)? {
5181 ElementHandlerOutput::Break { event, allow_any } => {
5182 break (event, allow_any)
5183 }
5184 ElementHandlerOutput::Continue { event, .. } => event,
5185 }
5186 }
5187 (S::SimpleType(values, Some(deserializer)), event) => {
5188 let output = deserializer.next(reader, event)?;
5189 match self.handle_simple_type(reader, values, output, &mut fallback)? {
5190 ElementHandlerOutput::Break { event, allow_any } => {
5191 break (event, allow_any)
5192 }
5193 ElementHandlerOutput::Continue { event, .. } => event,
5194 }
5195 }
5196 (S::ComplexType(values, Some(deserializer)), event) => {
5197 let output = deserializer.next(reader, event)?;
5198 match self.handle_complex_type(reader, 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::Group(values, Some(deserializer)), event) => {
5206 let output = deserializer.next(reader, event)?;
5207 match self.handle_group(reader, 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::AttributeGroup(values, Some(deserializer)), event) => {
5215 let output = deserializer.next(reader, event)?;
5216 match self.handle_attribute_group(reader, 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::Element(values, Some(deserializer)), event) => {
5224 let output = deserializer.next(reader, event)?;
5225 match self.handle_element(reader, 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::Attribute(values, Some(deserializer)), event) => {
5233 let output = deserializer.next(reader, event)?;
5234 match self.handle_attribute(reader, 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::Notation(values, Some(deserializer)), event) => {
5242 let output = deserializer.next(reader, event)?;
5243 match self.handle_notation(reader, values, output, &mut fallback)? {
5244 ElementHandlerOutput::Break { event, allow_any } => {
5245 break (event, allow_any)
5246 }
5247 ElementHandlerOutput::Continue { event, .. } => event,
5248 }
5249 }
5250 (state, event @ Event::End(_)) => {
5251 return Ok(DeserializerOutput {
5252 artifact: DeserializerArtifact::Data(
5253 OverrideContentDeserializer::finish_state(reader, state)?,
5254 ),
5255 event: DeserializerEvent::Continue(event),
5256 allow_any: false,
5257 });
5258 }
5259 (S::Init__, event) => match self.find_suitable(reader, event, &mut fallback)? {
5260 ElementHandlerOutput::Break { event, allow_any } => {
5261 break (event, allow_any)
5262 }
5263 ElementHandlerOutput::Continue { event, .. } => event,
5264 },
5265 (S::Annotation(values, None), event) => {
5266 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
5267 reader, event,
5268 )?;
5269 match self.handle_annotation(reader, values, output, &mut fallback)? {
5270 ElementHandlerOutput::Break { event, allow_any } => {
5271 break (event, allow_any)
5272 }
5273 ElementHandlerOutput::Continue { event, .. } => event,
5274 }
5275 }
5276 (S::SimpleType(values, None), event) => {
5277 let output =
5278 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
5279 reader, event,
5280 )?;
5281 match self.handle_simple_type(reader, values, output, &mut fallback)? {
5282 ElementHandlerOutput::Break { event, allow_any } => {
5283 break (event, allow_any)
5284 }
5285 ElementHandlerOutput::Continue { event, .. } => event,
5286 }
5287 }
5288 (S::ComplexType(values, None), event) => {
5289 let output =
5290 <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
5291 reader, event,
5292 )?;
5293 match self.handle_complex_type(reader, values, output, &mut fallback)? {
5294 ElementHandlerOutput::Break { event, allow_any } => {
5295 break (event, allow_any)
5296 }
5297 ElementHandlerOutput::Continue { event, .. } => event,
5298 }
5299 }
5300 (S::Group(values, None), event) => {
5301 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
5302 reader, event,
5303 )?;
5304 match self.handle_group(reader, 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::AttributeGroup(values, None), event) => {
5312 let output =
5313 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
5314 reader, event,
5315 )?;
5316 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
5317 ElementHandlerOutput::Break { event, allow_any } => {
5318 break (event, allow_any)
5319 }
5320 ElementHandlerOutput::Continue { event, .. } => event,
5321 }
5322 }
5323 (S::Element(values, None), event) => {
5324 let output = <super::ElementType as WithDeserializer>::Deserializer::init(
5325 reader, event,
5326 )?;
5327 match self.handle_element(reader, values, output, &mut fallback)? {
5328 ElementHandlerOutput::Break { event, allow_any } => {
5329 break (event, allow_any)
5330 }
5331 ElementHandlerOutput::Continue { event, .. } => event,
5332 }
5333 }
5334 (S::Attribute(values, None), event) => {
5335 let output =
5336 <super::AttributeType as WithDeserializer>::Deserializer::init(
5337 reader, event,
5338 )?;
5339 match self.handle_attribute(reader, values, output, &mut fallback)? {
5340 ElementHandlerOutput::Break { event, allow_any } => {
5341 break (event, allow_any)
5342 }
5343 ElementHandlerOutput::Continue { event, .. } => event,
5344 }
5345 }
5346 (S::Notation(values, None), event) => {
5347 let output = <super::Notation as WithDeserializer>::Deserializer::init(
5348 reader, event,
5349 )?;
5350 match self.handle_notation(reader, values, output, &mut fallback)? {
5351 ElementHandlerOutput::Break { event, allow_any } => {
5352 break (event, allow_any)
5353 }
5354 ElementHandlerOutput::Continue { event, .. } => event,
5355 }
5356 }
5357 (s @ S::Done__(_), event) => {
5358 *self.state = s;
5359 break (DeserializerEvent::Continue(event), false);
5360 }
5361 (S::Unknown__, _) => unreachable!(),
5362 }
5363 };
5364 let artifact = if matches!(&*self.state, S::Done__(_)) {
5365 DeserializerArtifact::Data(self.finish(reader)?)
5366 } else {
5367 DeserializerArtifact::Deserializer(self)
5368 };
5369 Ok(DeserializerOutput {
5370 artifact,
5371 event,
5372 allow_any,
5373 })
5374 }
5375 fn finish<R>(self, reader: &R) -> Result<super::OverrideContent, Error>
5376 where
5377 R: DeserializeReader,
5378 {
5379 OverrideContentDeserializer::finish_state(reader, *self.state)
5380 }
5381 }
5382 #[derive(Debug)]
5383 pub struct AnnotationDeserializer {
5384 id: Option<String>,
5385 content: Vec<super::AnnotationContent>,
5386 state: Box<AnnotationDeserializerState>,
5387 }
5388 #[derive(Debug)]
5389 enum AnnotationDeserializerState {
5390 Init__,
5391 Next__,
5392 Content__(<super::AnnotationContent as WithDeserializer>::Deserializer),
5393 Unknown__,
5394 }
5395 impl AnnotationDeserializer {
5396 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
5397 where
5398 R: DeserializeReader,
5399 {
5400 let mut id: Option<String> = None;
5401 for attrib in filter_xmlns_attributes(bytes_start) {
5402 let attrib = attrib?;
5403 if matches!(
5404 reader.resolve_local_name(attrib.key, &super::NS_XS),
5405 Some(b"id")
5406 ) {
5407 reader.read_attrib(&mut id, b"id", &attrib.value)?;
5408 }
5409 }
5410 Ok(Box::new(Self {
5411 id: id,
5412 content: Vec::new(),
5413 state: Box::new(AnnotationDeserializerState::Init__),
5414 }))
5415 }
5416 fn finish_state<R>(
5417 &mut self,
5418 reader: &R,
5419 state: AnnotationDeserializerState,
5420 ) -> Result<(), Error>
5421 where
5422 R: DeserializeReader,
5423 {
5424 if let AnnotationDeserializerState::Content__(deserializer) = state {
5425 self.store_content(deserializer.finish(reader)?)?;
5426 }
5427 Ok(())
5428 }
5429 fn store_content(&mut self, value: super::AnnotationContent) -> Result<(), Error> {
5430 self.content.push(value);
5431 Ok(())
5432 }
5433 fn handle_content<'de, R>(
5434 &mut self,
5435 reader: &R,
5436 output: DeserializerOutput<'de, super::AnnotationContent>,
5437 fallback: &mut Option<AnnotationDeserializerState>,
5438 ) -> Result<ElementHandlerOutput<'de>, Error>
5439 where
5440 R: DeserializeReader,
5441 {
5442 let DeserializerOutput {
5443 artifact,
5444 event,
5445 allow_any,
5446 } = output;
5447 if artifact.is_none() {
5448 *self.state = fallback
5449 .take()
5450 .unwrap_or(AnnotationDeserializerState::Next__);
5451 return Ok(ElementHandlerOutput::break_(event, allow_any));
5452 }
5453 if let Some(fallback) = fallback.take() {
5454 self.finish_state(reader, fallback)?;
5455 }
5456 Ok(match artifact {
5457 DeserializerArtifact::None => unreachable!(),
5458 DeserializerArtifact::Data(data) => {
5459 self.store_content(data)?;
5460 *self.state = AnnotationDeserializerState::Next__;
5461 ElementHandlerOutput::from_event(event, allow_any)
5462 }
5463 DeserializerArtifact::Deserializer(deserializer) => {
5464 let ret = ElementHandlerOutput::from_event(event, allow_any);
5465 match &ret {
5466 ElementHandlerOutput::Break { .. } => {
5467 *self.state = AnnotationDeserializerState::Content__(deserializer);
5468 }
5469 ElementHandlerOutput::Continue { .. } => {
5470 fallback.get_or_insert(AnnotationDeserializerState::Content__(
5471 deserializer,
5472 ));
5473 *self.state = AnnotationDeserializerState::Next__;
5474 }
5475 }
5476 ret
5477 }
5478 })
5479 }
5480 }
5481 impl<'de> Deserializer<'de, super::Annotation> for Box<AnnotationDeserializer> {
5482 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Annotation>
5483 where
5484 R: DeserializeReader,
5485 {
5486 reader
5487 .init_deserializer_from_start_event(event, AnnotationDeserializer::from_bytes_start)
5488 }
5489 fn next<R>(
5490 mut self,
5491 reader: &R,
5492 event: Event<'de>,
5493 ) -> DeserializerResult<'de, super::Annotation>
5494 where
5495 R: DeserializeReader,
5496 {
5497 use AnnotationDeserializerState as S;
5498 let mut event = event;
5499 let mut fallback = None;
5500 let (event, allow_any) = loop {
5501 let state = replace(&mut *self.state, S::Unknown__);
5502 event = match (state, event) {
5503 (S::Content__(deserializer), event) => {
5504 let output = deserializer.next(reader, event)?;
5505 match self.handle_content(reader, output, &mut fallback)? {
5506 ElementHandlerOutput::Break { event, allow_any } => {
5507 break (event, allow_any)
5508 }
5509 ElementHandlerOutput::Continue { event, .. } => event,
5510 }
5511 }
5512 (_, Event::End(_)) => {
5513 return Ok(DeserializerOutput {
5514 artifact: DeserializerArtifact::Data(self.finish(reader)?),
5515 event: DeserializerEvent::None,
5516 allow_any: false,
5517 });
5518 }
5519 (state @ (S::Init__ | S::Next__), event) => {
5520 fallback.get_or_insert(state);
5521 let output =
5522 <super::AnnotationContent as WithDeserializer>::Deserializer::init(
5523 reader, event,
5524 )?;
5525 match self.handle_content(reader, output, &mut fallback)? {
5526 ElementHandlerOutput::Break { event, allow_any } => {
5527 break (event, allow_any)
5528 }
5529 ElementHandlerOutput::Continue { event, .. } => event,
5530 }
5531 }
5532 (S::Unknown__, _) => unreachable!(),
5533 }
5534 };
5535 let artifact = DeserializerArtifact::Deserializer(self);
5536 Ok(DeserializerOutput {
5537 artifact,
5538 event,
5539 allow_any,
5540 })
5541 }
5542 fn finish<R>(mut self, reader: &R) -> Result<super::Annotation, Error>
5543 where
5544 R: DeserializeReader,
5545 {
5546 let state = replace(&mut *self.state, AnnotationDeserializerState::Unknown__);
5547 self.finish_state(reader, state)?;
5548 Ok(super::Annotation {
5549 id: self.id,
5550 content: self.content,
5551 })
5552 }
5553 }
5554 #[derive(Debug)]
5555 pub struct AnnotationContentDeserializer {
5556 state: Box<AnnotationContentDeserializerState>,
5557 }
5558 #[derive(Debug)]
5559 pub enum AnnotationContentDeserializerState {
5560 Init__,
5561 Appinfo(
5562 Option<super::Appinfo>,
5563 Option<<super::Appinfo as WithDeserializer>::Deserializer>,
5564 ),
5565 Documentation(
5566 Option<super::Documentation>,
5567 Option<<super::Documentation as WithDeserializer>::Deserializer>,
5568 ),
5569 Done__(super::AnnotationContent),
5570 Unknown__,
5571 }
5572 impl AnnotationContentDeserializer {
5573 fn find_suitable<'de, R>(
5574 &mut self,
5575 reader: &R,
5576 event: Event<'de>,
5577 fallback: &mut Option<AnnotationContentDeserializerState>,
5578 ) -> Result<ElementHandlerOutput<'de>, Error>
5579 where
5580 R: DeserializeReader,
5581 {
5582 let (Event::Start(x) | Event::Empty(x)) = &event else {
5583 *self.state = fallback
5584 .take()
5585 .unwrap_or(AnnotationContentDeserializerState::Init__);
5586 return Ok(ElementHandlerOutput::return_to_parent(event, false));
5587 };
5588 if matches!(
5589 reader.resolve_local_name(x.name(), &super::NS_XS),
5590 Some(b"appinfo")
5591 ) {
5592 let output =
5593 <super::Appinfo as WithDeserializer>::Deserializer::init(reader, event)?;
5594 return self.handle_appinfo(reader, Default::default(), output, &mut *fallback);
5595 }
5596 if matches!(
5597 reader.resolve_local_name(x.name(), &super::NS_XS),
5598 Some(b"documentation")
5599 ) {
5600 let output =
5601 <super::Documentation as WithDeserializer>::Deserializer::init(reader, event)?;
5602 return self.handle_documentation(
5603 reader,
5604 Default::default(),
5605 output,
5606 &mut *fallback,
5607 );
5608 }
5609 *self.state = fallback
5610 .take()
5611 .unwrap_or(AnnotationContentDeserializerState::Init__);
5612 Ok(ElementHandlerOutput::return_to_parent(event, false))
5613 }
5614 fn finish_state<R>(
5615 reader: &R,
5616 state: AnnotationContentDeserializerState,
5617 ) -> Result<super::AnnotationContent, Error>
5618 where
5619 R: DeserializeReader,
5620 {
5621 use AnnotationContentDeserializerState as S;
5622 match state {
5623 S::Init__ => Err(ErrorKind::MissingContent.into()),
5624 S::Appinfo(mut values, deserializer) => {
5625 if let Some(deserializer) = deserializer {
5626 let value = deserializer.finish(reader)?;
5627 AnnotationContentDeserializer::store_appinfo(&mut values, value)?;
5628 }
5629 Ok(super::AnnotationContent::Appinfo(values.ok_or_else(
5630 || ErrorKind::MissingElement("appinfo".into()),
5631 )?))
5632 }
5633 S::Documentation(mut values, deserializer) => {
5634 if let Some(deserializer) = deserializer {
5635 let value = deserializer.finish(reader)?;
5636 AnnotationContentDeserializer::store_documentation(&mut values, value)?;
5637 }
5638 Ok(super::AnnotationContent::Documentation(values.ok_or_else(
5639 || ErrorKind::MissingElement("documentation".into()),
5640 )?))
5641 }
5642 S::Done__(data) => Ok(data),
5643 S::Unknown__ => unreachable!(),
5644 }
5645 }
5646 fn store_appinfo(
5647 values: &mut Option<super::Appinfo>,
5648 value: super::Appinfo,
5649 ) -> Result<(), Error> {
5650 if values.is_some() {
5651 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
5652 b"appinfo",
5653 )))?;
5654 }
5655 *values = Some(value);
5656 Ok(())
5657 }
5658 fn store_documentation(
5659 values: &mut Option<super::Documentation>,
5660 value: super::Documentation,
5661 ) -> Result<(), Error> {
5662 if values.is_some() {
5663 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
5664 b"documentation",
5665 )))?;
5666 }
5667 *values = Some(value);
5668 Ok(())
5669 }
5670 fn handle_appinfo<'de, R>(
5671 &mut self,
5672 reader: &R,
5673 mut values: Option<super::Appinfo>,
5674 output: DeserializerOutput<'de, super::Appinfo>,
5675 fallback: &mut Option<AnnotationContentDeserializerState>,
5676 ) -> Result<ElementHandlerOutput<'de>, Error>
5677 where
5678 R: DeserializeReader,
5679 {
5680 let DeserializerOutput {
5681 artifact,
5682 event,
5683 allow_any,
5684 } = output;
5685 if artifact.is_none() {
5686 *self.state = match fallback.take() {
5687 None => AnnotationContentDeserializerState::Init__,
5688 Some(AnnotationContentDeserializerState::Appinfo(_, Some(deserializer))) => {
5689 AnnotationContentDeserializerState::Appinfo(values, Some(deserializer))
5690 }
5691 _ => unreachable!(),
5692 };
5693 return Ok(ElementHandlerOutput::break_(event, allow_any));
5694 }
5695 match fallback.take() {
5696 None => (),
5697 Some(AnnotationContentDeserializerState::Appinfo(_, Some(deserializer))) => {
5698 let data = deserializer.finish(reader)?;
5699 AnnotationContentDeserializer::store_appinfo(&mut values, data)?;
5700 }
5701 Some(_) => unreachable!(),
5702 }
5703 Ok(match artifact {
5704 DeserializerArtifact::None => unreachable!(),
5705 DeserializerArtifact::Data(data) => {
5706 AnnotationContentDeserializer::store_appinfo(&mut values, data)?;
5707 let data = AnnotationContentDeserializer::finish_state(
5708 reader,
5709 AnnotationContentDeserializerState::Appinfo(values, None),
5710 )?;
5711 *self.state = AnnotationContentDeserializerState::Done__(data);
5712 ElementHandlerOutput::Break { event, allow_any }
5713 }
5714 DeserializerArtifact::Deserializer(deserializer) => {
5715 *self.state =
5716 AnnotationContentDeserializerState::Appinfo(values, Some(deserializer));
5717 ElementHandlerOutput::from_event_end(event, allow_any)
5718 }
5719 })
5720 }
5721 fn handle_documentation<'de, R>(
5722 &mut self,
5723 reader: &R,
5724 mut values: Option<super::Documentation>,
5725 output: DeserializerOutput<'de, super::Documentation>,
5726 fallback: &mut Option<AnnotationContentDeserializerState>,
5727 ) -> Result<ElementHandlerOutput<'de>, Error>
5728 where
5729 R: DeserializeReader,
5730 {
5731 let DeserializerOutput {
5732 artifact,
5733 event,
5734 allow_any,
5735 } = output;
5736 if artifact.is_none() {
5737 *self.state = match fallback.take() {
5738 None => AnnotationContentDeserializerState::Init__,
5739 Some(AnnotationContentDeserializerState::Documentation(
5740 _,
5741 Some(deserializer),
5742 )) => AnnotationContentDeserializerState::Documentation(
5743 values,
5744 Some(deserializer),
5745 ),
5746 _ => unreachable!(),
5747 };
5748 return Ok(ElementHandlerOutput::break_(event, allow_any));
5749 }
5750 match fallback.take() {
5751 None => (),
5752 Some(AnnotationContentDeserializerState::Documentation(_, Some(deserializer))) => {
5753 let data = deserializer.finish(reader)?;
5754 AnnotationContentDeserializer::store_documentation(&mut values, data)?;
5755 }
5756 Some(_) => unreachable!(),
5757 }
5758 Ok(match artifact {
5759 DeserializerArtifact::None => unreachable!(),
5760 DeserializerArtifact::Data(data) => {
5761 AnnotationContentDeserializer::store_documentation(&mut values, data)?;
5762 let data = AnnotationContentDeserializer::finish_state(
5763 reader,
5764 AnnotationContentDeserializerState::Documentation(values, None),
5765 )?;
5766 *self.state = AnnotationContentDeserializerState::Done__(data);
5767 ElementHandlerOutput::Break { event, allow_any }
5768 }
5769 DeserializerArtifact::Deserializer(deserializer) => {
5770 *self.state = AnnotationContentDeserializerState::Documentation(
5771 values,
5772 Some(deserializer),
5773 );
5774 ElementHandlerOutput::from_event_end(event, allow_any)
5775 }
5776 })
5777 }
5778 }
5779 impl<'de> Deserializer<'de, super::AnnotationContent> for Box<AnnotationContentDeserializer> {
5780 fn init<R>(
5781 reader: &R,
5782 event: Event<'de>,
5783 ) -> DeserializerResult<'de, super::AnnotationContent>
5784 where
5785 R: DeserializeReader,
5786 {
5787 let deserializer = Box::new(AnnotationContentDeserializer {
5788 state: Box::new(AnnotationContentDeserializerState::Init__),
5789 });
5790 let mut output = deserializer.next(reader, event)?;
5791 output.artifact = match output.artifact {
5792 DeserializerArtifact::Deserializer(x)
5793 if matches!(&*x.state, AnnotationContentDeserializerState::Init__) =>
5794 {
5795 DeserializerArtifact::None
5796 }
5797 artifact => artifact,
5798 };
5799 Ok(output)
5800 }
5801 fn next<R>(
5802 mut self,
5803 reader: &R,
5804 event: Event<'de>,
5805 ) -> DeserializerResult<'de, super::AnnotationContent>
5806 where
5807 R: DeserializeReader,
5808 {
5809 use AnnotationContentDeserializerState as S;
5810 let mut event = event;
5811 let mut fallback = None;
5812 let (event, allow_any) = loop {
5813 let state = replace(&mut *self.state, S::Unknown__);
5814 event = match (state, event) {
5815 (S::Appinfo(values, Some(deserializer)), event) => {
5816 let output = deserializer.next(reader, event)?;
5817 match self.handle_appinfo(reader, values, output, &mut fallback)? {
5818 ElementHandlerOutput::Break { event, allow_any } => {
5819 break (event, allow_any)
5820 }
5821 ElementHandlerOutput::Continue { event, .. } => event,
5822 }
5823 }
5824 (S::Documentation(values, Some(deserializer)), event) => {
5825 let output = deserializer.next(reader, event)?;
5826 match self.handle_documentation(reader, values, output, &mut fallback)? {
5827 ElementHandlerOutput::Break { event, allow_any } => {
5828 break (event, allow_any)
5829 }
5830 ElementHandlerOutput::Continue { event, .. } => event,
5831 }
5832 }
5833 (state, event @ Event::End(_)) => {
5834 return Ok(DeserializerOutput {
5835 artifact: DeserializerArtifact::Data(
5836 AnnotationContentDeserializer::finish_state(reader, state)?,
5837 ),
5838 event: DeserializerEvent::Continue(event),
5839 allow_any: false,
5840 });
5841 }
5842 (S::Init__, event) => match self.find_suitable(reader, event, &mut fallback)? {
5843 ElementHandlerOutput::Break { event, allow_any } => {
5844 break (event, allow_any)
5845 }
5846 ElementHandlerOutput::Continue { event, .. } => event,
5847 },
5848 (S::Appinfo(values, None), event) => {
5849 let output = <super::Appinfo as WithDeserializer>::Deserializer::init(
5850 reader, event,
5851 )?;
5852 match self.handle_appinfo(reader, values, output, &mut fallback)? {
5853 ElementHandlerOutput::Break { event, allow_any } => {
5854 break (event, allow_any)
5855 }
5856 ElementHandlerOutput::Continue { event, .. } => event,
5857 }
5858 }
5859 (S::Documentation(values, None), event) => {
5860 let output =
5861 <super::Documentation as WithDeserializer>::Deserializer::init(
5862 reader, event,
5863 )?;
5864 match self.handle_documentation(reader, values, output, &mut fallback)? {
5865 ElementHandlerOutput::Break { event, allow_any } => {
5866 break (event, allow_any)
5867 }
5868 ElementHandlerOutput::Continue { event, .. } => event,
5869 }
5870 }
5871 (s @ S::Done__(_), event) => {
5872 *self.state = s;
5873 break (DeserializerEvent::Continue(event), false);
5874 }
5875 (S::Unknown__, _) => unreachable!(),
5876 }
5877 };
5878 let artifact = if matches!(&*self.state, S::Done__(_)) {
5879 DeserializerArtifact::Data(self.finish(reader)?)
5880 } else {
5881 DeserializerArtifact::Deserializer(self)
5882 };
5883 Ok(DeserializerOutput {
5884 artifact,
5885 event,
5886 allow_any,
5887 })
5888 }
5889 fn finish<R>(self, reader: &R) -> Result<super::AnnotationContent, Error>
5890 where
5891 R: DeserializeReader,
5892 {
5893 AnnotationContentDeserializer::finish_state(reader, *self.state)
5894 }
5895 }
5896 #[derive(Debug)]
5897 pub struct DefaultOpenContentDeserializer {
5898 id: Option<String>,
5899 applies_to_empty: bool,
5900 mode: super::DefaultOpenContentModeType,
5901 annotation: Option<super::Annotation>,
5902 any: Option<super::WildcardType>,
5903 state: Box<DefaultOpenContentDeserializerState>,
5904 }
5905 #[derive(Debug)]
5906 enum DefaultOpenContentDeserializerState {
5907 Init__,
5908 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
5909 Any(Option<<super::WildcardType as WithDeserializer>::Deserializer>),
5910 Done__,
5911 Unknown__,
5912 }
5913 impl DefaultOpenContentDeserializer {
5914 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
5915 where
5916 R: DeserializeReader,
5917 {
5918 let mut id: Option<String> = None;
5919 let mut applies_to_empty: Option<bool> = None;
5920 let mut mode: Option<super::DefaultOpenContentModeType> = None;
5921 for attrib in filter_xmlns_attributes(bytes_start) {
5922 let attrib = attrib?;
5923 if matches!(
5924 reader.resolve_local_name(attrib.key, &super::NS_XS),
5925 Some(b"id")
5926 ) {
5927 reader.read_attrib(&mut id, b"id", &attrib.value)?;
5928 } else if matches!(
5929 reader.resolve_local_name(attrib.key, &super::NS_XS),
5930 Some(b"appliesToEmpty")
5931 ) {
5932 reader.read_attrib(&mut applies_to_empty, b"appliesToEmpty", &attrib.value)?;
5933 } else if matches!(
5934 reader.resolve_local_name(attrib.key, &super::NS_XS),
5935 Some(b"mode")
5936 ) {
5937 reader.read_attrib(&mut mode, b"mode", &attrib.value)?;
5938 }
5939 }
5940 Ok(Box::new(Self {
5941 id: id,
5942 applies_to_empty: applies_to_empty
5943 .unwrap_or_else(super::DefaultOpenContent::default_applies_to_empty),
5944 mode: mode.unwrap_or_else(super::DefaultOpenContent::default_mode),
5945 annotation: None,
5946 any: None,
5947 state: Box::new(DefaultOpenContentDeserializerState::Init__),
5948 }))
5949 }
5950 fn finish_state<R>(
5951 &mut self,
5952 reader: &R,
5953 state: DefaultOpenContentDeserializerState,
5954 ) -> Result<(), Error>
5955 where
5956 R: DeserializeReader,
5957 {
5958 use DefaultOpenContentDeserializerState as S;
5959 match state {
5960 S::Annotation(Some(deserializer)) => {
5961 self.store_annotation(deserializer.finish(reader)?)?
5962 }
5963 S::Any(Some(deserializer)) => self.store_any(deserializer.finish(reader)?)?,
5964 _ => (),
5965 }
5966 Ok(())
5967 }
5968 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
5969 if self.annotation.is_some() {
5970 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
5971 b"annotation",
5972 )))?;
5973 }
5974 self.annotation = Some(value);
5975 Ok(())
5976 }
5977 fn store_any(&mut self, value: super::WildcardType) -> Result<(), Error> {
5978 if self.any.is_some() {
5979 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"any")))?;
5980 }
5981 self.any = Some(value);
5982 Ok(())
5983 }
5984 fn handle_annotation<'de, R>(
5985 &mut self,
5986 reader: &R,
5987 output: DeserializerOutput<'de, super::Annotation>,
5988 fallback: &mut Option<DefaultOpenContentDeserializerState>,
5989 ) -> Result<ElementHandlerOutput<'de>, Error>
5990 where
5991 R: DeserializeReader,
5992 {
5993 let DeserializerOutput {
5994 artifact,
5995 event,
5996 allow_any,
5997 } = output;
5998 if artifact.is_none() {
5999 fallback.get_or_insert(DefaultOpenContentDeserializerState::Annotation(None));
6000 *self.state = DefaultOpenContentDeserializerState::Any(None);
6001 return Ok(ElementHandlerOutput::from_event(event, allow_any));
6002 }
6003 if let Some(fallback) = fallback.take() {
6004 self.finish_state(reader, fallback)?;
6005 }
6006 Ok(match artifact {
6007 DeserializerArtifact::None => unreachable!(),
6008 DeserializerArtifact::Data(data) => {
6009 self.store_annotation(data)?;
6010 *self.state = DefaultOpenContentDeserializerState::Any(None);
6011 ElementHandlerOutput::from_event(event, allow_any)
6012 }
6013 DeserializerArtifact::Deserializer(deserializer) => {
6014 let ret = ElementHandlerOutput::from_event(event, allow_any);
6015 match &ret {
6016 ElementHandlerOutput::Continue { .. } => {
6017 fallback.get_or_insert(
6018 DefaultOpenContentDeserializerState::Annotation(Some(deserializer)),
6019 );
6020 *self.state = DefaultOpenContentDeserializerState::Any(None);
6021 }
6022 ElementHandlerOutput::Break { .. } => {
6023 *self.state =
6024 DefaultOpenContentDeserializerState::Annotation(Some(deserializer));
6025 }
6026 }
6027 ret
6028 }
6029 })
6030 }
6031 fn handle_any<'de, R>(
6032 &mut self,
6033 reader: &R,
6034 output: DeserializerOutput<'de, super::WildcardType>,
6035 fallback: &mut Option<DefaultOpenContentDeserializerState>,
6036 ) -> Result<ElementHandlerOutput<'de>, Error>
6037 where
6038 R: DeserializeReader,
6039 {
6040 let DeserializerOutput {
6041 artifact,
6042 event,
6043 allow_any,
6044 } = output;
6045 if artifact.is_none() {
6046 if self.any.is_some() {
6047 fallback.get_or_insert(DefaultOpenContentDeserializerState::Any(None));
6048 *self.state = DefaultOpenContentDeserializerState::Done__;
6049 return Ok(ElementHandlerOutput::from_event(event, allow_any));
6050 } else {
6051 *self.state = DefaultOpenContentDeserializerState::Any(None);
6052 return Ok(ElementHandlerOutput::break_(event, allow_any));
6053 }
6054 }
6055 if let Some(fallback) = fallback.take() {
6056 self.finish_state(reader, fallback)?;
6057 }
6058 Ok(match artifact {
6059 DeserializerArtifact::None => unreachable!(),
6060 DeserializerArtifact::Data(data) => {
6061 self.store_any(data)?;
6062 *self.state = DefaultOpenContentDeserializerState::Done__;
6063 ElementHandlerOutput::from_event(event, allow_any)
6064 }
6065 DeserializerArtifact::Deserializer(deserializer) => {
6066 let ret = ElementHandlerOutput::from_event(event, allow_any);
6067 match &ret {
6068 ElementHandlerOutput::Continue { .. } => {
6069 fallback.get_or_insert(DefaultOpenContentDeserializerState::Any(Some(
6070 deserializer,
6071 )));
6072 *self.state = DefaultOpenContentDeserializerState::Done__;
6073 }
6074 ElementHandlerOutput::Break { .. } => {
6075 *self.state =
6076 DefaultOpenContentDeserializerState::Any(Some(deserializer));
6077 }
6078 }
6079 ret
6080 }
6081 })
6082 }
6083 }
6084 impl<'de> Deserializer<'de, super::DefaultOpenContent> for Box<DefaultOpenContentDeserializer> {
6085 fn init<R>(
6086 reader: &R,
6087 event: Event<'de>,
6088 ) -> DeserializerResult<'de, super::DefaultOpenContent>
6089 where
6090 R: DeserializeReader,
6091 {
6092 reader.init_deserializer_from_start_event(
6093 event,
6094 DefaultOpenContentDeserializer::from_bytes_start,
6095 )
6096 }
6097 fn next<R>(
6098 mut self,
6099 reader: &R,
6100 event: Event<'de>,
6101 ) -> DeserializerResult<'de, super::DefaultOpenContent>
6102 where
6103 R: DeserializeReader,
6104 {
6105 use DefaultOpenContentDeserializerState as S;
6106 let mut event = event;
6107 let mut fallback = None;
6108 let mut allow_any_element = false;
6109 let (event, allow_any) = loop {
6110 let state = replace(&mut *self.state, S::Unknown__);
6111 event = match (state, event) {
6112 (S::Annotation(Some(deserializer)), event) => {
6113 let output = deserializer.next(reader, event)?;
6114 match self.handle_annotation(reader, output, &mut fallback)? {
6115 ElementHandlerOutput::Continue { event, allow_any } => {
6116 allow_any_element = allow_any_element || allow_any;
6117 event
6118 }
6119 ElementHandlerOutput::Break { event, allow_any } => {
6120 break (event, allow_any)
6121 }
6122 }
6123 }
6124 (S::Any(Some(deserializer)), event) => {
6125 let output = deserializer.next(reader, event)?;
6126 match self.handle_any(reader, output, &mut fallback)? {
6127 ElementHandlerOutput::Continue { event, allow_any } => {
6128 allow_any_element = allow_any_element || allow_any;
6129 event
6130 }
6131 ElementHandlerOutput::Break { event, allow_any } => {
6132 break (event, allow_any)
6133 }
6134 }
6135 }
6136 (_, Event::End(_)) => {
6137 if let Some(fallback) = fallback.take() {
6138 self.finish_state(reader, fallback)?;
6139 }
6140 return Ok(DeserializerOutput {
6141 artifact: DeserializerArtifact::Data(self.finish(reader)?),
6142 event: DeserializerEvent::None,
6143 allow_any: false,
6144 });
6145 }
6146 (S::Init__, event) => {
6147 fallback.get_or_insert(S::Init__);
6148 *self.state = DefaultOpenContentDeserializerState::Annotation(None);
6149 event
6150 }
6151 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
6152 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
6153 let output =
6154 <super::Annotation as WithDeserializer>::Deserializer::init(
6155 reader, event,
6156 )?;
6157 match self.handle_annotation(reader, output, &mut fallback)? {
6158 ElementHandlerOutput::Continue { event, allow_any } => {
6159 allow_any_element = allow_any_element || allow_any;
6160 event
6161 }
6162 ElementHandlerOutput::Break { event, allow_any } => {
6163 break (event, allow_any)
6164 }
6165 }
6166 } else {
6167 *self.state = S::Any(None);
6168 allow_any_element = true;
6169 fallback.get_or_insert(S::Annotation(None));
6170 event
6171 }
6172 }
6173 (S::Any(None), event @ (Event::Start(_) | Event::Empty(_))) => {
6174 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"any") {
6175 let output =
6176 <super::WildcardType as WithDeserializer>::Deserializer::init(
6177 reader, event,
6178 )?;
6179 match self.handle_any(reader, output, &mut fallback)? {
6180 ElementHandlerOutput::Continue { event, allow_any } => {
6181 allow_any_element = allow_any_element || allow_any;
6182 event
6183 }
6184 ElementHandlerOutput::Break { event, allow_any } => {
6185 break (event, allow_any)
6186 }
6187 }
6188 } else {
6189 *self.state = S::Done__;
6190 allow_any_element = true;
6191 fallback.get_or_insert(S::Any(None));
6192 event
6193 }
6194 }
6195 (S::Done__, event) => {
6196 fallback.get_or_insert(S::Done__);
6197 break (DeserializerEvent::Continue(event), allow_any_element);
6198 }
6199 (S::Unknown__, _) => unreachable!(),
6200 (state, event) => {
6201 *self.state = state;
6202 break (DeserializerEvent::Break(event), false);
6203 }
6204 }
6205 };
6206 if let Some(fallback) = fallback {
6207 *self.state = fallback;
6208 }
6209 Ok(DeserializerOutput {
6210 artifact: DeserializerArtifact::Deserializer(self),
6211 event,
6212 allow_any,
6213 })
6214 }
6215 fn finish<R>(mut self, reader: &R) -> Result<super::DefaultOpenContent, Error>
6216 where
6217 R: DeserializeReader,
6218 {
6219 let state = replace(
6220 &mut *self.state,
6221 DefaultOpenContentDeserializerState::Unknown__,
6222 );
6223 self.finish_state(reader, state)?;
6224 Ok(super::DefaultOpenContent {
6225 id: self.id,
6226 applies_to_empty: self.applies_to_empty,
6227 mode: self.mode,
6228 annotation: self.annotation,
6229 any: self
6230 .any
6231 .ok_or_else(|| ErrorKind::MissingElement("any".into()))?,
6232 })
6233 }
6234 }
6235 #[derive(Debug)]
6236 pub struct SimpleBaseTypeDeserializer {
6237 id: Option<String>,
6238 final_: Option<super::SimpleDerivationSetType>,
6239 name: Option<String>,
6240 content: Vec<super::SimpleBaseTypeContent>,
6241 state: Box<SimpleBaseTypeDeserializerState>,
6242 }
6243 #[derive(Debug)]
6244 enum SimpleBaseTypeDeserializerState {
6245 Init__,
6246 Next__,
6247 Content__(<super::SimpleBaseTypeContent as WithDeserializer>::Deserializer),
6248 Unknown__,
6249 }
6250 impl SimpleBaseTypeDeserializer {
6251 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
6252 where
6253 R: DeserializeReader,
6254 {
6255 let mut id: Option<String> = None;
6256 let mut final_: Option<super::SimpleDerivationSetType> = None;
6257 let mut name: Option<String> = None;
6258 for attrib in filter_xmlns_attributes(bytes_start) {
6259 let attrib = attrib?;
6260 if matches!(
6261 reader.resolve_local_name(attrib.key, &super::NS_XS),
6262 Some(b"id")
6263 ) {
6264 reader.read_attrib(&mut id, b"id", &attrib.value)?;
6265 } else if matches!(
6266 reader.resolve_local_name(attrib.key, &super::NS_XS),
6267 Some(b"final")
6268 ) {
6269 reader.read_attrib(&mut final_, b"final", &attrib.value)?;
6270 } else if matches!(
6271 reader.resolve_local_name(attrib.key, &super::NS_XS),
6272 Some(b"name")
6273 ) {
6274 reader.read_attrib(&mut name, b"name", &attrib.value)?;
6275 }
6276 }
6277 Ok(Box::new(Self {
6278 id: id,
6279 final_: final_,
6280 name: name,
6281 content: Vec::new(),
6282 state: Box::new(SimpleBaseTypeDeserializerState::Init__),
6283 }))
6284 }
6285 fn finish_state<R>(
6286 &mut self,
6287 reader: &R,
6288 state: SimpleBaseTypeDeserializerState,
6289 ) -> Result<(), Error>
6290 where
6291 R: DeserializeReader,
6292 {
6293 if let SimpleBaseTypeDeserializerState::Content__(deserializer) = state {
6294 self.store_content(deserializer.finish(reader)?)?;
6295 }
6296 Ok(())
6297 }
6298 fn store_content(&mut self, value: super::SimpleBaseTypeContent) -> Result<(), Error> {
6299 self.content.push(value);
6300 Ok(())
6301 }
6302 fn handle_content<'de, R>(
6303 &mut self,
6304 reader: &R,
6305 output: DeserializerOutput<'de, super::SimpleBaseTypeContent>,
6306 fallback: &mut Option<SimpleBaseTypeDeserializerState>,
6307 ) -> Result<ElementHandlerOutput<'de>, Error>
6308 where
6309 R: DeserializeReader,
6310 {
6311 let DeserializerOutput {
6312 artifact,
6313 event,
6314 allow_any,
6315 } = output;
6316 if artifact.is_none() {
6317 *self.state = fallback
6318 .take()
6319 .unwrap_or(SimpleBaseTypeDeserializerState::Next__);
6320 return Ok(ElementHandlerOutput::break_(event, allow_any));
6321 }
6322 if let Some(fallback) = fallback.take() {
6323 self.finish_state(reader, fallback)?;
6324 }
6325 Ok(match artifact {
6326 DeserializerArtifact::None => unreachable!(),
6327 DeserializerArtifact::Data(data) => {
6328 self.store_content(data)?;
6329 *self.state = SimpleBaseTypeDeserializerState::Next__;
6330 ElementHandlerOutput::from_event(event, allow_any)
6331 }
6332 DeserializerArtifact::Deserializer(deserializer) => {
6333 let can_have_more = self.content.len().saturating_add(1) < 4usize;
6334 let ret = if can_have_more {
6335 ElementHandlerOutput::from_event(event, allow_any)
6336 } else {
6337 ElementHandlerOutput::from_event_end(event, allow_any)
6338 };
6339 match (can_have_more, &ret) {
6340 (true, ElementHandlerOutput::Continue { .. }) => {
6341 fallback.get_or_insert(SimpleBaseTypeDeserializerState::Content__(
6342 deserializer,
6343 ));
6344 *self.state = SimpleBaseTypeDeserializerState::Next__;
6345 }
6346 (false, _) | (_, ElementHandlerOutput::Break { .. }) => {
6347 *self.state = SimpleBaseTypeDeserializerState::Content__(deserializer);
6348 }
6349 }
6350 ret
6351 }
6352 })
6353 }
6354 }
6355 impl<'de> Deserializer<'de, super::SimpleBaseType> for Box<SimpleBaseTypeDeserializer> {
6356 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::SimpleBaseType>
6357 where
6358 R: DeserializeReader,
6359 {
6360 reader.init_deserializer_from_start_event(
6361 event,
6362 SimpleBaseTypeDeserializer::from_bytes_start,
6363 )
6364 }
6365 fn next<R>(
6366 mut self,
6367 reader: &R,
6368 event: Event<'de>,
6369 ) -> DeserializerResult<'de, super::SimpleBaseType>
6370 where
6371 R: DeserializeReader,
6372 {
6373 use SimpleBaseTypeDeserializerState as S;
6374 let mut event = event;
6375 let mut fallback = None;
6376 let (event, allow_any) = loop {
6377 let state = replace(&mut *self.state, S::Unknown__);
6378 event = match (state, event) {
6379 (S::Content__(deserializer), event) => {
6380 let output = deserializer.next(reader, event)?;
6381 match self.handle_content(reader, output, &mut fallback)? {
6382 ElementHandlerOutput::Break { event, allow_any } => {
6383 break (event, allow_any)
6384 }
6385 ElementHandlerOutput::Continue { event, .. } => event,
6386 }
6387 }
6388 (_, Event::End(_)) => {
6389 return Ok(DeserializerOutput {
6390 artifact: DeserializerArtifact::Data(self.finish(reader)?),
6391 event: DeserializerEvent::None,
6392 allow_any: false,
6393 });
6394 }
6395 (state @ (S::Init__ | S::Next__), event) => {
6396 fallback.get_or_insert(state);
6397 let output =
6398 <super::SimpleBaseTypeContent as WithDeserializer>::Deserializer::init(
6399 reader, event,
6400 )?;
6401 match self.handle_content(reader, output, &mut fallback)? {
6402 ElementHandlerOutput::Break { event, allow_any } => {
6403 break (event, allow_any)
6404 }
6405 ElementHandlerOutput::Continue { event, .. } => event,
6406 }
6407 }
6408 (S::Unknown__, _) => unreachable!(),
6409 }
6410 };
6411 let artifact = DeserializerArtifact::Deserializer(self);
6412 Ok(DeserializerOutput {
6413 artifact,
6414 event,
6415 allow_any,
6416 })
6417 }
6418 fn finish<R>(mut self, reader: &R) -> Result<super::SimpleBaseType, Error>
6419 where
6420 R: DeserializeReader,
6421 {
6422 let state = replace(&mut *self.state, SimpleBaseTypeDeserializerState::Unknown__);
6423 self.finish_state(reader, state)?;
6424 Ok(super::SimpleBaseType {
6425 id: self.id,
6426 final_: self.final_,
6427 name: self.name,
6428 content: self.content,
6429 })
6430 }
6431 }
6432 #[derive(Debug)]
6433 pub struct SimpleBaseTypeContentDeserializer {
6434 state: Box<SimpleBaseTypeContentDeserializerState>,
6435 }
6436 #[derive(Debug)]
6437 pub enum SimpleBaseTypeContentDeserializerState {
6438 Init__,
6439 Annotation(
6440 Option<super::Annotation>,
6441 Option<<super::Annotation as WithDeserializer>::Deserializer>,
6442 ),
6443 Restriction(
6444 Option<super::Restriction>,
6445 Option<<super::Restriction as WithDeserializer>::Deserializer>,
6446 ),
6447 List(
6448 Option<super::List>,
6449 Option<<super::List as WithDeserializer>::Deserializer>,
6450 ),
6451 Union(
6452 Option<super::Union>,
6453 Option<<super::Union as WithDeserializer>::Deserializer>,
6454 ),
6455 Done__(super::SimpleBaseTypeContent),
6456 Unknown__,
6457 }
6458 impl SimpleBaseTypeContentDeserializer {
6459 fn find_suitable<'de, R>(
6460 &mut self,
6461 reader: &R,
6462 event: Event<'de>,
6463 fallback: &mut Option<SimpleBaseTypeContentDeserializerState>,
6464 ) -> Result<ElementHandlerOutput<'de>, Error>
6465 where
6466 R: DeserializeReader,
6467 {
6468 let (Event::Start(x) | Event::Empty(x)) = &event else {
6469 *self.state = fallback
6470 .take()
6471 .unwrap_or(SimpleBaseTypeContentDeserializerState::Init__);
6472 return Ok(ElementHandlerOutput::return_to_parent(event, false));
6473 };
6474 if matches!(
6475 reader.resolve_local_name(x.name(), &super::NS_XS),
6476 Some(b"annotation")
6477 ) {
6478 let output =
6479 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
6480 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
6481 }
6482 if matches!(
6483 reader.resolve_local_name(x.name(), &super::NS_XS),
6484 Some(b"restriction")
6485 ) {
6486 let output =
6487 <super::Restriction as WithDeserializer>::Deserializer::init(reader, event)?;
6488 return self.handle_restriction(reader, Default::default(), output, &mut *fallback);
6489 }
6490 if matches!(
6491 reader.resolve_local_name(x.name(), &super::NS_XS),
6492 Some(b"list")
6493 ) {
6494 let output = <super::List as WithDeserializer>::Deserializer::init(reader, event)?;
6495 return self.handle_list(reader, Default::default(), output, &mut *fallback);
6496 }
6497 if matches!(
6498 reader.resolve_local_name(x.name(), &super::NS_XS),
6499 Some(b"union")
6500 ) {
6501 let output = <super::Union as WithDeserializer>::Deserializer::init(reader, event)?;
6502 return self.handle_union_(reader, Default::default(), output, &mut *fallback);
6503 }
6504 *self.state = fallback
6505 .take()
6506 .unwrap_or(SimpleBaseTypeContentDeserializerState::Init__);
6507 Ok(ElementHandlerOutput::return_to_parent(event, false))
6508 }
6509 fn finish_state<R>(
6510 reader: &R,
6511 state: SimpleBaseTypeContentDeserializerState,
6512 ) -> Result<super::SimpleBaseTypeContent, Error>
6513 where
6514 R: DeserializeReader,
6515 {
6516 use SimpleBaseTypeContentDeserializerState as S;
6517 match state {
6518 S::Init__ => Err(ErrorKind::MissingContent.into()),
6519 S::Annotation(mut values, deserializer) => {
6520 if let Some(deserializer) = deserializer {
6521 let value = deserializer.finish(reader)?;
6522 SimpleBaseTypeContentDeserializer::store_annotation(&mut values, value)?;
6523 }
6524 Ok(super::SimpleBaseTypeContent::Annotation(
6525 values.ok_or_else(|| ErrorKind::MissingElement("annotation".into()))?,
6526 ))
6527 }
6528 S::Restriction(mut values, deserializer) => {
6529 if let Some(deserializer) = deserializer {
6530 let value = deserializer.finish(reader)?;
6531 SimpleBaseTypeContentDeserializer::store_restriction(&mut values, value)?;
6532 }
6533 Ok(super::SimpleBaseTypeContent::Restriction(
6534 values.ok_or_else(|| ErrorKind::MissingElement("restriction".into()))?,
6535 ))
6536 }
6537 S::List(mut values, deserializer) => {
6538 if let Some(deserializer) = deserializer {
6539 let value = deserializer.finish(reader)?;
6540 SimpleBaseTypeContentDeserializer::store_list(&mut values, value)?;
6541 }
6542 Ok(super::SimpleBaseTypeContent::List(
6543 values.ok_or_else(|| ErrorKind::MissingElement("list".into()))?,
6544 ))
6545 }
6546 S::Union(mut values, deserializer) => {
6547 if let Some(deserializer) = deserializer {
6548 let value = deserializer.finish(reader)?;
6549 SimpleBaseTypeContentDeserializer::store_union_(&mut values, value)?;
6550 }
6551 Ok(super::SimpleBaseTypeContent::Union(values.ok_or_else(
6552 || ErrorKind::MissingElement("union".into()),
6553 )?))
6554 }
6555 S::Done__(data) => Ok(data),
6556 S::Unknown__ => unreachable!(),
6557 }
6558 }
6559 fn store_annotation(
6560 values: &mut Option<super::Annotation>,
6561 value: super::Annotation,
6562 ) -> Result<(), Error> {
6563 if values.is_some() {
6564 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
6565 b"annotation",
6566 )))?;
6567 }
6568 *values = Some(value);
6569 Ok(())
6570 }
6571 fn store_restriction(
6572 values: &mut Option<super::Restriction>,
6573 value: super::Restriction,
6574 ) -> Result<(), Error> {
6575 if values.is_some() {
6576 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
6577 b"restriction",
6578 )))?;
6579 }
6580 *values = Some(value);
6581 Ok(())
6582 }
6583 fn store_list(values: &mut Option<super::List>, value: super::List) -> Result<(), Error> {
6584 if values.is_some() {
6585 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"list")))?;
6586 }
6587 *values = Some(value);
6588 Ok(())
6589 }
6590 fn store_union_(
6591 values: &mut Option<super::Union>,
6592 value: super::Union,
6593 ) -> Result<(), Error> {
6594 if values.is_some() {
6595 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
6596 b"union",
6597 )))?;
6598 }
6599 *values = Some(value);
6600 Ok(())
6601 }
6602 fn handle_annotation<'de, R>(
6603 &mut self,
6604 reader: &R,
6605 mut values: Option<super::Annotation>,
6606 output: DeserializerOutput<'de, super::Annotation>,
6607 fallback: &mut Option<SimpleBaseTypeContentDeserializerState>,
6608 ) -> Result<ElementHandlerOutput<'de>, Error>
6609 where
6610 R: DeserializeReader,
6611 {
6612 let DeserializerOutput {
6613 artifact,
6614 event,
6615 allow_any,
6616 } = output;
6617 if artifact.is_none() {
6618 *self.state = match fallback.take() {
6619 None => SimpleBaseTypeContentDeserializerState::Init__,
6620 Some(SimpleBaseTypeContentDeserializerState::Annotation(
6621 _,
6622 Some(deserializer),
6623 )) => SimpleBaseTypeContentDeserializerState::Annotation(
6624 values,
6625 Some(deserializer),
6626 ),
6627 _ => unreachable!(),
6628 };
6629 return Ok(ElementHandlerOutput::break_(event, allow_any));
6630 }
6631 match fallback.take() {
6632 None => (),
6633 Some(SimpleBaseTypeContentDeserializerState::Annotation(_, Some(deserializer))) => {
6634 let data = deserializer.finish(reader)?;
6635 SimpleBaseTypeContentDeserializer::store_annotation(&mut values, data)?;
6636 }
6637 Some(_) => unreachable!(),
6638 }
6639 Ok(match artifact {
6640 DeserializerArtifact::None => unreachable!(),
6641 DeserializerArtifact::Data(data) => {
6642 SimpleBaseTypeContentDeserializer::store_annotation(&mut values, data)?;
6643 let data = SimpleBaseTypeContentDeserializer::finish_state(
6644 reader,
6645 SimpleBaseTypeContentDeserializerState::Annotation(values, None),
6646 )?;
6647 *self.state = SimpleBaseTypeContentDeserializerState::Done__(data);
6648 ElementHandlerOutput::Break { event, allow_any }
6649 }
6650 DeserializerArtifact::Deserializer(deserializer) => {
6651 *self.state = SimpleBaseTypeContentDeserializerState::Annotation(
6652 values,
6653 Some(deserializer),
6654 );
6655 ElementHandlerOutput::from_event_end(event, allow_any)
6656 }
6657 })
6658 }
6659 fn handle_restriction<'de, R>(
6660 &mut self,
6661 reader: &R,
6662 mut values: Option<super::Restriction>,
6663 output: DeserializerOutput<'de, super::Restriction>,
6664 fallback: &mut Option<SimpleBaseTypeContentDeserializerState>,
6665 ) -> Result<ElementHandlerOutput<'de>, Error>
6666 where
6667 R: DeserializeReader,
6668 {
6669 let DeserializerOutput {
6670 artifact,
6671 event,
6672 allow_any,
6673 } = output;
6674 if artifact.is_none() {
6675 *self.state = match fallback.take() {
6676 None => SimpleBaseTypeContentDeserializerState::Init__,
6677 Some(SimpleBaseTypeContentDeserializerState::Restriction(
6678 _,
6679 Some(deserializer),
6680 )) => SimpleBaseTypeContentDeserializerState::Restriction(
6681 values,
6682 Some(deserializer),
6683 ),
6684 _ => unreachable!(),
6685 };
6686 return Ok(ElementHandlerOutput::break_(event, allow_any));
6687 }
6688 match fallback.take() {
6689 None => (),
6690 Some(SimpleBaseTypeContentDeserializerState::Restriction(
6691 _,
6692 Some(deserializer),
6693 )) => {
6694 let data = deserializer.finish(reader)?;
6695 SimpleBaseTypeContentDeserializer::store_restriction(&mut values, data)?;
6696 }
6697 Some(_) => unreachable!(),
6698 }
6699 Ok(match artifact {
6700 DeserializerArtifact::None => unreachable!(),
6701 DeserializerArtifact::Data(data) => {
6702 SimpleBaseTypeContentDeserializer::store_restriction(&mut values, data)?;
6703 let data = SimpleBaseTypeContentDeserializer::finish_state(
6704 reader,
6705 SimpleBaseTypeContentDeserializerState::Restriction(values, None),
6706 )?;
6707 *self.state = SimpleBaseTypeContentDeserializerState::Done__(data);
6708 ElementHandlerOutput::Break { event, allow_any }
6709 }
6710 DeserializerArtifact::Deserializer(deserializer) => {
6711 *self.state = SimpleBaseTypeContentDeserializerState::Restriction(
6712 values,
6713 Some(deserializer),
6714 );
6715 ElementHandlerOutput::from_event_end(event, allow_any)
6716 }
6717 })
6718 }
6719 fn handle_list<'de, R>(
6720 &mut self,
6721 reader: &R,
6722 mut values: Option<super::List>,
6723 output: DeserializerOutput<'de, super::List>,
6724 fallback: &mut Option<SimpleBaseTypeContentDeserializerState>,
6725 ) -> Result<ElementHandlerOutput<'de>, Error>
6726 where
6727 R: DeserializeReader,
6728 {
6729 let DeserializerOutput {
6730 artifact,
6731 event,
6732 allow_any,
6733 } = output;
6734 if artifact.is_none() {
6735 *self.state = match fallback.take() {
6736 None => SimpleBaseTypeContentDeserializerState::Init__,
6737 Some(SimpleBaseTypeContentDeserializerState::List(_, Some(deserializer))) => {
6738 SimpleBaseTypeContentDeserializerState::List(values, Some(deserializer))
6739 }
6740 _ => unreachable!(),
6741 };
6742 return Ok(ElementHandlerOutput::break_(event, allow_any));
6743 }
6744 match fallback.take() {
6745 None => (),
6746 Some(SimpleBaseTypeContentDeserializerState::List(_, Some(deserializer))) => {
6747 let data = deserializer.finish(reader)?;
6748 SimpleBaseTypeContentDeserializer::store_list(&mut values, data)?;
6749 }
6750 Some(_) => unreachable!(),
6751 }
6752 Ok(match artifact {
6753 DeserializerArtifact::None => unreachable!(),
6754 DeserializerArtifact::Data(data) => {
6755 SimpleBaseTypeContentDeserializer::store_list(&mut values, data)?;
6756 let data = SimpleBaseTypeContentDeserializer::finish_state(
6757 reader,
6758 SimpleBaseTypeContentDeserializerState::List(values, None),
6759 )?;
6760 *self.state = SimpleBaseTypeContentDeserializerState::Done__(data);
6761 ElementHandlerOutput::Break { event, allow_any }
6762 }
6763 DeserializerArtifact::Deserializer(deserializer) => {
6764 *self.state =
6765 SimpleBaseTypeContentDeserializerState::List(values, Some(deserializer));
6766 ElementHandlerOutput::from_event_end(event, allow_any)
6767 }
6768 })
6769 }
6770 fn handle_union_<'de, R>(
6771 &mut self,
6772 reader: &R,
6773 mut values: Option<super::Union>,
6774 output: DeserializerOutput<'de, super::Union>,
6775 fallback: &mut Option<SimpleBaseTypeContentDeserializerState>,
6776 ) -> Result<ElementHandlerOutput<'de>, Error>
6777 where
6778 R: DeserializeReader,
6779 {
6780 let DeserializerOutput {
6781 artifact,
6782 event,
6783 allow_any,
6784 } = output;
6785 if artifact.is_none() {
6786 *self.state = match fallback.take() {
6787 None => SimpleBaseTypeContentDeserializerState::Init__,
6788 Some(SimpleBaseTypeContentDeserializerState::Union(_, Some(deserializer))) => {
6789 SimpleBaseTypeContentDeserializerState::Union(values, Some(deserializer))
6790 }
6791 _ => unreachable!(),
6792 };
6793 return Ok(ElementHandlerOutput::break_(event, allow_any));
6794 }
6795 match fallback.take() {
6796 None => (),
6797 Some(SimpleBaseTypeContentDeserializerState::Union(_, Some(deserializer))) => {
6798 let data = deserializer.finish(reader)?;
6799 SimpleBaseTypeContentDeserializer::store_union_(&mut values, data)?;
6800 }
6801 Some(_) => unreachable!(),
6802 }
6803 Ok(match artifact {
6804 DeserializerArtifact::None => unreachable!(),
6805 DeserializerArtifact::Data(data) => {
6806 SimpleBaseTypeContentDeserializer::store_union_(&mut values, data)?;
6807 let data = SimpleBaseTypeContentDeserializer::finish_state(
6808 reader,
6809 SimpleBaseTypeContentDeserializerState::Union(values, None),
6810 )?;
6811 *self.state = SimpleBaseTypeContentDeserializerState::Done__(data);
6812 ElementHandlerOutput::Break { event, allow_any }
6813 }
6814 DeserializerArtifact::Deserializer(deserializer) => {
6815 *self.state =
6816 SimpleBaseTypeContentDeserializerState::Union(values, Some(deserializer));
6817 ElementHandlerOutput::from_event_end(event, allow_any)
6818 }
6819 })
6820 }
6821 }
6822 impl<'de> Deserializer<'de, super::SimpleBaseTypeContent>
6823 for Box<SimpleBaseTypeContentDeserializer>
6824 {
6825 fn init<R>(
6826 reader: &R,
6827 event: Event<'de>,
6828 ) -> DeserializerResult<'de, super::SimpleBaseTypeContent>
6829 where
6830 R: DeserializeReader,
6831 {
6832 let deserializer = Box::new(SimpleBaseTypeContentDeserializer {
6833 state: Box::new(SimpleBaseTypeContentDeserializerState::Init__),
6834 });
6835 let mut output = deserializer.next(reader, event)?;
6836 output.artifact = match output.artifact {
6837 DeserializerArtifact::Deserializer(x)
6838 if matches!(&*x.state, SimpleBaseTypeContentDeserializerState::Init__) =>
6839 {
6840 DeserializerArtifact::None
6841 }
6842 artifact => artifact,
6843 };
6844 Ok(output)
6845 }
6846 fn next<R>(
6847 mut self,
6848 reader: &R,
6849 event: Event<'de>,
6850 ) -> DeserializerResult<'de, super::SimpleBaseTypeContent>
6851 where
6852 R: DeserializeReader,
6853 {
6854 use SimpleBaseTypeContentDeserializerState as S;
6855 let mut event = event;
6856 let mut fallback = None;
6857 let (event, allow_any) = loop {
6858 let state = replace(&mut *self.state, S::Unknown__);
6859 event = match (state, event) {
6860 (S::Annotation(values, Some(deserializer)), event) => {
6861 let output = deserializer.next(reader, event)?;
6862 match self.handle_annotation(reader, values, output, &mut fallback)? {
6863 ElementHandlerOutput::Break { event, allow_any } => {
6864 break (event, allow_any)
6865 }
6866 ElementHandlerOutput::Continue { event, .. } => event,
6867 }
6868 }
6869 (S::Restriction(values, Some(deserializer)), event) => {
6870 let output = deserializer.next(reader, event)?;
6871 match self.handle_restriction(reader, values, output, &mut fallback)? {
6872 ElementHandlerOutput::Break { event, allow_any } => {
6873 break (event, allow_any)
6874 }
6875 ElementHandlerOutput::Continue { event, .. } => event,
6876 }
6877 }
6878 (S::List(values, Some(deserializer)), event) => {
6879 let output = deserializer.next(reader, event)?;
6880 match self.handle_list(reader, values, output, &mut fallback)? {
6881 ElementHandlerOutput::Break { event, allow_any } => {
6882 break (event, allow_any)
6883 }
6884 ElementHandlerOutput::Continue { event, .. } => event,
6885 }
6886 }
6887 (S::Union(values, Some(deserializer)), event) => {
6888 let output = deserializer.next(reader, event)?;
6889 match self.handle_union_(reader, values, output, &mut fallback)? {
6890 ElementHandlerOutput::Break { event, allow_any } => {
6891 break (event, allow_any)
6892 }
6893 ElementHandlerOutput::Continue { event, .. } => event,
6894 }
6895 }
6896 (state, event @ Event::End(_)) => {
6897 return Ok(DeserializerOutput {
6898 artifact: DeserializerArtifact::Data(
6899 SimpleBaseTypeContentDeserializer::finish_state(reader, state)?,
6900 ),
6901 event: DeserializerEvent::Continue(event),
6902 allow_any: false,
6903 });
6904 }
6905 (S::Init__, event) => match self.find_suitable(reader, event, &mut fallback)? {
6906 ElementHandlerOutput::Break { event, allow_any } => {
6907 break (event, allow_any)
6908 }
6909 ElementHandlerOutput::Continue { event, .. } => event,
6910 },
6911 (S::Annotation(values, None), event) => {
6912 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
6913 reader, event,
6914 )?;
6915 match self.handle_annotation(reader, values, output, &mut fallback)? {
6916 ElementHandlerOutput::Break { event, allow_any } => {
6917 break (event, allow_any)
6918 }
6919 ElementHandlerOutput::Continue { event, .. } => event,
6920 }
6921 }
6922 (S::Restriction(values, None), event) => {
6923 let output = <super::Restriction as WithDeserializer>::Deserializer::init(
6924 reader, event,
6925 )?;
6926 match self.handle_restriction(reader, values, output, &mut fallback)? {
6927 ElementHandlerOutput::Break { event, allow_any } => {
6928 break (event, allow_any)
6929 }
6930 ElementHandlerOutput::Continue { event, .. } => event,
6931 }
6932 }
6933 (S::List(values, None), event) => {
6934 let output =
6935 <super::List as WithDeserializer>::Deserializer::init(reader, event)?;
6936 match self.handle_list(reader, values, output, &mut fallback)? {
6937 ElementHandlerOutput::Break { event, allow_any } => {
6938 break (event, allow_any)
6939 }
6940 ElementHandlerOutput::Continue { event, .. } => event,
6941 }
6942 }
6943 (S::Union(values, None), event) => {
6944 let output =
6945 <super::Union as WithDeserializer>::Deserializer::init(reader, event)?;
6946 match self.handle_union_(reader, values, output, &mut fallback)? {
6947 ElementHandlerOutput::Break { event, allow_any } => {
6948 break (event, allow_any)
6949 }
6950 ElementHandlerOutput::Continue { event, .. } => event,
6951 }
6952 }
6953 (s @ S::Done__(_), event) => {
6954 *self.state = s;
6955 break (DeserializerEvent::Continue(event), false);
6956 }
6957 (S::Unknown__, _) => unreachable!(),
6958 }
6959 };
6960 let artifact = if matches!(&*self.state, S::Done__(_)) {
6961 DeserializerArtifact::Data(self.finish(reader)?)
6962 } else {
6963 DeserializerArtifact::Deserializer(self)
6964 };
6965 Ok(DeserializerOutput {
6966 artifact,
6967 event,
6968 allow_any,
6969 })
6970 }
6971 fn finish<R>(self, reader: &R) -> Result<super::SimpleBaseTypeContent, Error>
6972 where
6973 R: DeserializeReader,
6974 {
6975 SimpleBaseTypeContentDeserializer::finish_state(reader, *self.state)
6976 }
6977 }
6978 #[derive(Debug)]
6979 pub struct ComplexBaseTypeDeserializer {
6980 id: Option<String>,
6981 name: Option<String>,
6982 mixed: Option<bool>,
6983 abstract_: bool,
6984 final_: Option<super::DerivationSetType>,
6985 block: Option<super::DerivationSetType>,
6986 default_attributes_apply: bool,
6987 content: Vec<super::ComplexBaseTypeContent>,
6988 state: Box<ComplexBaseTypeDeserializerState>,
6989 }
6990 #[derive(Debug)]
6991 enum ComplexBaseTypeDeserializerState {
6992 Init__,
6993 Next__,
6994 Content__(<super::ComplexBaseTypeContent as WithDeserializer>::Deserializer),
6995 Unknown__,
6996 }
6997 impl ComplexBaseTypeDeserializer {
6998 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
6999 where
7000 R: DeserializeReader,
7001 {
7002 let mut id: Option<String> = None;
7003 let mut name: Option<String> = None;
7004 let mut mixed: Option<bool> = None;
7005 let mut abstract_: Option<bool> = None;
7006 let mut final_: Option<super::DerivationSetType> = None;
7007 let mut block: Option<super::DerivationSetType> = None;
7008 let mut default_attributes_apply: Option<bool> = None;
7009 for attrib in filter_xmlns_attributes(bytes_start) {
7010 let attrib = attrib?;
7011 if matches!(
7012 reader.resolve_local_name(attrib.key, &super::NS_XS),
7013 Some(b"id")
7014 ) {
7015 reader.read_attrib(&mut id, b"id", &attrib.value)?;
7016 } else if matches!(
7017 reader.resolve_local_name(attrib.key, &super::NS_XS),
7018 Some(b"name")
7019 ) {
7020 reader.read_attrib(&mut name, b"name", &attrib.value)?;
7021 } else if matches!(
7022 reader.resolve_local_name(attrib.key, &super::NS_XS),
7023 Some(b"mixed")
7024 ) {
7025 reader.read_attrib(&mut mixed, b"mixed", &attrib.value)?;
7026 } else if matches!(
7027 reader.resolve_local_name(attrib.key, &super::NS_XS),
7028 Some(b"abstract")
7029 ) {
7030 reader.read_attrib(&mut abstract_, b"abstract", &attrib.value)?;
7031 } else if matches!(
7032 reader.resolve_local_name(attrib.key, &super::NS_XS),
7033 Some(b"final")
7034 ) {
7035 reader.read_attrib(&mut final_, b"final", &attrib.value)?;
7036 } else if matches!(
7037 reader.resolve_local_name(attrib.key, &super::NS_XS),
7038 Some(b"block")
7039 ) {
7040 reader.read_attrib(&mut block, b"block", &attrib.value)?;
7041 } else if matches!(
7042 reader.resolve_local_name(attrib.key, &super::NS_XS),
7043 Some(b"defaultAttributesApply")
7044 ) {
7045 reader.read_attrib(
7046 &mut default_attributes_apply,
7047 b"defaultAttributesApply",
7048 &attrib.value,
7049 )?;
7050 }
7051 }
7052 Ok(Box::new(Self {
7053 id: id,
7054 name: name,
7055 mixed: mixed,
7056 abstract_: abstract_.unwrap_or_else(super::ComplexBaseType::default_abstract_),
7057 final_: final_,
7058 block: block,
7059 default_attributes_apply: default_attributes_apply
7060 .unwrap_or_else(super::ComplexBaseType::default_default_attributes_apply),
7061 content: Vec::new(),
7062 state: Box::new(ComplexBaseTypeDeserializerState::Init__),
7063 }))
7064 }
7065 fn finish_state<R>(
7066 &mut self,
7067 reader: &R,
7068 state: ComplexBaseTypeDeserializerState,
7069 ) -> Result<(), Error>
7070 where
7071 R: DeserializeReader,
7072 {
7073 if let ComplexBaseTypeDeserializerState::Content__(deserializer) = state {
7074 self.store_content(deserializer.finish(reader)?)?;
7075 }
7076 Ok(())
7077 }
7078 fn store_content(&mut self, value: super::ComplexBaseTypeContent) -> Result<(), Error> {
7079 self.content.push(value);
7080 Ok(())
7081 }
7082 fn handle_content<'de, R>(
7083 &mut self,
7084 reader: &R,
7085 output: DeserializerOutput<'de, super::ComplexBaseTypeContent>,
7086 fallback: &mut Option<ComplexBaseTypeDeserializerState>,
7087 ) -> Result<ElementHandlerOutput<'de>, Error>
7088 where
7089 R: DeserializeReader,
7090 {
7091 let DeserializerOutput {
7092 artifact,
7093 event,
7094 allow_any,
7095 } = output;
7096 if artifact.is_none() {
7097 *self.state = fallback
7098 .take()
7099 .unwrap_or(ComplexBaseTypeDeserializerState::Next__);
7100 return Ok(ElementHandlerOutput::break_(event, allow_any));
7101 }
7102 if let Some(fallback) = fallback.take() {
7103 self.finish_state(reader, fallback)?;
7104 }
7105 Ok(match artifact {
7106 DeserializerArtifact::None => unreachable!(),
7107 DeserializerArtifact::Data(data) => {
7108 self.store_content(data)?;
7109 *self.state = ComplexBaseTypeDeserializerState::Next__;
7110 ElementHandlerOutput::from_event(event, allow_any)
7111 }
7112 DeserializerArtifact::Deserializer(deserializer) => {
7113 let ret = ElementHandlerOutput::from_event(event, allow_any);
7114 match &ret {
7115 ElementHandlerOutput::Break { .. } => {
7116 *self.state = ComplexBaseTypeDeserializerState::Content__(deserializer);
7117 }
7118 ElementHandlerOutput::Continue { .. } => {
7119 fallback.get_or_insert(ComplexBaseTypeDeserializerState::Content__(
7120 deserializer,
7121 ));
7122 *self.state = ComplexBaseTypeDeserializerState::Next__;
7123 }
7124 }
7125 ret
7126 }
7127 })
7128 }
7129 }
7130 impl<'de> Deserializer<'de, super::ComplexBaseType> for Box<ComplexBaseTypeDeserializer> {
7131 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::ComplexBaseType>
7132 where
7133 R: DeserializeReader,
7134 {
7135 reader.init_deserializer_from_start_event(
7136 event,
7137 ComplexBaseTypeDeserializer::from_bytes_start,
7138 )
7139 }
7140 fn next<R>(
7141 mut self,
7142 reader: &R,
7143 event: Event<'de>,
7144 ) -> DeserializerResult<'de, super::ComplexBaseType>
7145 where
7146 R: DeserializeReader,
7147 {
7148 use ComplexBaseTypeDeserializerState as S;
7149 let mut event = event;
7150 let mut fallback = None;
7151 let (event, allow_any) = loop {
7152 let state = replace(&mut *self.state, S::Unknown__);
7153 event = match (state, event) {
7154 (S::Content__(deserializer), event) => {
7155 let output = deserializer.next(reader, event)?;
7156 match self.handle_content(reader, output, &mut fallback)? {
7157 ElementHandlerOutput::Break { event, allow_any } => {
7158 break (event, allow_any)
7159 }
7160 ElementHandlerOutput::Continue { event, .. } => event,
7161 }
7162 }
7163 (_, Event::End(_)) => {
7164 return Ok(DeserializerOutput {
7165 artifact: DeserializerArtifact::Data(self.finish(reader)?),
7166 event: DeserializerEvent::None,
7167 allow_any: false,
7168 });
7169 }
7170 (state @ (S::Init__ | S::Next__), event) => {
7171 fallback.get_or_insert(state);
7172 let output = < super :: ComplexBaseTypeContent as WithDeserializer > :: Deserializer :: init (reader , event) ? ;
7173 match self.handle_content(reader, output, &mut fallback)? {
7174 ElementHandlerOutput::Break { event, allow_any } => {
7175 break (event, allow_any)
7176 }
7177 ElementHandlerOutput::Continue { event, .. } => event,
7178 }
7179 }
7180 (S::Unknown__, _) => unreachable!(),
7181 }
7182 };
7183 let artifact = DeserializerArtifact::Deserializer(self);
7184 Ok(DeserializerOutput {
7185 artifact,
7186 event,
7187 allow_any,
7188 })
7189 }
7190 fn finish<R>(mut self, reader: &R) -> Result<super::ComplexBaseType, Error>
7191 where
7192 R: DeserializeReader,
7193 {
7194 let state = replace(
7195 &mut *self.state,
7196 ComplexBaseTypeDeserializerState::Unknown__,
7197 );
7198 self.finish_state(reader, state)?;
7199 Ok(super::ComplexBaseType {
7200 id: self.id,
7201 name: self.name,
7202 mixed: self.mixed,
7203 abstract_: self.abstract_,
7204 final_: self.final_,
7205 block: self.block,
7206 default_attributes_apply: self.default_attributes_apply,
7207 content: self.content,
7208 })
7209 }
7210 }
7211 #[derive(Debug)]
7212 pub struct ComplexBaseTypeContentDeserializer {
7213 state: Box<ComplexBaseTypeContentDeserializerState>,
7214 }
7215 #[derive(Debug)]
7216 pub enum ComplexBaseTypeContentDeserializerState {
7217 Init__,
7218 Annotation(
7219 Option<super::Annotation>,
7220 Option<<super::Annotation as WithDeserializer>::Deserializer>,
7221 ),
7222 SimpleContent(
7223 Option<super::SimpleContent>,
7224 Option<<super::SimpleContent as WithDeserializer>::Deserializer>,
7225 ),
7226 ComplexContent(
7227 Option<super::ComplexContent>,
7228 Option<<super::ComplexContent as WithDeserializer>::Deserializer>,
7229 ),
7230 OpenContent(
7231 Option<super::OpenContent>,
7232 Option<<super::OpenContent as WithDeserializer>::Deserializer>,
7233 ),
7234 Group(
7235 Option<super::GroupType>,
7236 Option<<super::GroupType as WithDeserializer>::Deserializer>,
7237 ),
7238 All(
7239 Option<super::GroupType>,
7240 Option<<super::GroupType as WithDeserializer>::Deserializer>,
7241 ),
7242 Choice(
7243 Option<super::GroupType>,
7244 Option<<super::GroupType as WithDeserializer>::Deserializer>,
7245 ),
7246 Sequence(
7247 Option<super::GroupType>,
7248 Option<<super::GroupType as WithDeserializer>::Deserializer>,
7249 ),
7250 Attribute(
7251 Option<super::AttributeType>,
7252 Option<<super::AttributeType as WithDeserializer>::Deserializer>,
7253 ),
7254 AttributeGroup(
7255 Option<super::AttributeGroupType>,
7256 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
7257 ),
7258 AnyAttribute(
7259 Option<super::AnyAttribute>,
7260 Option<<super::AnyAttribute as WithDeserializer>::Deserializer>,
7261 ),
7262 Assert(
7263 Option<super::AssertionType>,
7264 Option<<super::AssertionType as WithDeserializer>::Deserializer>,
7265 ),
7266 Done__(super::ComplexBaseTypeContent),
7267 Unknown__,
7268 }
7269 impl ComplexBaseTypeContentDeserializer {
7270 fn find_suitable<'de, R>(
7271 &mut self,
7272 reader: &R,
7273 event: Event<'de>,
7274 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
7275 ) -> Result<ElementHandlerOutput<'de>, Error>
7276 where
7277 R: DeserializeReader,
7278 {
7279 let (Event::Start(x) | Event::Empty(x)) = &event else {
7280 *self.state = fallback
7281 .take()
7282 .unwrap_or(ComplexBaseTypeContentDeserializerState::Init__);
7283 return Ok(ElementHandlerOutput::return_to_parent(event, false));
7284 };
7285 if matches!(
7286 reader.resolve_local_name(x.name(), &super::NS_XS),
7287 Some(b"annotation")
7288 ) {
7289 let output =
7290 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
7291 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
7292 }
7293 if matches!(
7294 reader.resolve_local_name(x.name(), &super::NS_XS),
7295 Some(b"simpleContent")
7296 ) {
7297 let output =
7298 <super::SimpleContent as WithDeserializer>::Deserializer::init(reader, event)?;
7299 return self.handle_simple_content(
7300 reader,
7301 Default::default(),
7302 output,
7303 &mut *fallback,
7304 );
7305 }
7306 if matches!(
7307 reader.resolve_local_name(x.name(), &super::NS_XS),
7308 Some(b"complexContent")
7309 ) {
7310 let output =
7311 <super::ComplexContent as WithDeserializer>::Deserializer::init(reader, event)?;
7312 return self.handle_complex_content(
7313 reader,
7314 Default::default(),
7315 output,
7316 &mut *fallback,
7317 );
7318 }
7319 if matches!(
7320 reader.resolve_local_name(x.name(), &super::NS_XS),
7321 Some(b"openContent")
7322 ) {
7323 let output =
7324 <super::OpenContent as WithDeserializer>::Deserializer::init(reader, event)?;
7325 return self.handle_open_content(
7326 reader,
7327 Default::default(),
7328 output,
7329 &mut *fallback,
7330 );
7331 }
7332 if matches!(
7333 reader.resolve_local_name(x.name(), &super::NS_XS),
7334 Some(b"group")
7335 ) {
7336 let output =
7337 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
7338 return self.handle_group(reader, Default::default(), output, &mut *fallback);
7339 }
7340 if matches!(
7341 reader.resolve_local_name(x.name(), &super::NS_XS),
7342 Some(b"all")
7343 ) {
7344 let output =
7345 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
7346 return self.handle_all(reader, Default::default(), output, &mut *fallback);
7347 }
7348 if matches!(
7349 reader.resolve_local_name(x.name(), &super::NS_XS),
7350 Some(b"choice")
7351 ) {
7352 let output =
7353 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
7354 return self.handle_choice(reader, Default::default(), output, &mut *fallback);
7355 }
7356 if matches!(
7357 reader.resolve_local_name(x.name(), &super::NS_XS),
7358 Some(b"sequence")
7359 ) {
7360 let output =
7361 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
7362 return self.handle_sequence(reader, Default::default(), output, &mut *fallback);
7363 }
7364 if matches!(
7365 reader.resolve_local_name(x.name(), &super::NS_XS),
7366 Some(b"attribute")
7367 ) {
7368 let output =
7369 <super::AttributeType as WithDeserializer>::Deserializer::init(reader, event)?;
7370 return self.handle_attribute(reader, Default::default(), output, &mut *fallback);
7371 }
7372 if matches!(
7373 reader.resolve_local_name(x.name(), &super::NS_XS),
7374 Some(b"attributeGroup")
7375 ) {
7376 let output = <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
7377 reader, event,
7378 )?;
7379 return self.handle_attribute_group(
7380 reader,
7381 Default::default(),
7382 output,
7383 &mut *fallback,
7384 );
7385 }
7386 if matches!(
7387 reader.resolve_local_name(x.name(), &super::NS_XS),
7388 Some(b"anyAttribute")
7389 ) {
7390 let output =
7391 <super::AnyAttribute as WithDeserializer>::Deserializer::init(reader, event)?;
7392 return self.handle_any_attribute(
7393 reader,
7394 Default::default(),
7395 output,
7396 &mut *fallback,
7397 );
7398 }
7399 if matches!(
7400 reader.resolve_local_name(x.name(), &super::NS_XS),
7401 Some(b"assert")
7402 ) {
7403 let output =
7404 <super::AssertionType as WithDeserializer>::Deserializer::init(reader, event)?;
7405 return self.handle_assert(reader, Default::default(), output, &mut *fallback);
7406 }
7407 *self.state = fallback
7408 .take()
7409 .unwrap_or(ComplexBaseTypeContentDeserializerState::Init__);
7410 Ok(ElementHandlerOutput::return_to_parent(event, false))
7411 }
7412 fn finish_state<R>(
7413 reader: &R,
7414 state: ComplexBaseTypeContentDeserializerState,
7415 ) -> Result<super::ComplexBaseTypeContent, Error>
7416 where
7417 R: DeserializeReader,
7418 {
7419 use ComplexBaseTypeContentDeserializerState as S;
7420 match state {
7421 S::Init__ => Err(ErrorKind::MissingContent.into()),
7422 S::Annotation(mut values, deserializer) => {
7423 if let Some(deserializer) = deserializer {
7424 let value = deserializer.finish(reader)?;
7425 ComplexBaseTypeContentDeserializer::store_annotation(&mut values, value)?;
7426 }
7427 Ok(super::ComplexBaseTypeContent::Annotation(
7428 values.ok_or_else(|| ErrorKind::MissingElement("annotation".into()))?,
7429 ))
7430 }
7431 S::SimpleContent(mut values, deserializer) => {
7432 if let Some(deserializer) = deserializer {
7433 let value = deserializer.finish(reader)?;
7434 ComplexBaseTypeContentDeserializer::store_simple_content(
7435 &mut values,
7436 value,
7437 )?;
7438 }
7439 Ok(super::ComplexBaseTypeContent::SimpleContent(
7440 values.ok_or_else(|| ErrorKind::MissingElement("simpleContent".into()))?,
7441 ))
7442 }
7443 S::ComplexContent(mut values, deserializer) => {
7444 if let Some(deserializer) = deserializer {
7445 let value = deserializer.finish(reader)?;
7446 ComplexBaseTypeContentDeserializer::store_complex_content(
7447 &mut values,
7448 value,
7449 )?;
7450 }
7451 Ok(super::ComplexBaseTypeContent::ComplexContent(
7452 values.ok_or_else(|| ErrorKind::MissingElement("complexContent".into()))?,
7453 ))
7454 }
7455 S::OpenContent(mut values, deserializer) => {
7456 if let Some(deserializer) = deserializer {
7457 let value = deserializer.finish(reader)?;
7458 ComplexBaseTypeContentDeserializer::store_open_content(&mut values, value)?;
7459 }
7460 Ok(super::ComplexBaseTypeContent::OpenContent(
7461 values.ok_or_else(|| ErrorKind::MissingElement("openContent".into()))?,
7462 ))
7463 }
7464 S::Group(mut values, deserializer) => {
7465 if let Some(deserializer) = deserializer {
7466 let value = deserializer.finish(reader)?;
7467 ComplexBaseTypeContentDeserializer::store_group(&mut values, value)?;
7468 }
7469 Ok(super::ComplexBaseTypeContent::Group(values.ok_or_else(
7470 || ErrorKind::MissingElement("group".into()),
7471 )?))
7472 }
7473 S::All(mut values, deserializer) => {
7474 if let Some(deserializer) = deserializer {
7475 let value = deserializer.finish(reader)?;
7476 ComplexBaseTypeContentDeserializer::store_all(&mut values, value)?;
7477 }
7478 Ok(super::ComplexBaseTypeContent::All(
7479 values.ok_or_else(|| ErrorKind::MissingElement("all".into()))?,
7480 ))
7481 }
7482 S::Choice(mut values, deserializer) => {
7483 if let Some(deserializer) = deserializer {
7484 let value = deserializer.finish(reader)?;
7485 ComplexBaseTypeContentDeserializer::store_choice(&mut values, value)?;
7486 }
7487 Ok(super::ComplexBaseTypeContent::Choice(values.ok_or_else(
7488 || ErrorKind::MissingElement("choice".into()),
7489 )?))
7490 }
7491 S::Sequence(mut values, deserializer) => {
7492 if let Some(deserializer) = deserializer {
7493 let value = deserializer.finish(reader)?;
7494 ComplexBaseTypeContentDeserializer::store_sequence(&mut values, value)?;
7495 }
7496 Ok(super::ComplexBaseTypeContent::Sequence(values.ok_or_else(
7497 || ErrorKind::MissingElement("sequence".into()),
7498 )?))
7499 }
7500 S::Attribute(mut values, deserializer) => {
7501 if let Some(deserializer) = deserializer {
7502 let value = deserializer.finish(reader)?;
7503 ComplexBaseTypeContentDeserializer::store_attribute(&mut values, value)?;
7504 }
7505 Ok(super::ComplexBaseTypeContent::Attribute(
7506 values.ok_or_else(|| ErrorKind::MissingElement("attribute".into()))?,
7507 ))
7508 }
7509 S::AttributeGroup(mut values, deserializer) => {
7510 if let Some(deserializer) = deserializer {
7511 let value = deserializer.finish(reader)?;
7512 ComplexBaseTypeContentDeserializer::store_attribute_group(
7513 &mut values,
7514 value,
7515 )?;
7516 }
7517 Ok(super::ComplexBaseTypeContent::AttributeGroup(
7518 values.ok_or_else(|| ErrorKind::MissingElement("attributeGroup".into()))?,
7519 ))
7520 }
7521 S::AnyAttribute(mut values, deserializer) => {
7522 if let Some(deserializer) = deserializer {
7523 let value = deserializer.finish(reader)?;
7524 ComplexBaseTypeContentDeserializer::store_any_attribute(
7525 &mut values,
7526 value,
7527 )?;
7528 }
7529 Ok(super::ComplexBaseTypeContent::AnyAttribute(
7530 values.ok_or_else(|| ErrorKind::MissingElement("anyAttribute".into()))?,
7531 ))
7532 }
7533 S::Assert(mut values, deserializer) => {
7534 if let Some(deserializer) = deserializer {
7535 let value = deserializer.finish(reader)?;
7536 ComplexBaseTypeContentDeserializer::store_assert(&mut values, value)?;
7537 }
7538 Ok(super::ComplexBaseTypeContent::Assert(values.ok_or_else(
7539 || ErrorKind::MissingElement("assert".into()),
7540 )?))
7541 }
7542 S::Done__(data) => Ok(data),
7543 S::Unknown__ => unreachable!(),
7544 }
7545 }
7546 fn store_annotation(
7547 values: &mut Option<super::Annotation>,
7548 value: super::Annotation,
7549 ) -> Result<(), Error> {
7550 if values.is_some() {
7551 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7552 b"annotation",
7553 )))?;
7554 }
7555 *values = Some(value);
7556 Ok(())
7557 }
7558 fn store_simple_content(
7559 values: &mut Option<super::SimpleContent>,
7560 value: super::SimpleContent,
7561 ) -> Result<(), Error> {
7562 if values.is_some() {
7563 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7564 b"simpleContent",
7565 )))?;
7566 }
7567 *values = Some(value);
7568 Ok(())
7569 }
7570 fn store_complex_content(
7571 values: &mut Option<super::ComplexContent>,
7572 value: super::ComplexContent,
7573 ) -> Result<(), Error> {
7574 if values.is_some() {
7575 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7576 b"complexContent",
7577 )))?;
7578 }
7579 *values = Some(value);
7580 Ok(())
7581 }
7582 fn store_open_content(
7583 values: &mut Option<super::OpenContent>,
7584 value: super::OpenContent,
7585 ) -> Result<(), Error> {
7586 if values.is_some() {
7587 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7588 b"openContent",
7589 )))?;
7590 }
7591 *values = Some(value);
7592 Ok(())
7593 }
7594 fn store_group(
7595 values: &mut Option<super::GroupType>,
7596 value: super::GroupType,
7597 ) -> Result<(), Error> {
7598 if values.is_some() {
7599 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7600 b"group",
7601 )))?;
7602 }
7603 *values = Some(value);
7604 Ok(())
7605 }
7606 fn store_all(
7607 values: &mut Option<super::GroupType>,
7608 value: super::GroupType,
7609 ) -> Result<(), Error> {
7610 if values.is_some() {
7611 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"all")))?;
7612 }
7613 *values = Some(value);
7614 Ok(())
7615 }
7616 fn store_choice(
7617 values: &mut Option<super::GroupType>,
7618 value: super::GroupType,
7619 ) -> Result<(), Error> {
7620 if values.is_some() {
7621 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7622 b"choice",
7623 )))?;
7624 }
7625 *values = Some(value);
7626 Ok(())
7627 }
7628 fn store_sequence(
7629 values: &mut Option<super::GroupType>,
7630 value: super::GroupType,
7631 ) -> Result<(), Error> {
7632 if values.is_some() {
7633 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7634 b"sequence",
7635 )))?;
7636 }
7637 *values = Some(value);
7638 Ok(())
7639 }
7640 fn store_attribute(
7641 values: &mut Option<super::AttributeType>,
7642 value: super::AttributeType,
7643 ) -> Result<(), Error> {
7644 if values.is_some() {
7645 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7646 b"attribute",
7647 )))?;
7648 }
7649 *values = Some(value);
7650 Ok(())
7651 }
7652 fn store_attribute_group(
7653 values: &mut Option<super::AttributeGroupType>,
7654 value: super::AttributeGroupType,
7655 ) -> Result<(), Error> {
7656 if values.is_some() {
7657 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7658 b"attributeGroup",
7659 )))?;
7660 }
7661 *values = Some(value);
7662 Ok(())
7663 }
7664 fn store_any_attribute(
7665 values: &mut Option<super::AnyAttribute>,
7666 value: super::AnyAttribute,
7667 ) -> Result<(), Error> {
7668 if values.is_some() {
7669 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7670 b"anyAttribute",
7671 )))?;
7672 }
7673 *values = Some(value);
7674 Ok(())
7675 }
7676 fn store_assert(
7677 values: &mut Option<super::AssertionType>,
7678 value: super::AssertionType,
7679 ) -> Result<(), Error> {
7680 if values.is_some() {
7681 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7682 b"assert",
7683 )))?;
7684 }
7685 *values = Some(value);
7686 Ok(())
7687 }
7688 fn handle_annotation<'de, R>(
7689 &mut self,
7690 reader: &R,
7691 mut values: Option<super::Annotation>,
7692 output: DeserializerOutput<'de, super::Annotation>,
7693 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
7694 ) -> Result<ElementHandlerOutput<'de>, Error>
7695 where
7696 R: DeserializeReader,
7697 {
7698 let DeserializerOutput {
7699 artifact,
7700 event,
7701 allow_any,
7702 } = output;
7703 if artifact.is_none() {
7704 *self.state = match fallback.take() {
7705 None => ComplexBaseTypeContentDeserializerState::Init__,
7706 Some(ComplexBaseTypeContentDeserializerState::Annotation(
7707 _,
7708 Some(deserializer),
7709 )) => ComplexBaseTypeContentDeserializerState::Annotation(
7710 values,
7711 Some(deserializer),
7712 ),
7713 _ => unreachable!(),
7714 };
7715 return Ok(ElementHandlerOutput::break_(event, allow_any));
7716 }
7717 match fallback.take() {
7718 None => (),
7719 Some(ComplexBaseTypeContentDeserializerState::Annotation(
7720 _,
7721 Some(deserializer),
7722 )) => {
7723 let data = deserializer.finish(reader)?;
7724 ComplexBaseTypeContentDeserializer::store_annotation(&mut values, data)?;
7725 }
7726 Some(_) => unreachable!(),
7727 }
7728 Ok(match artifact {
7729 DeserializerArtifact::None => unreachable!(),
7730 DeserializerArtifact::Data(data) => {
7731 ComplexBaseTypeContentDeserializer::store_annotation(&mut values, data)?;
7732 let data = ComplexBaseTypeContentDeserializer::finish_state(
7733 reader,
7734 ComplexBaseTypeContentDeserializerState::Annotation(values, None),
7735 )?;
7736 *self.state = ComplexBaseTypeContentDeserializerState::Done__(data);
7737 ElementHandlerOutput::Break { event, allow_any }
7738 }
7739 DeserializerArtifact::Deserializer(deserializer) => {
7740 *self.state = ComplexBaseTypeContentDeserializerState::Annotation(
7741 values,
7742 Some(deserializer),
7743 );
7744 ElementHandlerOutput::from_event_end(event, allow_any)
7745 }
7746 })
7747 }
7748 fn handle_simple_content<'de, R>(
7749 &mut self,
7750 reader: &R,
7751 mut values: Option<super::SimpleContent>,
7752 output: DeserializerOutput<'de, super::SimpleContent>,
7753 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
7754 ) -> Result<ElementHandlerOutput<'de>, Error>
7755 where
7756 R: DeserializeReader,
7757 {
7758 let DeserializerOutput {
7759 artifact,
7760 event,
7761 allow_any,
7762 } = output;
7763 if artifact.is_none() {
7764 *self.state = match fallback.take() {
7765 None => ComplexBaseTypeContentDeserializerState::Init__,
7766 Some(ComplexBaseTypeContentDeserializerState::SimpleContent(
7767 _,
7768 Some(deserializer),
7769 )) => ComplexBaseTypeContentDeserializerState::SimpleContent(
7770 values,
7771 Some(deserializer),
7772 ),
7773 _ => unreachable!(),
7774 };
7775 return Ok(ElementHandlerOutput::break_(event, allow_any));
7776 }
7777 match fallback.take() {
7778 None => (),
7779 Some(ComplexBaseTypeContentDeserializerState::SimpleContent(
7780 _,
7781 Some(deserializer),
7782 )) => {
7783 let data = deserializer.finish(reader)?;
7784 ComplexBaseTypeContentDeserializer::store_simple_content(&mut values, data)?;
7785 }
7786 Some(_) => unreachable!(),
7787 }
7788 Ok(match artifact {
7789 DeserializerArtifact::None => unreachable!(),
7790 DeserializerArtifact::Data(data) => {
7791 ComplexBaseTypeContentDeserializer::store_simple_content(&mut values, data)?;
7792 let data = ComplexBaseTypeContentDeserializer::finish_state(
7793 reader,
7794 ComplexBaseTypeContentDeserializerState::SimpleContent(values, None),
7795 )?;
7796 *self.state = ComplexBaseTypeContentDeserializerState::Done__(data);
7797 ElementHandlerOutput::Break { event, allow_any }
7798 }
7799 DeserializerArtifact::Deserializer(deserializer) => {
7800 *self.state = ComplexBaseTypeContentDeserializerState::SimpleContent(
7801 values,
7802 Some(deserializer),
7803 );
7804 ElementHandlerOutput::from_event_end(event, allow_any)
7805 }
7806 })
7807 }
7808 fn handle_complex_content<'de, R>(
7809 &mut self,
7810 reader: &R,
7811 mut values: Option<super::ComplexContent>,
7812 output: DeserializerOutput<'de, super::ComplexContent>,
7813 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
7814 ) -> Result<ElementHandlerOutput<'de>, Error>
7815 where
7816 R: DeserializeReader,
7817 {
7818 let DeserializerOutput {
7819 artifact,
7820 event,
7821 allow_any,
7822 } = output;
7823 if artifact.is_none() {
7824 *self.state = match fallback.take() {
7825 None => ComplexBaseTypeContentDeserializerState::Init__,
7826 Some(ComplexBaseTypeContentDeserializerState::ComplexContent(
7827 _,
7828 Some(deserializer),
7829 )) => ComplexBaseTypeContentDeserializerState::ComplexContent(
7830 values,
7831 Some(deserializer),
7832 ),
7833 _ => unreachable!(),
7834 };
7835 return Ok(ElementHandlerOutput::break_(event, allow_any));
7836 }
7837 match fallback.take() {
7838 None => (),
7839 Some(ComplexBaseTypeContentDeserializerState::ComplexContent(
7840 _,
7841 Some(deserializer),
7842 )) => {
7843 let data = deserializer.finish(reader)?;
7844 ComplexBaseTypeContentDeserializer::store_complex_content(&mut values, data)?;
7845 }
7846 Some(_) => unreachable!(),
7847 }
7848 Ok(match artifact {
7849 DeserializerArtifact::None => unreachable!(),
7850 DeserializerArtifact::Data(data) => {
7851 ComplexBaseTypeContentDeserializer::store_complex_content(&mut values, data)?;
7852 let data = ComplexBaseTypeContentDeserializer::finish_state(
7853 reader,
7854 ComplexBaseTypeContentDeserializerState::ComplexContent(values, None),
7855 )?;
7856 *self.state = ComplexBaseTypeContentDeserializerState::Done__(data);
7857 ElementHandlerOutput::Break { event, allow_any }
7858 }
7859 DeserializerArtifact::Deserializer(deserializer) => {
7860 *self.state = ComplexBaseTypeContentDeserializerState::ComplexContent(
7861 values,
7862 Some(deserializer),
7863 );
7864 ElementHandlerOutput::from_event_end(event, allow_any)
7865 }
7866 })
7867 }
7868 fn handle_open_content<'de, R>(
7869 &mut self,
7870 reader: &R,
7871 mut values: Option<super::OpenContent>,
7872 output: DeserializerOutput<'de, super::OpenContent>,
7873 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
7874 ) -> Result<ElementHandlerOutput<'de>, Error>
7875 where
7876 R: DeserializeReader,
7877 {
7878 let DeserializerOutput {
7879 artifact,
7880 event,
7881 allow_any,
7882 } = output;
7883 if artifact.is_none() {
7884 *self.state = match fallback.take() {
7885 None => ComplexBaseTypeContentDeserializerState::Init__,
7886 Some(ComplexBaseTypeContentDeserializerState::OpenContent(
7887 _,
7888 Some(deserializer),
7889 )) => ComplexBaseTypeContentDeserializerState::OpenContent(
7890 values,
7891 Some(deserializer),
7892 ),
7893 _ => unreachable!(),
7894 };
7895 return Ok(ElementHandlerOutput::break_(event, allow_any));
7896 }
7897 match fallback.take() {
7898 None => (),
7899 Some(ComplexBaseTypeContentDeserializerState::OpenContent(
7900 _,
7901 Some(deserializer),
7902 )) => {
7903 let data = deserializer.finish(reader)?;
7904 ComplexBaseTypeContentDeserializer::store_open_content(&mut values, data)?;
7905 }
7906 Some(_) => unreachable!(),
7907 }
7908 Ok(match artifact {
7909 DeserializerArtifact::None => unreachable!(),
7910 DeserializerArtifact::Data(data) => {
7911 ComplexBaseTypeContentDeserializer::store_open_content(&mut values, data)?;
7912 let data = ComplexBaseTypeContentDeserializer::finish_state(
7913 reader,
7914 ComplexBaseTypeContentDeserializerState::OpenContent(values, None),
7915 )?;
7916 *self.state = ComplexBaseTypeContentDeserializerState::Done__(data);
7917 ElementHandlerOutput::Break { event, allow_any }
7918 }
7919 DeserializerArtifact::Deserializer(deserializer) => {
7920 *self.state = ComplexBaseTypeContentDeserializerState::OpenContent(
7921 values,
7922 Some(deserializer),
7923 );
7924 ElementHandlerOutput::from_event_end(event, allow_any)
7925 }
7926 })
7927 }
7928 fn handle_group<'de, R>(
7929 &mut self,
7930 reader: &R,
7931 mut values: Option<super::GroupType>,
7932 output: DeserializerOutput<'de, super::GroupType>,
7933 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
7934 ) -> Result<ElementHandlerOutput<'de>, Error>
7935 where
7936 R: DeserializeReader,
7937 {
7938 let DeserializerOutput {
7939 artifact,
7940 event,
7941 allow_any,
7942 } = output;
7943 if artifact.is_none() {
7944 *self.state = match fallback.take() {
7945 None => ComplexBaseTypeContentDeserializerState::Init__,
7946 Some(ComplexBaseTypeContentDeserializerState::Group(_, Some(deserializer))) => {
7947 ComplexBaseTypeContentDeserializerState::Group(values, Some(deserializer))
7948 }
7949 _ => unreachable!(),
7950 };
7951 return Ok(ElementHandlerOutput::break_(event, allow_any));
7952 }
7953 match fallback.take() {
7954 None => (),
7955 Some(ComplexBaseTypeContentDeserializerState::Group(_, Some(deserializer))) => {
7956 let data = deserializer.finish(reader)?;
7957 ComplexBaseTypeContentDeserializer::store_group(&mut values, data)?;
7958 }
7959 Some(_) => unreachable!(),
7960 }
7961 Ok(match artifact {
7962 DeserializerArtifact::None => unreachable!(),
7963 DeserializerArtifact::Data(data) => {
7964 ComplexBaseTypeContentDeserializer::store_group(&mut values, data)?;
7965 let data = ComplexBaseTypeContentDeserializer::finish_state(
7966 reader,
7967 ComplexBaseTypeContentDeserializerState::Group(values, None),
7968 )?;
7969 *self.state = ComplexBaseTypeContentDeserializerState::Done__(data);
7970 ElementHandlerOutput::Break { event, allow_any }
7971 }
7972 DeserializerArtifact::Deserializer(deserializer) => {
7973 *self.state =
7974 ComplexBaseTypeContentDeserializerState::Group(values, Some(deserializer));
7975 ElementHandlerOutput::from_event_end(event, allow_any)
7976 }
7977 })
7978 }
7979 fn handle_all<'de, R>(
7980 &mut self,
7981 reader: &R,
7982 mut values: Option<super::GroupType>,
7983 output: DeserializerOutput<'de, super::GroupType>,
7984 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
7985 ) -> Result<ElementHandlerOutput<'de>, Error>
7986 where
7987 R: DeserializeReader,
7988 {
7989 let DeserializerOutput {
7990 artifact,
7991 event,
7992 allow_any,
7993 } = output;
7994 if artifact.is_none() {
7995 *self.state = match fallback.take() {
7996 None => ComplexBaseTypeContentDeserializerState::Init__,
7997 Some(ComplexBaseTypeContentDeserializerState::All(_, Some(deserializer))) => {
7998 ComplexBaseTypeContentDeserializerState::All(values, Some(deserializer))
7999 }
8000 _ => unreachable!(),
8001 };
8002 return Ok(ElementHandlerOutput::break_(event, allow_any));
8003 }
8004 match fallback.take() {
8005 None => (),
8006 Some(ComplexBaseTypeContentDeserializerState::All(_, Some(deserializer))) => {
8007 let data = deserializer.finish(reader)?;
8008 ComplexBaseTypeContentDeserializer::store_all(&mut values, data)?;
8009 }
8010 Some(_) => unreachable!(),
8011 }
8012 Ok(match artifact {
8013 DeserializerArtifact::None => unreachable!(),
8014 DeserializerArtifact::Data(data) => {
8015 ComplexBaseTypeContentDeserializer::store_all(&mut values, data)?;
8016 let data = ComplexBaseTypeContentDeserializer::finish_state(
8017 reader,
8018 ComplexBaseTypeContentDeserializerState::All(values, None),
8019 )?;
8020 *self.state = ComplexBaseTypeContentDeserializerState::Done__(data);
8021 ElementHandlerOutput::Break { event, allow_any }
8022 }
8023 DeserializerArtifact::Deserializer(deserializer) => {
8024 *self.state =
8025 ComplexBaseTypeContentDeserializerState::All(values, Some(deserializer));
8026 ElementHandlerOutput::from_event_end(event, allow_any)
8027 }
8028 })
8029 }
8030 fn handle_choice<'de, R>(
8031 &mut self,
8032 reader: &R,
8033 mut values: Option<super::GroupType>,
8034 output: DeserializerOutput<'de, super::GroupType>,
8035 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
8036 ) -> Result<ElementHandlerOutput<'de>, Error>
8037 where
8038 R: DeserializeReader,
8039 {
8040 let DeserializerOutput {
8041 artifact,
8042 event,
8043 allow_any,
8044 } = output;
8045 if artifact.is_none() {
8046 *self.state = match fallback.take() {
8047 None => ComplexBaseTypeContentDeserializerState::Init__,
8048 Some(ComplexBaseTypeContentDeserializerState::Choice(
8049 _,
8050 Some(deserializer),
8051 )) => {
8052 ComplexBaseTypeContentDeserializerState::Choice(values, Some(deserializer))
8053 }
8054 _ => unreachable!(),
8055 };
8056 return Ok(ElementHandlerOutput::break_(event, allow_any));
8057 }
8058 match fallback.take() {
8059 None => (),
8060 Some(ComplexBaseTypeContentDeserializerState::Choice(_, Some(deserializer))) => {
8061 let data = deserializer.finish(reader)?;
8062 ComplexBaseTypeContentDeserializer::store_choice(&mut values, data)?;
8063 }
8064 Some(_) => unreachable!(),
8065 }
8066 Ok(match artifact {
8067 DeserializerArtifact::None => unreachable!(),
8068 DeserializerArtifact::Data(data) => {
8069 ComplexBaseTypeContentDeserializer::store_choice(&mut values, data)?;
8070 let data = ComplexBaseTypeContentDeserializer::finish_state(
8071 reader,
8072 ComplexBaseTypeContentDeserializerState::Choice(values, None),
8073 )?;
8074 *self.state = ComplexBaseTypeContentDeserializerState::Done__(data);
8075 ElementHandlerOutput::Break { event, allow_any }
8076 }
8077 DeserializerArtifact::Deserializer(deserializer) => {
8078 *self.state =
8079 ComplexBaseTypeContentDeserializerState::Choice(values, Some(deserializer));
8080 ElementHandlerOutput::from_event_end(event, allow_any)
8081 }
8082 })
8083 }
8084 fn handle_sequence<'de, R>(
8085 &mut self,
8086 reader: &R,
8087 mut values: Option<super::GroupType>,
8088 output: DeserializerOutput<'de, super::GroupType>,
8089 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
8090 ) -> Result<ElementHandlerOutput<'de>, Error>
8091 where
8092 R: DeserializeReader,
8093 {
8094 let DeserializerOutput {
8095 artifact,
8096 event,
8097 allow_any,
8098 } = output;
8099 if artifact.is_none() {
8100 *self.state = match fallback.take() {
8101 None => ComplexBaseTypeContentDeserializerState::Init__,
8102 Some(ComplexBaseTypeContentDeserializerState::Sequence(
8103 _,
8104 Some(deserializer),
8105 )) => ComplexBaseTypeContentDeserializerState::Sequence(
8106 values,
8107 Some(deserializer),
8108 ),
8109 _ => unreachable!(),
8110 };
8111 return Ok(ElementHandlerOutput::break_(event, allow_any));
8112 }
8113 match fallback.take() {
8114 None => (),
8115 Some(ComplexBaseTypeContentDeserializerState::Sequence(_, Some(deserializer))) => {
8116 let data = deserializer.finish(reader)?;
8117 ComplexBaseTypeContentDeserializer::store_sequence(&mut values, data)?;
8118 }
8119 Some(_) => unreachable!(),
8120 }
8121 Ok(match artifact {
8122 DeserializerArtifact::None => unreachable!(),
8123 DeserializerArtifact::Data(data) => {
8124 ComplexBaseTypeContentDeserializer::store_sequence(&mut values, data)?;
8125 let data = ComplexBaseTypeContentDeserializer::finish_state(
8126 reader,
8127 ComplexBaseTypeContentDeserializerState::Sequence(values, None),
8128 )?;
8129 *self.state = ComplexBaseTypeContentDeserializerState::Done__(data);
8130 ElementHandlerOutput::Break { event, allow_any }
8131 }
8132 DeserializerArtifact::Deserializer(deserializer) => {
8133 *self.state = ComplexBaseTypeContentDeserializerState::Sequence(
8134 values,
8135 Some(deserializer),
8136 );
8137 ElementHandlerOutput::from_event_end(event, allow_any)
8138 }
8139 })
8140 }
8141 fn handle_attribute<'de, R>(
8142 &mut self,
8143 reader: &R,
8144 mut values: Option<super::AttributeType>,
8145 output: DeserializerOutput<'de, super::AttributeType>,
8146 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
8147 ) -> Result<ElementHandlerOutput<'de>, Error>
8148 where
8149 R: DeserializeReader,
8150 {
8151 let DeserializerOutput {
8152 artifact,
8153 event,
8154 allow_any,
8155 } = output;
8156 if artifact.is_none() {
8157 *self.state = match fallback.take() {
8158 None => ComplexBaseTypeContentDeserializerState::Init__,
8159 Some(ComplexBaseTypeContentDeserializerState::Attribute(
8160 _,
8161 Some(deserializer),
8162 )) => ComplexBaseTypeContentDeserializerState::Attribute(
8163 values,
8164 Some(deserializer),
8165 ),
8166 _ => unreachable!(),
8167 };
8168 return Ok(ElementHandlerOutput::break_(event, allow_any));
8169 }
8170 match fallback.take() {
8171 None => (),
8172 Some(ComplexBaseTypeContentDeserializerState::Attribute(_, Some(deserializer))) => {
8173 let data = deserializer.finish(reader)?;
8174 ComplexBaseTypeContentDeserializer::store_attribute(&mut values, data)?;
8175 }
8176 Some(_) => unreachable!(),
8177 }
8178 Ok(match artifact {
8179 DeserializerArtifact::None => unreachable!(),
8180 DeserializerArtifact::Data(data) => {
8181 ComplexBaseTypeContentDeserializer::store_attribute(&mut values, data)?;
8182 let data = ComplexBaseTypeContentDeserializer::finish_state(
8183 reader,
8184 ComplexBaseTypeContentDeserializerState::Attribute(values, None),
8185 )?;
8186 *self.state = ComplexBaseTypeContentDeserializerState::Done__(data);
8187 ElementHandlerOutput::Break { event, allow_any }
8188 }
8189 DeserializerArtifact::Deserializer(deserializer) => {
8190 *self.state = ComplexBaseTypeContentDeserializerState::Attribute(
8191 values,
8192 Some(deserializer),
8193 );
8194 ElementHandlerOutput::from_event_end(event, allow_any)
8195 }
8196 })
8197 }
8198 fn handle_attribute_group<'de, R>(
8199 &mut self,
8200 reader: &R,
8201 mut values: Option<super::AttributeGroupType>,
8202 output: DeserializerOutput<'de, super::AttributeGroupType>,
8203 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
8204 ) -> Result<ElementHandlerOutput<'de>, Error>
8205 where
8206 R: DeserializeReader,
8207 {
8208 let DeserializerOutput {
8209 artifact,
8210 event,
8211 allow_any,
8212 } = output;
8213 if artifact.is_none() {
8214 *self.state = match fallback.take() {
8215 None => ComplexBaseTypeContentDeserializerState::Init__,
8216 Some(ComplexBaseTypeContentDeserializerState::AttributeGroup(
8217 _,
8218 Some(deserializer),
8219 )) => ComplexBaseTypeContentDeserializerState::AttributeGroup(
8220 values,
8221 Some(deserializer),
8222 ),
8223 _ => unreachable!(),
8224 };
8225 return Ok(ElementHandlerOutput::break_(event, allow_any));
8226 }
8227 match fallback.take() {
8228 None => (),
8229 Some(ComplexBaseTypeContentDeserializerState::AttributeGroup(
8230 _,
8231 Some(deserializer),
8232 )) => {
8233 let data = deserializer.finish(reader)?;
8234 ComplexBaseTypeContentDeserializer::store_attribute_group(&mut values, data)?;
8235 }
8236 Some(_) => unreachable!(),
8237 }
8238 Ok(match artifact {
8239 DeserializerArtifact::None => unreachable!(),
8240 DeserializerArtifact::Data(data) => {
8241 ComplexBaseTypeContentDeserializer::store_attribute_group(&mut values, data)?;
8242 let data = ComplexBaseTypeContentDeserializer::finish_state(
8243 reader,
8244 ComplexBaseTypeContentDeserializerState::AttributeGroup(values, None),
8245 )?;
8246 *self.state = ComplexBaseTypeContentDeserializerState::Done__(data);
8247 ElementHandlerOutput::Break { event, allow_any }
8248 }
8249 DeserializerArtifact::Deserializer(deserializer) => {
8250 *self.state = ComplexBaseTypeContentDeserializerState::AttributeGroup(
8251 values,
8252 Some(deserializer),
8253 );
8254 ElementHandlerOutput::from_event_end(event, allow_any)
8255 }
8256 })
8257 }
8258 fn handle_any_attribute<'de, R>(
8259 &mut self,
8260 reader: &R,
8261 mut values: Option<super::AnyAttribute>,
8262 output: DeserializerOutput<'de, super::AnyAttribute>,
8263 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
8264 ) -> Result<ElementHandlerOutput<'de>, Error>
8265 where
8266 R: DeserializeReader,
8267 {
8268 let DeserializerOutput {
8269 artifact,
8270 event,
8271 allow_any,
8272 } = output;
8273 if artifact.is_none() {
8274 *self.state = match fallback.take() {
8275 None => ComplexBaseTypeContentDeserializerState::Init__,
8276 Some(ComplexBaseTypeContentDeserializerState::AnyAttribute(
8277 _,
8278 Some(deserializer),
8279 )) => ComplexBaseTypeContentDeserializerState::AnyAttribute(
8280 values,
8281 Some(deserializer),
8282 ),
8283 _ => unreachable!(),
8284 };
8285 return Ok(ElementHandlerOutput::break_(event, allow_any));
8286 }
8287 match fallback.take() {
8288 None => (),
8289 Some(ComplexBaseTypeContentDeserializerState::AnyAttribute(
8290 _,
8291 Some(deserializer),
8292 )) => {
8293 let data = deserializer.finish(reader)?;
8294 ComplexBaseTypeContentDeserializer::store_any_attribute(&mut values, data)?;
8295 }
8296 Some(_) => unreachable!(),
8297 }
8298 Ok(match artifact {
8299 DeserializerArtifact::None => unreachable!(),
8300 DeserializerArtifact::Data(data) => {
8301 ComplexBaseTypeContentDeserializer::store_any_attribute(&mut values, data)?;
8302 let data = ComplexBaseTypeContentDeserializer::finish_state(
8303 reader,
8304 ComplexBaseTypeContentDeserializerState::AnyAttribute(values, None),
8305 )?;
8306 *self.state = ComplexBaseTypeContentDeserializerState::Done__(data);
8307 ElementHandlerOutput::Break { event, allow_any }
8308 }
8309 DeserializerArtifact::Deserializer(deserializer) => {
8310 *self.state = ComplexBaseTypeContentDeserializerState::AnyAttribute(
8311 values,
8312 Some(deserializer),
8313 );
8314 ElementHandlerOutput::from_event_end(event, allow_any)
8315 }
8316 })
8317 }
8318 fn handle_assert<'de, R>(
8319 &mut self,
8320 reader: &R,
8321 mut values: Option<super::AssertionType>,
8322 output: DeserializerOutput<'de, super::AssertionType>,
8323 fallback: &mut Option<ComplexBaseTypeContentDeserializerState>,
8324 ) -> Result<ElementHandlerOutput<'de>, Error>
8325 where
8326 R: DeserializeReader,
8327 {
8328 let DeserializerOutput {
8329 artifact,
8330 event,
8331 allow_any,
8332 } = output;
8333 if artifact.is_none() {
8334 *self.state = match fallback.take() {
8335 None => ComplexBaseTypeContentDeserializerState::Init__,
8336 Some(ComplexBaseTypeContentDeserializerState::Assert(
8337 _,
8338 Some(deserializer),
8339 )) => {
8340 ComplexBaseTypeContentDeserializerState::Assert(values, Some(deserializer))
8341 }
8342 _ => unreachable!(),
8343 };
8344 return Ok(ElementHandlerOutput::break_(event, allow_any));
8345 }
8346 match fallback.take() {
8347 None => (),
8348 Some(ComplexBaseTypeContentDeserializerState::Assert(_, Some(deserializer))) => {
8349 let data = deserializer.finish(reader)?;
8350 ComplexBaseTypeContentDeserializer::store_assert(&mut values, data)?;
8351 }
8352 Some(_) => unreachable!(),
8353 }
8354 Ok(match artifact {
8355 DeserializerArtifact::None => unreachable!(),
8356 DeserializerArtifact::Data(data) => {
8357 ComplexBaseTypeContentDeserializer::store_assert(&mut values, data)?;
8358 let data = ComplexBaseTypeContentDeserializer::finish_state(
8359 reader,
8360 ComplexBaseTypeContentDeserializerState::Assert(values, None),
8361 )?;
8362 *self.state = ComplexBaseTypeContentDeserializerState::Done__(data);
8363 ElementHandlerOutput::Break { event, allow_any }
8364 }
8365 DeserializerArtifact::Deserializer(deserializer) => {
8366 *self.state =
8367 ComplexBaseTypeContentDeserializerState::Assert(values, Some(deserializer));
8368 ElementHandlerOutput::from_event_end(event, allow_any)
8369 }
8370 })
8371 }
8372 }
8373 impl<'de> Deserializer<'de, super::ComplexBaseTypeContent>
8374 for Box<ComplexBaseTypeContentDeserializer>
8375 {
8376 fn init<R>(
8377 reader: &R,
8378 event: Event<'de>,
8379 ) -> DeserializerResult<'de, super::ComplexBaseTypeContent>
8380 where
8381 R: DeserializeReader,
8382 {
8383 let deserializer = Box::new(ComplexBaseTypeContentDeserializer {
8384 state: Box::new(ComplexBaseTypeContentDeserializerState::Init__),
8385 });
8386 let mut output = deserializer.next(reader, event)?;
8387 output.artifact = match output.artifact {
8388 DeserializerArtifact::Deserializer(x)
8389 if matches!(&*x.state, ComplexBaseTypeContentDeserializerState::Init__) =>
8390 {
8391 DeserializerArtifact::None
8392 }
8393 artifact => artifact,
8394 };
8395 Ok(output)
8396 }
8397 fn next<R>(
8398 mut self,
8399 reader: &R,
8400 event: Event<'de>,
8401 ) -> DeserializerResult<'de, super::ComplexBaseTypeContent>
8402 where
8403 R: DeserializeReader,
8404 {
8405 use ComplexBaseTypeContentDeserializerState as S;
8406 let mut event = event;
8407 let mut fallback = None;
8408 let (event, allow_any) = loop {
8409 let state = replace(&mut *self.state, S::Unknown__);
8410 event = match (state, event) {
8411 (S::Annotation(values, Some(deserializer)), event) => {
8412 let output = deserializer.next(reader, event)?;
8413 match self.handle_annotation(reader, values, output, &mut fallback)? {
8414 ElementHandlerOutput::Break { event, allow_any } => {
8415 break (event, allow_any)
8416 }
8417 ElementHandlerOutput::Continue { event, .. } => event,
8418 }
8419 }
8420 (S::SimpleContent(values, Some(deserializer)), event) => {
8421 let output = deserializer.next(reader, event)?;
8422 match self.handle_simple_content(reader, values, output, &mut fallback)? {
8423 ElementHandlerOutput::Break { event, allow_any } => {
8424 break (event, allow_any)
8425 }
8426 ElementHandlerOutput::Continue { event, .. } => event,
8427 }
8428 }
8429 (S::ComplexContent(values, Some(deserializer)), event) => {
8430 let output = deserializer.next(reader, event)?;
8431 match self.handle_complex_content(reader, values, output, &mut fallback)? {
8432 ElementHandlerOutput::Break { event, allow_any } => {
8433 break (event, allow_any)
8434 }
8435 ElementHandlerOutput::Continue { event, .. } => event,
8436 }
8437 }
8438 (S::OpenContent(values, Some(deserializer)), event) => {
8439 let output = deserializer.next(reader, event)?;
8440 match self.handle_open_content(reader, values, output, &mut fallback)? {
8441 ElementHandlerOutput::Break { event, allow_any } => {
8442 break (event, allow_any)
8443 }
8444 ElementHandlerOutput::Continue { event, .. } => event,
8445 }
8446 }
8447 (S::Group(values, Some(deserializer)), event) => {
8448 let output = deserializer.next(reader, event)?;
8449 match self.handle_group(reader, values, output, &mut fallback)? {
8450 ElementHandlerOutput::Break { event, allow_any } => {
8451 break (event, allow_any)
8452 }
8453 ElementHandlerOutput::Continue { event, .. } => event,
8454 }
8455 }
8456 (S::All(values, Some(deserializer)), event) => {
8457 let output = deserializer.next(reader, event)?;
8458 match self.handle_all(reader, values, output, &mut fallback)? {
8459 ElementHandlerOutput::Break { event, allow_any } => {
8460 break (event, allow_any)
8461 }
8462 ElementHandlerOutput::Continue { event, .. } => event,
8463 }
8464 }
8465 (S::Choice(values, Some(deserializer)), event) => {
8466 let output = deserializer.next(reader, event)?;
8467 match self.handle_choice(reader, values, output, &mut fallback)? {
8468 ElementHandlerOutput::Break { event, allow_any } => {
8469 break (event, allow_any)
8470 }
8471 ElementHandlerOutput::Continue { event, .. } => event,
8472 }
8473 }
8474 (S::Sequence(values, Some(deserializer)), event) => {
8475 let output = deserializer.next(reader, event)?;
8476 match self.handle_sequence(reader, values, output, &mut fallback)? {
8477 ElementHandlerOutput::Break { event, allow_any } => {
8478 break (event, allow_any)
8479 }
8480 ElementHandlerOutput::Continue { event, .. } => event,
8481 }
8482 }
8483 (S::Attribute(values, Some(deserializer)), event) => {
8484 let output = deserializer.next(reader, event)?;
8485 match self.handle_attribute(reader, values, output, &mut fallback)? {
8486 ElementHandlerOutput::Break { event, allow_any } => {
8487 break (event, allow_any)
8488 }
8489 ElementHandlerOutput::Continue { event, .. } => event,
8490 }
8491 }
8492 (S::AttributeGroup(values, Some(deserializer)), event) => {
8493 let output = deserializer.next(reader, event)?;
8494 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
8495 ElementHandlerOutput::Break { event, allow_any } => {
8496 break (event, allow_any)
8497 }
8498 ElementHandlerOutput::Continue { event, .. } => event,
8499 }
8500 }
8501 (S::AnyAttribute(values, Some(deserializer)), event) => {
8502 let output = deserializer.next(reader, event)?;
8503 match self.handle_any_attribute(reader, values, output, &mut fallback)? {
8504 ElementHandlerOutput::Break { event, allow_any } => {
8505 break (event, allow_any)
8506 }
8507 ElementHandlerOutput::Continue { event, .. } => event,
8508 }
8509 }
8510 (S::Assert(values, Some(deserializer)), event) => {
8511 let output = deserializer.next(reader, event)?;
8512 match self.handle_assert(reader, values, output, &mut fallback)? {
8513 ElementHandlerOutput::Break { event, allow_any } => {
8514 break (event, allow_any)
8515 }
8516 ElementHandlerOutput::Continue { event, .. } => event,
8517 }
8518 }
8519 (state, event @ Event::End(_)) => {
8520 return Ok(DeserializerOutput {
8521 artifact: DeserializerArtifact::Data(
8522 ComplexBaseTypeContentDeserializer::finish_state(reader, state)?,
8523 ),
8524 event: DeserializerEvent::Continue(event),
8525 allow_any: false,
8526 });
8527 }
8528 (S::Init__, event) => match self.find_suitable(reader, event, &mut fallback)? {
8529 ElementHandlerOutput::Break { event, allow_any } => {
8530 break (event, allow_any)
8531 }
8532 ElementHandlerOutput::Continue { event, .. } => event,
8533 },
8534 (S::Annotation(values, None), event) => {
8535 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
8536 reader, event,
8537 )?;
8538 match self.handle_annotation(reader, values, output, &mut fallback)? {
8539 ElementHandlerOutput::Break { event, allow_any } => {
8540 break (event, allow_any)
8541 }
8542 ElementHandlerOutput::Continue { event, .. } => event,
8543 }
8544 }
8545 (S::SimpleContent(values, None), event) => {
8546 let output =
8547 <super::SimpleContent as WithDeserializer>::Deserializer::init(
8548 reader, event,
8549 )?;
8550 match self.handle_simple_content(reader, values, output, &mut fallback)? {
8551 ElementHandlerOutput::Break { event, allow_any } => {
8552 break (event, allow_any)
8553 }
8554 ElementHandlerOutput::Continue { event, .. } => event,
8555 }
8556 }
8557 (S::ComplexContent(values, None), event) => {
8558 let output =
8559 <super::ComplexContent as WithDeserializer>::Deserializer::init(
8560 reader, event,
8561 )?;
8562 match self.handle_complex_content(reader, values, output, &mut fallback)? {
8563 ElementHandlerOutput::Break { event, allow_any } => {
8564 break (event, allow_any)
8565 }
8566 ElementHandlerOutput::Continue { event, .. } => event,
8567 }
8568 }
8569 (S::OpenContent(values, None), event) => {
8570 let output = <super::OpenContent as WithDeserializer>::Deserializer::init(
8571 reader, event,
8572 )?;
8573 match self.handle_open_content(reader, values, output, &mut fallback)? {
8574 ElementHandlerOutput::Break { event, allow_any } => {
8575 break (event, allow_any)
8576 }
8577 ElementHandlerOutput::Continue { event, .. } => event,
8578 }
8579 }
8580 (S::Group(values, None), event) => {
8581 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
8582 reader, event,
8583 )?;
8584 match self.handle_group(reader, values, output, &mut fallback)? {
8585 ElementHandlerOutput::Break { event, allow_any } => {
8586 break (event, allow_any)
8587 }
8588 ElementHandlerOutput::Continue { event, .. } => event,
8589 }
8590 }
8591 (S::All(values, None), event) => {
8592 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
8593 reader, event,
8594 )?;
8595 match self.handle_all(reader, values, output, &mut fallback)? {
8596 ElementHandlerOutput::Break { event, allow_any } => {
8597 break (event, allow_any)
8598 }
8599 ElementHandlerOutput::Continue { event, .. } => event,
8600 }
8601 }
8602 (S::Choice(values, None), event) => {
8603 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
8604 reader, event,
8605 )?;
8606 match self.handle_choice(reader, values, output, &mut fallback)? {
8607 ElementHandlerOutput::Break { event, allow_any } => {
8608 break (event, allow_any)
8609 }
8610 ElementHandlerOutput::Continue { event, .. } => event,
8611 }
8612 }
8613 (S::Sequence(values, None), event) => {
8614 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
8615 reader, event,
8616 )?;
8617 match self.handle_sequence(reader, values, output, &mut fallback)? {
8618 ElementHandlerOutput::Break { event, allow_any } => {
8619 break (event, allow_any)
8620 }
8621 ElementHandlerOutput::Continue { event, .. } => event,
8622 }
8623 }
8624 (S::Attribute(values, None), event) => {
8625 let output =
8626 <super::AttributeType as WithDeserializer>::Deserializer::init(
8627 reader, event,
8628 )?;
8629 match self.handle_attribute(reader, values, output, &mut fallback)? {
8630 ElementHandlerOutput::Break { event, allow_any } => {
8631 break (event, allow_any)
8632 }
8633 ElementHandlerOutput::Continue { event, .. } => event,
8634 }
8635 }
8636 (S::AttributeGroup(values, None), event) => {
8637 let output =
8638 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
8639 reader, event,
8640 )?;
8641 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
8642 ElementHandlerOutput::Break { event, allow_any } => {
8643 break (event, allow_any)
8644 }
8645 ElementHandlerOutput::Continue { event, .. } => event,
8646 }
8647 }
8648 (S::AnyAttribute(values, None), event) => {
8649 let output = <super::AnyAttribute as WithDeserializer>::Deserializer::init(
8650 reader, event,
8651 )?;
8652 match self.handle_any_attribute(reader, 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::Assert(values, None), event) => {
8660 let output =
8661 <super::AssertionType as WithDeserializer>::Deserializer::init(
8662 reader, event,
8663 )?;
8664 match self.handle_assert(reader, values, output, &mut fallback)? {
8665 ElementHandlerOutput::Break { event, allow_any } => {
8666 break (event, allow_any)
8667 }
8668 ElementHandlerOutput::Continue { event, .. } => event,
8669 }
8670 }
8671 (s @ S::Done__(_), event) => {
8672 *self.state = s;
8673 break (DeserializerEvent::Continue(event), false);
8674 }
8675 (S::Unknown__, _) => unreachable!(),
8676 }
8677 };
8678 let artifact = if matches!(&*self.state, S::Done__(_)) {
8679 DeserializerArtifact::Data(self.finish(reader)?)
8680 } else {
8681 DeserializerArtifact::Deserializer(self)
8682 };
8683 Ok(DeserializerOutput {
8684 artifact,
8685 event,
8686 allow_any,
8687 })
8688 }
8689 fn finish<R>(self, reader: &R) -> Result<super::ComplexBaseTypeContent, Error>
8690 where
8691 R: DeserializeReader,
8692 {
8693 ComplexBaseTypeContentDeserializer::finish_state(reader, *self.state)
8694 }
8695 }
8696 #[derive(Debug)]
8697 pub struct GroupTypeDeserializer {
8698 id: Option<String>,
8699 name: Option<String>,
8700 ref_: Option<super::QName>,
8701 min_occurs: usize,
8702 max_occurs: super::MaxOccurs,
8703 content: Vec<super::GroupTypeContent>,
8704 state: Box<GroupTypeDeserializerState>,
8705 }
8706 #[derive(Debug)]
8707 enum GroupTypeDeserializerState {
8708 Init__,
8709 Next__,
8710 Content__(<super::GroupTypeContent as WithDeserializer>::Deserializer),
8711 Unknown__,
8712 }
8713 impl GroupTypeDeserializer {
8714 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
8715 where
8716 R: DeserializeReader,
8717 {
8718 let mut id: Option<String> = None;
8719 let mut name: Option<String> = None;
8720 let mut ref_: Option<super::QName> = None;
8721 let mut min_occurs: Option<usize> = None;
8722 let mut max_occurs: Option<super::MaxOccurs> = None;
8723 for attrib in filter_xmlns_attributes(bytes_start) {
8724 let attrib = attrib?;
8725 if matches!(
8726 reader.resolve_local_name(attrib.key, &super::NS_XS),
8727 Some(b"id")
8728 ) {
8729 reader.read_attrib(&mut id, b"id", &attrib.value)?;
8730 } else if matches!(
8731 reader.resolve_local_name(attrib.key, &super::NS_XS),
8732 Some(b"name")
8733 ) {
8734 reader.read_attrib(&mut name, b"name", &attrib.value)?;
8735 } else if matches!(
8736 reader.resolve_local_name(attrib.key, &super::NS_XS),
8737 Some(b"ref")
8738 ) {
8739 reader.read_attrib(&mut ref_, b"ref", &attrib.value)?;
8740 } else if matches!(
8741 reader.resolve_local_name(attrib.key, &super::NS_XS),
8742 Some(b"minOccurs")
8743 ) {
8744 reader.read_attrib(&mut min_occurs, b"minOccurs", &attrib.value)?;
8745 } else if matches!(
8746 reader.resolve_local_name(attrib.key, &super::NS_XS),
8747 Some(b"maxOccurs")
8748 ) {
8749 reader.read_attrib(&mut max_occurs, b"maxOccurs", &attrib.value)?;
8750 }
8751 }
8752 Ok(Box::new(Self {
8753 id: id,
8754 name: name,
8755 ref_: ref_,
8756 min_occurs: min_occurs.unwrap_or_else(super::GroupType::default_min_occurs),
8757 max_occurs: max_occurs.unwrap_or_else(super::GroupType::default_max_occurs),
8758 content: Vec::new(),
8759 state: Box::new(GroupTypeDeserializerState::Init__),
8760 }))
8761 }
8762 fn finish_state<R>(
8763 &mut self,
8764 reader: &R,
8765 state: GroupTypeDeserializerState,
8766 ) -> Result<(), Error>
8767 where
8768 R: DeserializeReader,
8769 {
8770 if let GroupTypeDeserializerState::Content__(deserializer) = state {
8771 self.store_content(deserializer.finish(reader)?)?;
8772 }
8773 Ok(())
8774 }
8775 fn store_content(&mut self, value: super::GroupTypeContent) -> Result<(), Error> {
8776 self.content.push(value);
8777 Ok(())
8778 }
8779 fn handle_content<'de, R>(
8780 &mut self,
8781 reader: &R,
8782 output: DeserializerOutput<'de, super::GroupTypeContent>,
8783 fallback: &mut Option<GroupTypeDeserializerState>,
8784 ) -> Result<ElementHandlerOutput<'de>, Error>
8785 where
8786 R: DeserializeReader,
8787 {
8788 let DeserializerOutput {
8789 artifact,
8790 event,
8791 allow_any,
8792 } = output;
8793 if artifact.is_none() {
8794 *self.state = fallback
8795 .take()
8796 .unwrap_or(GroupTypeDeserializerState::Next__);
8797 return Ok(ElementHandlerOutput::break_(event, allow_any));
8798 }
8799 if let Some(fallback) = fallback.take() {
8800 self.finish_state(reader, fallback)?;
8801 }
8802 Ok(match artifact {
8803 DeserializerArtifact::None => unreachable!(),
8804 DeserializerArtifact::Data(data) => {
8805 self.store_content(data)?;
8806 *self.state = GroupTypeDeserializerState::Next__;
8807 ElementHandlerOutput::from_event(event, allow_any)
8808 }
8809 DeserializerArtifact::Deserializer(deserializer) => {
8810 let ret = ElementHandlerOutput::from_event(event, allow_any);
8811 match &ret {
8812 ElementHandlerOutput::Break { .. } => {
8813 *self.state = GroupTypeDeserializerState::Content__(deserializer);
8814 }
8815 ElementHandlerOutput::Continue { .. } => {
8816 fallback
8817 .get_or_insert(GroupTypeDeserializerState::Content__(deserializer));
8818 *self.state = GroupTypeDeserializerState::Next__;
8819 }
8820 }
8821 ret
8822 }
8823 })
8824 }
8825 }
8826 impl<'de> Deserializer<'de, super::GroupType> for Box<GroupTypeDeserializer> {
8827 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::GroupType>
8828 where
8829 R: DeserializeReader,
8830 {
8831 reader
8832 .init_deserializer_from_start_event(event, GroupTypeDeserializer::from_bytes_start)
8833 }
8834 fn next<R>(
8835 mut self,
8836 reader: &R,
8837 event: Event<'de>,
8838 ) -> DeserializerResult<'de, super::GroupType>
8839 where
8840 R: DeserializeReader,
8841 {
8842 use GroupTypeDeserializerState as S;
8843 let mut event = event;
8844 let mut fallback = None;
8845 let (event, allow_any) = loop {
8846 let state = replace(&mut *self.state, S::Unknown__);
8847 event = match (state, event) {
8848 (S::Content__(deserializer), event) => {
8849 let output = deserializer.next(reader, event)?;
8850 match self.handle_content(reader, output, &mut fallback)? {
8851 ElementHandlerOutput::Break { event, allow_any } => {
8852 break (event, allow_any)
8853 }
8854 ElementHandlerOutput::Continue { event, .. } => event,
8855 }
8856 }
8857 (_, Event::End(_)) => {
8858 return Ok(DeserializerOutput {
8859 artifact: DeserializerArtifact::Data(self.finish(reader)?),
8860 event: DeserializerEvent::None,
8861 allow_any: false,
8862 });
8863 }
8864 (state @ (S::Init__ | S::Next__), event) => {
8865 fallback.get_or_insert(state);
8866 let output =
8867 <super::GroupTypeContent as WithDeserializer>::Deserializer::init(
8868 reader, event,
8869 )?;
8870 match self.handle_content(reader, output, &mut fallback)? {
8871 ElementHandlerOutput::Break { event, allow_any } => {
8872 break (event, allow_any)
8873 }
8874 ElementHandlerOutput::Continue { event, .. } => event,
8875 }
8876 }
8877 (S::Unknown__, _) => unreachable!(),
8878 }
8879 };
8880 let artifact = DeserializerArtifact::Deserializer(self);
8881 Ok(DeserializerOutput {
8882 artifact,
8883 event,
8884 allow_any,
8885 })
8886 }
8887 fn finish<R>(mut self, reader: &R) -> Result<super::GroupType, Error>
8888 where
8889 R: DeserializeReader,
8890 {
8891 let state = replace(&mut *self.state, GroupTypeDeserializerState::Unknown__);
8892 self.finish_state(reader, state)?;
8893 Ok(super::GroupType {
8894 id: self.id,
8895 name: self.name,
8896 ref_: self.ref_,
8897 min_occurs: self.min_occurs,
8898 max_occurs: self.max_occurs,
8899 content: self.content,
8900 })
8901 }
8902 }
8903 #[derive(Debug)]
8904 pub struct GroupTypeContentDeserializer {
8905 state: Box<GroupTypeContentDeserializerState>,
8906 }
8907 #[derive(Debug)]
8908 pub enum GroupTypeContentDeserializerState {
8909 Init__,
8910 Annotation(
8911 Option<super::Annotation>,
8912 Option<<super::Annotation as WithDeserializer>::Deserializer>,
8913 ),
8914 Element(
8915 Option<super::ElementType>,
8916 Option<<super::ElementType as WithDeserializer>::Deserializer>,
8917 ),
8918 Group(
8919 Option<super::GroupType>,
8920 Option<<super::GroupType as WithDeserializer>::Deserializer>,
8921 ),
8922 All(
8923 Option<super::GroupType>,
8924 Option<<super::GroupType as WithDeserializer>::Deserializer>,
8925 ),
8926 Choice(
8927 Option<super::GroupType>,
8928 Option<<super::GroupType as WithDeserializer>::Deserializer>,
8929 ),
8930 Sequence(
8931 Option<super::GroupType>,
8932 Option<<super::GroupType as WithDeserializer>::Deserializer>,
8933 ),
8934 Any(
8935 Option<super::Any>,
8936 Option<<super::Any as WithDeserializer>::Deserializer>,
8937 ),
8938 Done__(super::GroupTypeContent),
8939 Unknown__,
8940 }
8941 impl GroupTypeContentDeserializer {
8942 fn find_suitable<'de, R>(
8943 &mut self,
8944 reader: &R,
8945 event: Event<'de>,
8946 fallback: &mut Option<GroupTypeContentDeserializerState>,
8947 ) -> Result<ElementHandlerOutput<'de>, Error>
8948 where
8949 R: DeserializeReader,
8950 {
8951 let (Event::Start(x) | Event::Empty(x)) = &event else {
8952 *self.state = fallback
8953 .take()
8954 .unwrap_or(GroupTypeContentDeserializerState::Init__);
8955 return Ok(ElementHandlerOutput::return_to_parent(event, false));
8956 };
8957 if matches!(
8958 reader.resolve_local_name(x.name(), &super::NS_XS),
8959 Some(b"annotation")
8960 ) {
8961 let output =
8962 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
8963 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
8964 }
8965 if matches!(
8966 reader.resolve_local_name(x.name(), &super::NS_XS),
8967 Some(b"element")
8968 ) {
8969 let output =
8970 <super::ElementType as WithDeserializer>::Deserializer::init(reader, event)?;
8971 return self.handle_element(reader, Default::default(), output, &mut *fallback);
8972 }
8973 if matches!(
8974 reader.resolve_local_name(x.name(), &super::NS_XS),
8975 Some(b"group")
8976 ) {
8977 let output =
8978 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
8979 return self.handle_group(reader, Default::default(), output, &mut *fallback);
8980 }
8981 if matches!(
8982 reader.resolve_local_name(x.name(), &super::NS_XS),
8983 Some(b"all")
8984 ) {
8985 let output =
8986 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
8987 return self.handle_all(reader, Default::default(), output, &mut *fallback);
8988 }
8989 if matches!(
8990 reader.resolve_local_name(x.name(), &super::NS_XS),
8991 Some(b"choice")
8992 ) {
8993 let output =
8994 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
8995 return self.handle_choice(reader, Default::default(), output, &mut *fallback);
8996 }
8997 if matches!(
8998 reader.resolve_local_name(x.name(), &super::NS_XS),
8999 Some(b"sequence")
9000 ) {
9001 let output =
9002 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
9003 return self.handle_sequence(reader, Default::default(), output, &mut *fallback);
9004 }
9005 if matches!(
9006 reader.resolve_local_name(x.name(), &super::NS_XS),
9007 Some(b"any")
9008 ) {
9009 let output = <super::Any as WithDeserializer>::Deserializer::init(reader, event)?;
9010 return self.handle_any(reader, Default::default(), output, &mut *fallback);
9011 }
9012 *self.state = fallback
9013 .take()
9014 .unwrap_or(GroupTypeContentDeserializerState::Init__);
9015 Ok(ElementHandlerOutput::return_to_parent(event, false))
9016 }
9017 fn finish_state<R>(
9018 reader: &R,
9019 state: GroupTypeContentDeserializerState,
9020 ) -> Result<super::GroupTypeContent, Error>
9021 where
9022 R: DeserializeReader,
9023 {
9024 use GroupTypeContentDeserializerState as S;
9025 match state {
9026 S::Init__ => Err(ErrorKind::MissingContent.into()),
9027 S::Annotation(mut values, deserializer) => {
9028 if let Some(deserializer) = deserializer {
9029 let value = deserializer.finish(reader)?;
9030 GroupTypeContentDeserializer::store_annotation(&mut values, value)?;
9031 }
9032 Ok(super::GroupTypeContent::Annotation(values.ok_or_else(
9033 || ErrorKind::MissingElement("annotation".into()),
9034 )?))
9035 }
9036 S::Element(mut values, deserializer) => {
9037 if let Some(deserializer) = deserializer {
9038 let value = deserializer.finish(reader)?;
9039 GroupTypeContentDeserializer::store_element(&mut values, value)?;
9040 }
9041 Ok(super::GroupTypeContent::Element(values.ok_or_else(
9042 || ErrorKind::MissingElement("element".into()),
9043 )?))
9044 }
9045 S::Group(mut values, deserializer) => {
9046 if let Some(deserializer) = deserializer {
9047 let value = deserializer.finish(reader)?;
9048 GroupTypeContentDeserializer::store_group(&mut values, value)?;
9049 }
9050 Ok(super::GroupTypeContent::Group(values.ok_or_else(|| {
9051 ErrorKind::MissingElement("group".into())
9052 })?))
9053 }
9054 S::All(mut values, deserializer) => {
9055 if let Some(deserializer) = deserializer {
9056 let value = deserializer.finish(reader)?;
9057 GroupTypeContentDeserializer::store_all(&mut values, value)?;
9058 }
9059 Ok(super::GroupTypeContent::All(
9060 values.ok_or_else(|| ErrorKind::MissingElement("all".into()))?,
9061 ))
9062 }
9063 S::Choice(mut values, deserializer) => {
9064 if let Some(deserializer) = deserializer {
9065 let value = deserializer.finish(reader)?;
9066 GroupTypeContentDeserializer::store_choice(&mut values, value)?;
9067 }
9068 Ok(super::GroupTypeContent::Choice(values.ok_or_else(
9069 || ErrorKind::MissingElement("choice".into()),
9070 )?))
9071 }
9072 S::Sequence(mut values, deserializer) => {
9073 if let Some(deserializer) = deserializer {
9074 let value = deserializer.finish(reader)?;
9075 GroupTypeContentDeserializer::store_sequence(&mut values, value)?;
9076 }
9077 Ok(super::GroupTypeContent::Sequence(values.ok_or_else(
9078 || ErrorKind::MissingElement("sequence".into()),
9079 )?))
9080 }
9081 S::Any(mut values, deserializer) => {
9082 if let Some(deserializer) = deserializer {
9083 let value = deserializer.finish(reader)?;
9084 GroupTypeContentDeserializer::store_any(&mut values, value)?;
9085 }
9086 Ok(super::GroupTypeContent::Any(
9087 values.ok_or_else(|| ErrorKind::MissingElement("any".into()))?,
9088 ))
9089 }
9090 S::Done__(data) => Ok(data),
9091 S::Unknown__ => unreachable!(),
9092 }
9093 }
9094 fn store_annotation(
9095 values: &mut Option<super::Annotation>,
9096 value: super::Annotation,
9097 ) -> Result<(), Error> {
9098 if values.is_some() {
9099 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
9100 b"annotation",
9101 )))?;
9102 }
9103 *values = Some(value);
9104 Ok(())
9105 }
9106 fn store_element(
9107 values: &mut Option<super::ElementType>,
9108 value: super::ElementType,
9109 ) -> Result<(), Error> {
9110 if values.is_some() {
9111 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
9112 b"element",
9113 )))?;
9114 }
9115 *values = Some(value);
9116 Ok(())
9117 }
9118 fn store_group(
9119 values: &mut Option<super::GroupType>,
9120 value: super::GroupType,
9121 ) -> Result<(), Error> {
9122 if values.is_some() {
9123 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
9124 b"group",
9125 )))?;
9126 }
9127 *values = Some(value);
9128 Ok(())
9129 }
9130 fn store_all(
9131 values: &mut Option<super::GroupType>,
9132 value: super::GroupType,
9133 ) -> Result<(), Error> {
9134 if values.is_some() {
9135 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"all")))?;
9136 }
9137 *values = Some(value);
9138 Ok(())
9139 }
9140 fn store_choice(
9141 values: &mut Option<super::GroupType>,
9142 value: super::GroupType,
9143 ) -> Result<(), Error> {
9144 if values.is_some() {
9145 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
9146 b"choice",
9147 )))?;
9148 }
9149 *values = Some(value);
9150 Ok(())
9151 }
9152 fn store_sequence(
9153 values: &mut Option<super::GroupType>,
9154 value: super::GroupType,
9155 ) -> Result<(), Error> {
9156 if values.is_some() {
9157 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
9158 b"sequence",
9159 )))?;
9160 }
9161 *values = Some(value);
9162 Ok(())
9163 }
9164 fn store_any(values: &mut Option<super::Any>, value: super::Any) -> Result<(), Error> {
9165 if values.is_some() {
9166 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"any")))?;
9167 }
9168 *values = Some(value);
9169 Ok(())
9170 }
9171 fn handle_annotation<'de, R>(
9172 &mut self,
9173 reader: &R,
9174 mut values: Option<super::Annotation>,
9175 output: DeserializerOutput<'de, super::Annotation>,
9176 fallback: &mut Option<GroupTypeContentDeserializerState>,
9177 ) -> Result<ElementHandlerOutput<'de>, Error>
9178 where
9179 R: DeserializeReader,
9180 {
9181 let DeserializerOutput {
9182 artifact,
9183 event,
9184 allow_any,
9185 } = output;
9186 if artifact.is_none() {
9187 *self.state = match fallback.take() {
9188 None => GroupTypeContentDeserializerState::Init__,
9189 Some(GroupTypeContentDeserializerState::Annotation(_, Some(deserializer))) => {
9190 GroupTypeContentDeserializerState::Annotation(values, Some(deserializer))
9191 }
9192 _ => unreachable!(),
9193 };
9194 return Ok(ElementHandlerOutput::break_(event, allow_any));
9195 }
9196 match fallback.take() {
9197 None => (),
9198 Some(GroupTypeContentDeserializerState::Annotation(_, Some(deserializer))) => {
9199 let data = deserializer.finish(reader)?;
9200 GroupTypeContentDeserializer::store_annotation(&mut values, data)?;
9201 }
9202 Some(_) => unreachable!(),
9203 }
9204 Ok(match artifact {
9205 DeserializerArtifact::None => unreachable!(),
9206 DeserializerArtifact::Data(data) => {
9207 GroupTypeContentDeserializer::store_annotation(&mut values, data)?;
9208 let data = GroupTypeContentDeserializer::finish_state(
9209 reader,
9210 GroupTypeContentDeserializerState::Annotation(values, None),
9211 )?;
9212 *self.state = GroupTypeContentDeserializerState::Done__(data);
9213 ElementHandlerOutput::Break { event, allow_any }
9214 }
9215 DeserializerArtifact::Deserializer(deserializer) => {
9216 *self.state =
9217 GroupTypeContentDeserializerState::Annotation(values, Some(deserializer));
9218 ElementHandlerOutput::from_event_end(event, allow_any)
9219 }
9220 })
9221 }
9222 fn handle_element<'de, R>(
9223 &mut self,
9224 reader: &R,
9225 mut values: Option<super::ElementType>,
9226 output: DeserializerOutput<'de, super::ElementType>,
9227 fallback: &mut Option<GroupTypeContentDeserializerState>,
9228 ) -> Result<ElementHandlerOutput<'de>, Error>
9229 where
9230 R: DeserializeReader,
9231 {
9232 let DeserializerOutput {
9233 artifact,
9234 event,
9235 allow_any,
9236 } = output;
9237 if artifact.is_none() {
9238 *self.state = match fallback.take() {
9239 None => GroupTypeContentDeserializerState::Init__,
9240 Some(GroupTypeContentDeserializerState::Element(_, Some(deserializer))) => {
9241 GroupTypeContentDeserializerState::Element(values, Some(deserializer))
9242 }
9243 _ => unreachable!(),
9244 };
9245 return Ok(ElementHandlerOutput::break_(event, allow_any));
9246 }
9247 match fallback.take() {
9248 None => (),
9249 Some(GroupTypeContentDeserializerState::Element(_, Some(deserializer))) => {
9250 let data = deserializer.finish(reader)?;
9251 GroupTypeContentDeserializer::store_element(&mut values, data)?;
9252 }
9253 Some(_) => unreachable!(),
9254 }
9255 Ok(match artifact {
9256 DeserializerArtifact::None => unreachable!(),
9257 DeserializerArtifact::Data(data) => {
9258 GroupTypeContentDeserializer::store_element(&mut values, data)?;
9259 let data = GroupTypeContentDeserializer::finish_state(
9260 reader,
9261 GroupTypeContentDeserializerState::Element(values, None),
9262 )?;
9263 *self.state = GroupTypeContentDeserializerState::Done__(data);
9264 ElementHandlerOutput::Break { event, allow_any }
9265 }
9266 DeserializerArtifact::Deserializer(deserializer) => {
9267 *self.state =
9268 GroupTypeContentDeserializerState::Element(values, Some(deserializer));
9269 ElementHandlerOutput::from_event_end(event, allow_any)
9270 }
9271 })
9272 }
9273 fn handle_group<'de, R>(
9274 &mut self,
9275 reader: &R,
9276 mut values: Option<super::GroupType>,
9277 output: DeserializerOutput<'de, super::GroupType>,
9278 fallback: &mut Option<GroupTypeContentDeserializerState>,
9279 ) -> Result<ElementHandlerOutput<'de>, Error>
9280 where
9281 R: DeserializeReader,
9282 {
9283 let DeserializerOutput {
9284 artifact,
9285 event,
9286 allow_any,
9287 } = output;
9288 if artifact.is_none() {
9289 *self.state = match fallback.take() {
9290 None => GroupTypeContentDeserializerState::Init__,
9291 Some(GroupTypeContentDeserializerState::Group(_, Some(deserializer))) => {
9292 GroupTypeContentDeserializerState::Group(values, Some(deserializer))
9293 }
9294 _ => unreachable!(),
9295 };
9296 return Ok(ElementHandlerOutput::break_(event, allow_any));
9297 }
9298 match fallback.take() {
9299 None => (),
9300 Some(GroupTypeContentDeserializerState::Group(_, Some(deserializer))) => {
9301 let data = deserializer.finish(reader)?;
9302 GroupTypeContentDeserializer::store_group(&mut values, data)?;
9303 }
9304 Some(_) => unreachable!(),
9305 }
9306 Ok(match artifact {
9307 DeserializerArtifact::None => unreachable!(),
9308 DeserializerArtifact::Data(data) => {
9309 GroupTypeContentDeserializer::store_group(&mut values, data)?;
9310 let data = GroupTypeContentDeserializer::finish_state(
9311 reader,
9312 GroupTypeContentDeserializerState::Group(values, None),
9313 )?;
9314 *self.state = GroupTypeContentDeserializerState::Done__(data);
9315 ElementHandlerOutput::Break { event, allow_any }
9316 }
9317 DeserializerArtifact::Deserializer(deserializer) => {
9318 *self.state =
9319 GroupTypeContentDeserializerState::Group(values, Some(deserializer));
9320 ElementHandlerOutput::from_event_end(event, allow_any)
9321 }
9322 })
9323 }
9324 fn handle_all<'de, R>(
9325 &mut self,
9326 reader: &R,
9327 mut values: Option<super::GroupType>,
9328 output: DeserializerOutput<'de, super::GroupType>,
9329 fallback: &mut Option<GroupTypeContentDeserializerState>,
9330 ) -> Result<ElementHandlerOutput<'de>, Error>
9331 where
9332 R: DeserializeReader,
9333 {
9334 let DeserializerOutput {
9335 artifact,
9336 event,
9337 allow_any,
9338 } = output;
9339 if artifact.is_none() {
9340 *self.state = match fallback.take() {
9341 None => GroupTypeContentDeserializerState::Init__,
9342 Some(GroupTypeContentDeserializerState::All(_, Some(deserializer))) => {
9343 GroupTypeContentDeserializerState::All(values, Some(deserializer))
9344 }
9345 _ => unreachable!(),
9346 };
9347 return Ok(ElementHandlerOutput::break_(event, allow_any));
9348 }
9349 match fallback.take() {
9350 None => (),
9351 Some(GroupTypeContentDeserializerState::All(_, Some(deserializer))) => {
9352 let data = deserializer.finish(reader)?;
9353 GroupTypeContentDeserializer::store_all(&mut values, data)?;
9354 }
9355 Some(_) => unreachable!(),
9356 }
9357 Ok(match artifact {
9358 DeserializerArtifact::None => unreachable!(),
9359 DeserializerArtifact::Data(data) => {
9360 GroupTypeContentDeserializer::store_all(&mut values, data)?;
9361 let data = GroupTypeContentDeserializer::finish_state(
9362 reader,
9363 GroupTypeContentDeserializerState::All(values, None),
9364 )?;
9365 *self.state = GroupTypeContentDeserializerState::Done__(data);
9366 ElementHandlerOutput::Break { event, allow_any }
9367 }
9368 DeserializerArtifact::Deserializer(deserializer) => {
9369 *self.state =
9370 GroupTypeContentDeserializerState::All(values, Some(deserializer));
9371 ElementHandlerOutput::from_event_end(event, allow_any)
9372 }
9373 })
9374 }
9375 fn handle_choice<'de, R>(
9376 &mut self,
9377 reader: &R,
9378 mut values: Option<super::GroupType>,
9379 output: DeserializerOutput<'de, super::GroupType>,
9380 fallback: &mut Option<GroupTypeContentDeserializerState>,
9381 ) -> Result<ElementHandlerOutput<'de>, Error>
9382 where
9383 R: DeserializeReader,
9384 {
9385 let DeserializerOutput {
9386 artifact,
9387 event,
9388 allow_any,
9389 } = output;
9390 if artifact.is_none() {
9391 *self.state = match fallback.take() {
9392 None => GroupTypeContentDeserializerState::Init__,
9393 Some(GroupTypeContentDeserializerState::Choice(_, Some(deserializer))) => {
9394 GroupTypeContentDeserializerState::Choice(values, Some(deserializer))
9395 }
9396 _ => unreachable!(),
9397 };
9398 return Ok(ElementHandlerOutput::break_(event, allow_any));
9399 }
9400 match fallback.take() {
9401 None => (),
9402 Some(GroupTypeContentDeserializerState::Choice(_, Some(deserializer))) => {
9403 let data = deserializer.finish(reader)?;
9404 GroupTypeContentDeserializer::store_choice(&mut values, data)?;
9405 }
9406 Some(_) => unreachable!(),
9407 }
9408 Ok(match artifact {
9409 DeserializerArtifact::None => unreachable!(),
9410 DeserializerArtifact::Data(data) => {
9411 GroupTypeContentDeserializer::store_choice(&mut values, data)?;
9412 let data = GroupTypeContentDeserializer::finish_state(
9413 reader,
9414 GroupTypeContentDeserializerState::Choice(values, None),
9415 )?;
9416 *self.state = GroupTypeContentDeserializerState::Done__(data);
9417 ElementHandlerOutput::Break { event, allow_any }
9418 }
9419 DeserializerArtifact::Deserializer(deserializer) => {
9420 *self.state =
9421 GroupTypeContentDeserializerState::Choice(values, Some(deserializer));
9422 ElementHandlerOutput::from_event_end(event, allow_any)
9423 }
9424 })
9425 }
9426 fn handle_sequence<'de, R>(
9427 &mut self,
9428 reader: &R,
9429 mut values: Option<super::GroupType>,
9430 output: DeserializerOutput<'de, super::GroupType>,
9431 fallback: &mut Option<GroupTypeContentDeserializerState>,
9432 ) -> Result<ElementHandlerOutput<'de>, Error>
9433 where
9434 R: DeserializeReader,
9435 {
9436 let DeserializerOutput {
9437 artifact,
9438 event,
9439 allow_any,
9440 } = output;
9441 if artifact.is_none() {
9442 *self.state = match fallback.take() {
9443 None => GroupTypeContentDeserializerState::Init__,
9444 Some(GroupTypeContentDeserializerState::Sequence(_, Some(deserializer))) => {
9445 GroupTypeContentDeserializerState::Sequence(values, Some(deserializer))
9446 }
9447 _ => unreachable!(),
9448 };
9449 return Ok(ElementHandlerOutput::break_(event, allow_any));
9450 }
9451 match fallback.take() {
9452 None => (),
9453 Some(GroupTypeContentDeserializerState::Sequence(_, Some(deserializer))) => {
9454 let data = deserializer.finish(reader)?;
9455 GroupTypeContentDeserializer::store_sequence(&mut values, data)?;
9456 }
9457 Some(_) => unreachable!(),
9458 }
9459 Ok(match artifact {
9460 DeserializerArtifact::None => unreachable!(),
9461 DeserializerArtifact::Data(data) => {
9462 GroupTypeContentDeserializer::store_sequence(&mut values, data)?;
9463 let data = GroupTypeContentDeserializer::finish_state(
9464 reader,
9465 GroupTypeContentDeserializerState::Sequence(values, None),
9466 )?;
9467 *self.state = GroupTypeContentDeserializerState::Done__(data);
9468 ElementHandlerOutput::Break { event, allow_any }
9469 }
9470 DeserializerArtifact::Deserializer(deserializer) => {
9471 *self.state =
9472 GroupTypeContentDeserializerState::Sequence(values, Some(deserializer));
9473 ElementHandlerOutput::from_event_end(event, allow_any)
9474 }
9475 })
9476 }
9477 fn handle_any<'de, R>(
9478 &mut self,
9479 reader: &R,
9480 mut values: Option<super::Any>,
9481 output: DeserializerOutput<'de, super::Any>,
9482 fallback: &mut Option<GroupTypeContentDeserializerState>,
9483 ) -> Result<ElementHandlerOutput<'de>, Error>
9484 where
9485 R: DeserializeReader,
9486 {
9487 let DeserializerOutput {
9488 artifact,
9489 event,
9490 allow_any,
9491 } = output;
9492 if artifact.is_none() {
9493 *self.state = match fallback.take() {
9494 None => GroupTypeContentDeserializerState::Init__,
9495 Some(GroupTypeContentDeserializerState::Any(_, Some(deserializer))) => {
9496 GroupTypeContentDeserializerState::Any(values, Some(deserializer))
9497 }
9498 _ => unreachable!(),
9499 };
9500 return Ok(ElementHandlerOutput::break_(event, allow_any));
9501 }
9502 match fallback.take() {
9503 None => (),
9504 Some(GroupTypeContentDeserializerState::Any(_, Some(deserializer))) => {
9505 let data = deserializer.finish(reader)?;
9506 GroupTypeContentDeserializer::store_any(&mut values, data)?;
9507 }
9508 Some(_) => unreachable!(),
9509 }
9510 Ok(match artifact {
9511 DeserializerArtifact::None => unreachable!(),
9512 DeserializerArtifact::Data(data) => {
9513 GroupTypeContentDeserializer::store_any(&mut values, data)?;
9514 let data = GroupTypeContentDeserializer::finish_state(
9515 reader,
9516 GroupTypeContentDeserializerState::Any(values, None),
9517 )?;
9518 *self.state = GroupTypeContentDeserializerState::Done__(data);
9519 ElementHandlerOutput::Break { event, allow_any }
9520 }
9521 DeserializerArtifact::Deserializer(deserializer) => {
9522 *self.state =
9523 GroupTypeContentDeserializerState::Any(values, Some(deserializer));
9524 ElementHandlerOutput::from_event_end(event, allow_any)
9525 }
9526 })
9527 }
9528 }
9529 impl<'de> Deserializer<'de, super::GroupTypeContent> for Box<GroupTypeContentDeserializer> {
9530 fn init<R>(
9531 reader: &R,
9532 event: Event<'de>,
9533 ) -> DeserializerResult<'de, super::GroupTypeContent>
9534 where
9535 R: DeserializeReader,
9536 {
9537 let deserializer = Box::new(GroupTypeContentDeserializer {
9538 state: Box::new(GroupTypeContentDeserializerState::Init__),
9539 });
9540 let mut output = deserializer.next(reader, event)?;
9541 output.artifact = match output.artifact {
9542 DeserializerArtifact::Deserializer(x)
9543 if matches!(&*x.state, GroupTypeContentDeserializerState::Init__) =>
9544 {
9545 DeserializerArtifact::None
9546 }
9547 artifact => artifact,
9548 };
9549 Ok(output)
9550 }
9551 fn next<R>(
9552 mut self,
9553 reader: &R,
9554 event: Event<'de>,
9555 ) -> DeserializerResult<'de, super::GroupTypeContent>
9556 where
9557 R: DeserializeReader,
9558 {
9559 use GroupTypeContentDeserializerState as S;
9560 let mut event = event;
9561 let mut fallback = None;
9562 let (event, allow_any) = loop {
9563 let state = replace(&mut *self.state, S::Unknown__);
9564 event = match (state, event) {
9565 (S::Annotation(values, Some(deserializer)), event) => {
9566 let output = deserializer.next(reader, event)?;
9567 match self.handle_annotation(reader, values, output, &mut fallback)? {
9568 ElementHandlerOutput::Break { event, allow_any } => {
9569 break (event, allow_any)
9570 }
9571 ElementHandlerOutput::Continue { event, .. } => event,
9572 }
9573 }
9574 (S::Element(values, Some(deserializer)), event) => {
9575 let output = deserializer.next(reader, event)?;
9576 match self.handle_element(reader, values, output, &mut fallback)? {
9577 ElementHandlerOutput::Break { event, allow_any } => {
9578 break (event, allow_any)
9579 }
9580 ElementHandlerOutput::Continue { event, .. } => event,
9581 }
9582 }
9583 (S::Group(values, Some(deserializer)), event) => {
9584 let output = deserializer.next(reader, event)?;
9585 match self.handle_group(reader, values, output, &mut fallback)? {
9586 ElementHandlerOutput::Break { event, allow_any } => {
9587 break (event, allow_any)
9588 }
9589 ElementHandlerOutput::Continue { event, .. } => event,
9590 }
9591 }
9592 (S::All(values, Some(deserializer)), event) => {
9593 let output = deserializer.next(reader, event)?;
9594 match self.handle_all(reader, values, output, &mut fallback)? {
9595 ElementHandlerOutput::Break { event, allow_any } => {
9596 break (event, allow_any)
9597 }
9598 ElementHandlerOutput::Continue { event, .. } => event,
9599 }
9600 }
9601 (S::Choice(values, Some(deserializer)), event) => {
9602 let output = deserializer.next(reader, event)?;
9603 match self.handle_choice(reader, values, output, &mut fallback)? {
9604 ElementHandlerOutput::Break { event, allow_any } => {
9605 break (event, allow_any)
9606 }
9607 ElementHandlerOutput::Continue { event, .. } => event,
9608 }
9609 }
9610 (S::Sequence(values, Some(deserializer)), event) => {
9611 let output = deserializer.next(reader, event)?;
9612 match self.handle_sequence(reader, values, output, &mut fallback)? {
9613 ElementHandlerOutput::Break { event, allow_any } => {
9614 break (event, allow_any)
9615 }
9616 ElementHandlerOutput::Continue { event, .. } => event,
9617 }
9618 }
9619 (S::Any(values, Some(deserializer)), event) => {
9620 let output = deserializer.next(reader, event)?;
9621 match self.handle_any(reader, values, output, &mut fallback)? {
9622 ElementHandlerOutput::Break { event, allow_any } => {
9623 break (event, allow_any)
9624 }
9625 ElementHandlerOutput::Continue { event, .. } => event,
9626 }
9627 }
9628 (state, event @ Event::End(_)) => {
9629 return Ok(DeserializerOutput {
9630 artifact: DeserializerArtifact::Data(
9631 GroupTypeContentDeserializer::finish_state(reader, state)?,
9632 ),
9633 event: DeserializerEvent::Continue(event),
9634 allow_any: false,
9635 });
9636 }
9637 (S::Init__, event) => match self.find_suitable(reader, event, &mut fallback)? {
9638 ElementHandlerOutput::Break { event, allow_any } => {
9639 break (event, allow_any)
9640 }
9641 ElementHandlerOutput::Continue { event, .. } => event,
9642 },
9643 (S::Annotation(values, None), event) => {
9644 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
9645 reader, event,
9646 )?;
9647 match self.handle_annotation(reader, values, output, &mut fallback)? {
9648 ElementHandlerOutput::Break { event, allow_any } => {
9649 break (event, allow_any)
9650 }
9651 ElementHandlerOutput::Continue { event, .. } => event,
9652 }
9653 }
9654 (S::Element(values, None), event) => {
9655 let output = <super::ElementType as WithDeserializer>::Deserializer::init(
9656 reader, event,
9657 )?;
9658 match self.handle_element(reader, values, output, &mut fallback)? {
9659 ElementHandlerOutput::Break { event, allow_any } => {
9660 break (event, allow_any)
9661 }
9662 ElementHandlerOutput::Continue { event, .. } => event,
9663 }
9664 }
9665 (S::Group(values, None), event) => {
9666 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
9667 reader, event,
9668 )?;
9669 match self.handle_group(reader, values, output, &mut fallback)? {
9670 ElementHandlerOutput::Break { event, allow_any } => {
9671 break (event, allow_any)
9672 }
9673 ElementHandlerOutput::Continue { event, .. } => event,
9674 }
9675 }
9676 (S::All(values, None), event) => {
9677 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
9678 reader, event,
9679 )?;
9680 match self.handle_all(reader, values, output, &mut fallback)? {
9681 ElementHandlerOutput::Break { event, allow_any } => {
9682 break (event, allow_any)
9683 }
9684 ElementHandlerOutput::Continue { event, .. } => event,
9685 }
9686 }
9687 (S::Choice(values, None), event) => {
9688 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
9689 reader, event,
9690 )?;
9691 match self.handle_choice(reader, values, output, &mut fallback)? {
9692 ElementHandlerOutput::Break { event, allow_any } => {
9693 break (event, allow_any)
9694 }
9695 ElementHandlerOutput::Continue { event, .. } => event,
9696 }
9697 }
9698 (S::Sequence(values, None), event) => {
9699 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
9700 reader, event,
9701 )?;
9702 match self.handle_sequence(reader, values, output, &mut fallback)? {
9703 ElementHandlerOutput::Break { event, allow_any } => {
9704 break (event, allow_any)
9705 }
9706 ElementHandlerOutput::Continue { event, .. } => event,
9707 }
9708 }
9709 (S::Any(values, None), event) => {
9710 let output =
9711 <super::Any as WithDeserializer>::Deserializer::init(reader, event)?;
9712 match self.handle_any(reader, values, output, &mut fallback)? {
9713 ElementHandlerOutput::Break { event, allow_any } => {
9714 break (event, allow_any)
9715 }
9716 ElementHandlerOutput::Continue { event, .. } => event,
9717 }
9718 }
9719 (s @ S::Done__(_), event) => {
9720 *self.state = s;
9721 break (DeserializerEvent::Continue(event), false);
9722 }
9723 (S::Unknown__, _) => unreachable!(),
9724 }
9725 };
9726 let artifact = if matches!(&*self.state, S::Done__(_)) {
9727 DeserializerArtifact::Data(self.finish(reader)?)
9728 } else {
9729 DeserializerArtifact::Deserializer(self)
9730 };
9731 Ok(DeserializerOutput {
9732 artifact,
9733 event,
9734 allow_any,
9735 })
9736 }
9737 fn finish<R>(self, reader: &R) -> Result<super::GroupTypeContent, Error>
9738 where
9739 R: DeserializeReader,
9740 {
9741 GroupTypeContentDeserializer::finish_state(reader, *self.state)
9742 }
9743 }
9744 #[derive(Debug)]
9745 pub struct AttributeGroupTypeDeserializer {
9746 id: Option<String>,
9747 name: Option<String>,
9748 ref_: Option<super::QName>,
9749 content: Vec<super::AttributeGroupTypeContent>,
9750 state: Box<AttributeGroupTypeDeserializerState>,
9751 }
9752 #[derive(Debug)]
9753 enum AttributeGroupTypeDeserializerState {
9754 Init__,
9755 Next__,
9756 Content__(<super::AttributeGroupTypeContent as WithDeserializer>::Deserializer),
9757 Unknown__,
9758 }
9759 impl AttributeGroupTypeDeserializer {
9760 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
9761 where
9762 R: DeserializeReader,
9763 {
9764 let mut id: Option<String> = None;
9765 let mut name: Option<String> = None;
9766 let mut ref_: Option<super::QName> = None;
9767 for attrib in filter_xmlns_attributes(bytes_start) {
9768 let attrib = attrib?;
9769 if matches!(
9770 reader.resolve_local_name(attrib.key, &super::NS_XS),
9771 Some(b"id")
9772 ) {
9773 reader.read_attrib(&mut id, b"id", &attrib.value)?;
9774 } else if matches!(
9775 reader.resolve_local_name(attrib.key, &super::NS_XS),
9776 Some(b"name")
9777 ) {
9778 reader.read_attrib(&mut name, b"name", &attrib.value)?;
9779 } else if matches!(
9780 reader.resolve_local_name(attrib.key, &super::NS_XS),
9781 Some(b"ref")
9782 ) {
9783 reader.read_attrib(&mut ref_, b"ref", &attrib.value)?;
9784 }
9785 }
9786 Ok(Box::new(Self {
9787 id: id,
9788 name: name,
9789 ref_: ref_,
9790 content: Vec::new(),
9791 state: Box::new(AttributeGroupTypeDeserializerState::Init__),
9792 }))
9793 }
9794 fn finish_state<R>(
9795 &mut self,
9796 reader: &R,
9797 state: AttributeGroupTypeDeserializerState,
9798 ) -> Result<(), Error>
9799 where
9800 R: DeserializeReader,
9801 {
9802 if let AttributeGroupTypeDeserializerState::Content__(deserializer) = state {
9803 self.store_content(deserializer.finish(reader)?)?;
9804 }
9805 Ok(())
9806 }
9807 fn store_content(&mut self, value: super::AttributeGroupTypeContent) -> Result<(), Error> {
9808 self.content.push(value);
9809 Ok(())
9810 }
9811 fn handle_content<'de, R>(
9812 &mut self,
9813 reader: &R,
9814 output: DeserializerOutput<'de, super::AttributeGroupTypeContent>,
9815 fallback: &mut Option<AttributeGroupTypeDeserializerState>,
9816 ) -> Result<ElementHandlerOutput<'de>, Error>
9817 where
9818 R: DeserializeReader,
9819 {
9820 let DeserializerOutput {
9821 artifact,
9822 event,
9823 allow_any,
9824 } = output;
9825 if artifact.is_none() {
9826 *self.state = fallback
9827 .take()
9828 .unwrap_or(AttributeGroupTypeDeserializerState::Next__);
9829 return Ok(ElementHandlerOutput::break_(event, allow_any));
9830 }
9831 if let Some(fallback) = fallback.take() {
9832 self.finish_state(reader, fallback)?;
9833 }
9834 Ok(match artifact {
9835 DeserializerArtifact::None => unreachable!(),
9836 DeserializerArtifact::Data(data) => {
9837 self.store_content(data)?;
9838 *self.state = AttributeGroupTypeDeserializerState::Next__;
9839 ElementHandlerOutput::from_event(event, allow_any)
9840 }
9841 DeserializerArtifact::Deserializer(deserializer) => {
9842 let ret = ElementHandlerOutput::from_event(event, allow_any);
9843 match &ret {
9844 ElementHandlerOutput::Break { .. } => {
9845 *self.state =
9846 AttributeGroupTypeDeserializerState::Content__(deserializer);
9847 }
9848 ElementHandlerOutput::Continue { .. } => {
9849 fallback.get_or_insert(AttributeGroupTypeDeserializerState::Content__(
9850 deserializer,
9851 ));
9852 *self.state = AttributeGroupTypeDeserializerState::Next__;
9853 }
9854 }
9855 ret
9856 }
9857 })
9858 }
9859 }
9860 impl<'de> Deserializer<'de, super::AttributeGroupType> for Box<AttributeGroupTypeDeserializer> {
9861 fn init<R>(
9862 reader: &R,
9863 event: Event<'de>,
9864 ) -> DeserializerResult<'de, super::AttributeGroupType>
9865 where
9866 R: DeserializeReader,
9867 {
9868 reader.init_deserializer_from_start_event(
9869 event,
9870 AttributeGroupTypeDeserializer::from_bytes_start,
9871 )
9872 }
9873 fn next<R>(
9874 mut self,
9875 reader: &R,
9876 event: Event<'de>,
9877 ) -> DeserializerResult<'de, super::AttributeGroupType>
9878 where
9879 R: DeserializeReader,
9880 {
9881 use AttributeGroupTypeDeserializerState as S;
9882 let mut event = event;
9883 let mut fallback = None;
9884 let (event, allow_any) = loop {
9885 let state = replace(&mut *self.state, S::Unknown__);
9886 event = match (state, event) {
9887 (S::Content__(deserializer), event) => {
9888 let output = deserializer.next(reader, event)?;
9889 match self.handle_content(reader, output, &mut fallback)? {
9890 ElementHandlerOutput::Break { event, allow_any } => {
9891 break (event, allow_any)
9892 }
9893 ElementHandlerOutput::Continue { event, .. } => event,
9894 }
9895 }
9896 (_, Event::End(_)) => {
9897 return Ok(DeserializerOutput {
9898 artifact: DeserializerArtifact::Data(self.finish(reader)?),
9899 event: DeserializerEvent::None,
9900 allow_any: false,
9901 });
9902 }
9903 (state @ (S::Init__ | S::Next__), event) => {
9904 fallback.get_or_insert(state);
9905 let output = < super :: AttributeGroupTypeContent as WithDeserializer > :: Deserializer :: init (reader , event) ? ;
9906 match self.handle_content(reader, output, &mut fallback)? {
9907 ElementHandlerOutput::Break { event, allow_any } => {
9908 break (event, allow_any)
9909 }
9910 ElementHandlerOutput::Continue { event, .. } => event,
9911 }
9912 }
9913 (S::Unknown__, _) => unreachable!(),
9914 }
9915 };
9916 let artifact = DeserializerArtifact::Deserializer(self);
9917 Ok(DeserializerOutput {
9918 artifact,
9919 event,
9920 allow_any,
9921 })
9922 }
9923 fn finish<R>(mut self, reader: &R) -> Result<super::AttributeGroupType, Error>
9924 where
9925 R: DeserializeReader,
9926 {
9927 let state = replace(
9928 &mut *self.state,
9929 AttributeGroupTypeDeserializerState::Unknown__,
9930 );
9931 self.finish_state(reader, state)?;
9932 Ok(super::AttributeGroupType {
9933 id: self.id,
9934 name: self.name,
9935 ref_: self.ref_,
9936 content: self.content,
9937 })
9938 }
9939 }
9940 #[derive(Debug)]
9941 pub struct AttributeGroupTypeContentDeserializer {
9942 state: Box<AttributeGroupTypeContentDeserializerState>,
9943 }
9944 #[derive(Debug)]
9945 pub enum AttributeGroupTypeContentDeserializerState {
9946 Init__,
9947 Annotation(
9948 Option<super::Annotation>,
9949 Option<<super::Annotation as WithDeserializer>::Deserializer>,
9950 ),
9951 Attribute(
9952 Option<super::AttributeType>,
9953 Option<<super::AttributeType as WithDeserializer>::Deserializer>,
9954 ),
9955 AttributeGroup(
9956 Option<super::AttributeGroupType>,
9957 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
9958 ),
9959 AnyAttribute(
9960 Option<super::AnyAttribute>,
9961 Option<<super::AnyAttribute as WithDeserializer>::Deserializer>,
9962 ),
9963 Done__(super::AttributeGroupTypeContent),
9964 Unknown__,
9965 }
9966 impl AttributeGroupTypeContentDeserializer {
9967 fn find_suitable<'de, R>(
9968 &mut self,
9969 reader: &R,
9970 event: Event<'de>,
9971 fallback: &mut Option<AttributeGroupTypeContentDeserializerState>,
9972 ) -> Result<ElementHandlerOutput<'de>, Error>
9973 where
9974 R: DeserializeReader,
9975 {
9976 let (Event::Start(x) | Event::Empty(x)) = &event else {
9977 *self.state = fallback
9978 .take()
9979 .unwrap_or(AttributeGroupTypeContentDeserializerState::Init__);
9980 return Ok(ElementHandlerOutput::return_to_parent(event, false));
9981 };
9982 if matches!(
9983 reader.resolve_local_name(x.name(), &super::NS_XS),
9984 Some(b"annotation")
9985 ) {
9986 let output =
9987 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
9988 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
9989 }
9990 if matches!(
9991 reader.resolve_local_name(x.name(), &super::NS_XS),
9992 Some(b"attribute")
9993 ) {
9994 let output =
9995 <super::AttributeType as WithDeserializer>::Deserializer::init(reader, event)?;
9996 return self.handle_attribute(reader, Default::default(), output, &mut *fallback);
9997 }
9998 if matches!(
9999 reader.resolve_local_name(x.name(), &super::NS_XS),
10000 Some(b"attributeGroup")
10001 ) {
10002 let output = <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
10003 reader, event,
10004 )?;
10005 return self.handle_attribute_group(
10006 reader,
10007 Default::default(),
10008 output,
10009 &mut *fallback,
10010 );
10011 }
10012 if matches!(
10013 reader.resolve_local_name(x.name(), &super::NS_XS),
10014 Some(b"anyAttribute")
10015 ) {
10016 let output =
10017 <super::AnyAttribute as WithDeserializer>::Deserializer::init(reader, event)?;
10018 return self.handle_any_attribute(
10019 reader,
10020 Default::default(),
10021 output,
10022 &mut *fallback,
10023 );
10024 }
10025 *self.state = fallback
10026 .take()
10027 .unwrap_or(AttributeGroupTypeContentDeserializerState::Init__);
10028 Ok(ElementHandlerOutput::return_to_parent(event, false))
10029 }
10030 fn finish_state<R>(
10031 reader: &R,
10032 state: AttributeGroupTypeContentDeserializerState,
10033 ) -> Result<super::AttributeGroupTypeContent, Error>
10034 where
10035 R: DeserializeReader,
10036 {
10037 use AttributeGroupTypeContentDeserializerState as S;
10038 match state {
10039 S::Init__ => Err(ErrorKind::MissingContent.into()),
10040 S::Annotation(mut values, deserializer) => {
10041 if let Some(deserializer) = deserializer {
10042 let value = deserializer.finish(reader)?;
10043 AttributeGroupTypeContentDeserializer::store_annotation(
10044 &mut values,
10045 value,
10046 )?;
10047 }
10048 Ok(super::AttributeGroupTypeContent::Annotation(
10049 values.ok_or_else(|| ErrorKind::MissingElement("annotation".into()))?,
10050 ))
10051 }
10052 S::Attribute(mut values, deserializer) => {
10053 if let Some(deserializer) = deserializer {
10054 let value = deserializer.finish(reader)?;
10055 AttributeGroupTypeContentDeserializer::store_attribute(&mut values, value)?;
10056 }
10057 Ok(super::AttributeGroupTypeContent::Attribute(
10058 values.ok_or_else(|| ErrorKind::MissingElement("attribute".into()))?,
10059 ))
10060 }
10061 S::AttributeGroup(mut values, deserializer) => {
10062 if let Some(deserializer) = deserializer {
10063 let value = deserializer.finish(reader)?;
10064 AttributeGroupTypeContentDeserializer::store_attribute_group(
10065 &mut values,
10066 value,
10067 )?;
10068 }
10069 Ok(super::AttributeGroupTypeContent::AttributeGroup(
10070 values.ok_or_else(|| ErrorKind::MissingElement("attributeGroup".into()))?,
10071 ))
10072 }
10073 S::AnyAttribute(mut values, deserializer) => {
10074 if let Some(deserializer) = deserializer {
10075 let value = deserializer.finish(reader)?;
10076 AttributeGroupTypeContentDeserializer::store_any_attribute(
10077 &mut values,
10078 value,
10079 )?;
10080 }
10081 Ok(super::AttributeGroupTypeContent::AnyAttribute(
10082 values.ok_or_else(|| ErrorKind::MissingElement("anyAttribute".into()))?,
10083 ))
10084 }
10085 S::Done__(data) => Ok(data),
10086 S::Unknown__ => unreachable!(),
10087 }
10088 }
10089 fn store_annotation(
10090 values: &mut Option<super::Annotation>,
10091 value: super::Annotation,
10092 ) -> Result<(), Error> {
10093 if values.is_some() {
10094 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
10095 b"annotation",
10096 )))?;
10097 }
10098 *values = Some(value);
10099 Ok(())
10100 }
10101 fn store_attribute(
10102 values: &mut Option<super::AttributeType>,
10103 value: super::AttributeType,
10104 ) -> Result<(), Error> {
10105 if values.is_some() {
10106 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
10107 b"attribute",
10108 )))?;
10109 }
10110 *values = Some(value);
10111 Ok(())
10112 }
10113 fn store_attribute_group(
10114 values: &mut Option<super::AttributeGroupType>,
10115 value: super::AttributeGroupType,
10116 ) -> Result<(), Error> {
10117 if values.is_some() {
10118 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
10119 b"attributeGroup",
10120 )))?;
10121 }
10122 *values = Some(value);
10123 Ok(())
10124 }
10125 fn store_any_attribute(
10126 values: &mut Option<super::AnyAttribute>,
10127 value: super::AnyAttribute,
10128 ) -> Result<(), Error> {
10129 if values.is_some() {
10130 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
10131 b"anyAttribute",
10132 )))?;
10133 }
10134 *values = Some(value);
10135 Ok(())
10136 }
10137 fn handle_annotation<'de, R>(
10138 &mut self,
10139 reader: &R,
10140 mut values: Option<super::Annotation>,
10141 output: DeserializerOutput<'de, super::Annotation>,
10142 fallback: &mut Option<AttributeGroupTypeContentDeserializerState>,
10143 ) -> Result<ElementHandlerOutput<'de>, Error>
10144 where
10145 R: DeserializeReader,
10146 {
10147 let DeserializerOutput {
10148 artifact,
10149 event,
10150 allow_any,
10151 } = output;
10152 if artifact.is_none() {
10153 *self.state = match fallback.take() {
10154 None => AttributeGroupTypeContentDeserializerState::Init__,
10155 Some(AttributeGroupTypeContentDeserializerState::Annotation(
10156 _,
10157 Some(deserializer),
10158 )) => AttributeGroupTypeContentDeserializerState::Annotation(
10159 values,
10160 Some(deserializer),
10161 ),
10162 _ => unreachable!(),
10163 };
10164 return Ok(ElementHandlerOutput::break_(event, allow_any));
10165 }
10166 match fallback.take() {
10167 None => (),
10168 Some(AttributeGroupTypeContentDeserializerState::Annotation(
10169 _,
10170 Some(deserializer),
10171 )) => {
10172 let data = deserializer.finish(reader)?;
10173 AttributeGroupTypeContentDeserializer::store_annotation(&mut values, data)?;
10174 }
10175 Some(_) => unreachable!(),
10176 }
10177 Ok(match artifact {
10178 DeserializerArtifact::None => unreachable!(),
10179 DeserializerArtifact::Data(data) => {
10180 AttributeGroupTypeContentDeserializer::store_annotation(&mut values, data)?;
10181 let data = AttributeGroupTypeContentDeserializer::finish_state(
10182 reader,
10183 AttributeGroupTypeContentDeserializerState::Annotation(values, None),
10184 )?;
10185 *self.state = AttributeGroupTypeContentDeserializerState::Done__(data);
10186 ElementHandlerOutput::Break { event, allow_any }
10187 }
10188 DeserializerArtifact::Deserializer(deserializer) => {
10189 *self.state = AttributeGroupTypeContentDeserializerState::Annotation(
10190 values,
10191 Some(deserializer),
10192 );
10193 ElementHandlerOutput::from_event_end(event, allow_any)
10194 }
10195 })
10196 }
10197 fn handle_attribute<'de, R>(
10198 &mut self,
10199 reader: &R,
10200 mut values: Option<super::AttributeType>,
10201 output: DeserializerOutput<'de, super::AttributeType>,
10202 fallback: &mut Option<AttributeGroupTypeContentDeserializerState>,
10203 ) -> Result<ElementHandlerOutput<'de>, Error>
10204 where
10205 R: DeserializeReader,
10206 {
10207 let DeserializerOutput {
10208 artifact,
10209 event,
10210 allow_any,
10211 } = output;
10212 if artifact.is_none() {
10213 *self.state = match fallback.take() {
10214 None => AttributeGroupTypeContentDeserializerState::Init__,
10215 Some(AttributeGroupTypeContentDeserializerState::Attribute(
10216 _,
10217 Some(deserializer),
10218 )) => AttributeGroupTypeContentDeserializerState::Attribute(
10219 values,
10220 Some(deserializer),
10221 ),
10222 _ => unreachable!(),
10223 };
10224 return Ok(ElementHandlerOutput::break_(event, allow_any));
10225 }
10226 match fallback.take() {
10227 None => (),
10228 Some(AttributeGroupTypeContentDeserializerState::Attribute(
10229 _,
10230 Some(deserializer),
10231 )) => {
10232 let data = deserializer.finish(reader)?;
10233 AttributeGroupTypeContentDeserializer::store_attribute(&mut values, data)?;
10234 }
10235 Some(_) => unreachable!(),
10236 }
10237 Ok(match artifact {
10238 DeserializerArtifact::None => unreachable!(),
10239 DeserializerArtifact::Data(data) => {
10240 AttributeGroupTypeContentDeserializer::store_attribute(&mut values, data)?;
10241 let data = AttributeGroupTypeContentDeserializer::finish_state(
10242 reader,
10243 AttributeGroupTypeContentDeserializerState::Attribute(values, None),
10244 )?;
10245 *self.state = AttributeGroupTypeContentDeserializerState::Done__(data);
10246 ElementHandlerOutput::Break { event, allow_any }
10247 }
10248 DeserializerArtifact::Deserializer(deserializer) => {
10249 *self.state = AttributeGroupTypeContentDeserializerState::Attribute(
10250 values,
10251 Some(deserializer),
10252 );
10253 ElementHandlerOutput::from_event_end(event, allow_any)
10254 }
10255 })
10256 }
10257 fn handle_attribute_group<'de, R>(
10258 &mut self,
10259 reader: &R,
10260 mut values: Option<super::AttributeGroupType>,
10261 output: DeserializerOutput<'de, super::AttributeGroupType>,
10262 fallback: &mut Option<AttributeGroupTypeContentDeserializerState>,
10263 ) -> Result<ElementHandlerOutput<'de>, Error>
10264 where
10265 R: DeserializeReader,
10266 {
10267 let DeserializerOutput {
10268 artifact,
10269 event,
10270 allow_any,
10271 } = output;
10272 if artifact.is_none() {
10273 *self.state = match fallback.take() {
10274 None => AttributeGroupTypeContentDeserializerState::Init__,
10275 Some(AttributeGroupTypeContentDeserializerState::AttributeGroup(
10276 _,
10277 Some(deserializer),
10278 )) => AttributeGroupTypeContentDeserializerState::AttributeGroup(
10279 values,
10280 Some(deserializer),
10281 ),
10282 _ => unreachable!(),
10283 };
10284 return Ok(ElementHandlerOutput::break_(event, allow_any));
10285 }
10286 match fallback.take() {
10287 None => (),
10288 Some(AttributeGroupTypeContentDeserializerState::AttributeGroup(
10289 _,
10290 Some(deserializer),
10291 )) => {
10292 let data = deserializer.finish(reader)?;
10293 AttributeGroupTypeContentDeserializer::store_attribute_group(
10294 &mut values,
10295 data,
10296 )?;
10297 }
10298 Some(_) => unreachable!(),
10299 }
10300 Ok(match artifact {
10301 DeserializerArtifact::None => unreachable!(),
10302 DeserializerArtifact::Data(data) => {
10303 AttributeGroupTypeContentDeserializer::store_attribute_group(
10304 &mut values,
10305 data,
10306 )?;
10307 let data = AttributeGroupTypeContentDeserializer::finish_state(
10308 reader,
10309 AttributeGroupTypeContentDeserializerState::AttributeGroup(values, None),
10310 )?;
10311 *self.state = AttributeGroupTypeContentDeserializerState::Done__(data);
10312 ElementHandlerOutput::Break { event, allow_any }
10313 }
10314 DeserializerArtifact::Deserializer(deserializer) => {
10315 *self.state = AttributeGroupTypeContentDeserializerState::AttributeGroup(
10316 values,
10317 Some(deserializer),
10318 );
10319 ElementHandlerOutput::from_event_end(event, allow_any)
10320 }
10321 })
10322 }
10323 fn handle_any_attribute<'de, R>(
10324 &mut self,
10325 reader: &R,
10326 mut values: Option<super::AnyAttribute>,
10327 output: DeserializerOutput<'de, super::AnyAttribute>,
10328 fallback: &mut Option<AttributeGroupTypeContentDeserializerState>,
10329 ) -> Result<ElementHandlerOutput<'de>, Error>
10330 where
10331 R: DeserializeReader,
10332 {
10333 let DeserializerOutput {
10334 artifact,
10335 event,
10336 allow_any,
10337 } = output;
10338 if artifact.is_none() {
10339 *self.state = match fallback.take() {
10340 None => AttributeGroupTypeContentDeserializerState::Init__,
10341 Some(AttributeGroupTypeContentDeserializerState::AnyAttribute(
10342 _,
10343 Some(deserializer),
10344 )) => AttributeGroupTypeContentDeserializerState::AnyAttribute(
10345 values,
10346 Some(deserializer),
10347 ),
10348 _ => unreachable!(),
10349 };
10350 return Ok(ElementHandlerOutput::break_(event, allow_any));
10351 }
10352 match fallback.take() {
10353 None => (),
10354 Some(AttributeGroupTypeContentDeserializerState::AnyAttribute(
10355 _,
10356 Some(deserializer),
10357 )) => {
10358 let data = deserializer.finish(reader)?;
10359 AttributeGroupTypeContentDeserializer::store_any_attribute(&mut values, data)?;
10360 }
10361 Some(_) => unreachable!(),
10362 }
10363 Ok(match artifact {
10364 DeserializerArtifact::None => unreachable!(),
10365 DeserializerArtifact::Data(data) => {
10366 AttributeGroupTypeContentDeserializer::store_any_attribute(&mut values, data)?;
10367 let data = AttributeGroupTypeContentDeserializer::finish_state(
10368 reader,
10369 AttributeGroupTypeContentDeserializerState::AnyAttribute(values, None),
10370 )?;
10371 *self.state = AttributeGroupTypeContentDeserializerState::Done__(data);
10372 ElementHandlerOutput::Break { event, allow_any }
10373 }
10374 DeserializerArtifact::Deserializer(deserializer) => {
10375 *self.state = AttributeGroupTypeContentDeserializerState::AnyAttribute(
10376 values,
10377 Some(deserializer),
10378 );
10379 ElementHandlerOutput::from_event_end(event, allow_any)
10380 }
10381 })
10382 }
10383 }
10384 impl<'de> Deserializer<'de, super::AttributeGroupTypeContent>
10385 for Box<AttributeGroupTypeContentDeserializer>
10386 {
10387 fn init<R>(
10388 reader: &R,
10389 event: Event<'de>,
10390 ) -> DeserializerResult<'de, super::AttributeGroupTypeContent>
10391 where
10392 R: DeserializeReader,
10393 {
10394 let deserializer = Box::new(AttributeGroupTypeContentDeserializer {
10395 state: Box::new(AttributeGroupTypeContentDeserializerState::Init__),
10396 });
10397 let mut output = deserializer.next(reader, event)?;
10398 output.artifact = match output.artifact {
10399 DeserializerArtifact::Deserializer(x)
10400 if matches!(
10401 &*x.state,
10402 AttributeGroupTypeContentDeserializerState::Init__
10403 ) =>
10404 {
10405 DeserializerArtifact::None
10406 }
10407 artifact => artifact,
10408 };
10409 Ok(output)
10410 }
10411 fn next<R>(
10412 mut self,
10413 reader: &R,
10414 event: Event<'de>,
10415 ) -> DeserializerResult<'de, super::AttributeGroupTypeContent>
10416 where
10417 R: DeserializeReader,
10418 {
10419 use AttributeGroupTypeContentDeserializerState as S;
10420 let mut event = event;
10421 let mut fallback = None;
10422 let (event, allow_any) = loop {
10423 let state = replace(&mut *self.state, S::Unknown__);
10424 event = match (state, event) {
10425 (S::Annotation(values, Some(deserializer)), event) => {
10426 let output = deserializer.next(reader, event)?;
10427 match self.handle_annotation(reader, values, output, &mut fallback)? {
10428 ElementHandlerOutput::Break { event, allow_any } => {
10429 break (event, allow_any)
10430 }
10431 ElementHandlerOutput::Continue { event, .. } => event,
10432 }
10433 }
10434 (S::Attribute(values, Some(deserializer)), event) => {
10435 let output = deserializer.next(reader, event)?;
10436 match self.handle_attribute(reader, values, output, &mut fallback)? {
10437 ElementHandlerOutput::Break { event, allow_any } => {
10438 break (event, allow_any)
10439 }
10440 ElementHandlerOutput::Continue { event, .. } => event,
10441 }
10442 }
10443 (S::AttributeGroup(values, Some(deserializer)), event) => {
10444 let output = deserializer.next(reader, event)?;
10445 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
10446 ElementHandlerOutput::Break { event, allow_any } => {
10447 break (event, allow_any)
10448 }
10449 ElementHandlerOutput::Continue { event, .. } => event,
10450 }
10451 }
10452 (S::AnyAttribute(values, Some(deserializer)), event) => {
10453 let output = deserializer.next(reader, event)?;
10454 match self.handle_any_attribute(reader, values, output, &mut fallback)? {
10455 ElementHandlerOutput::Break { event, allow_any } => {
10456 break (event, allow_any)
10457 }
10458 ElementHandlerOutput::Continue { event, .. } => event,
10459 }
10460 }
10461 (state, event @ Event::End(_)) => {
10462 return Ok(DeserializerOutput {
10463 artifact: DeserializerArtifact::Data(
10464 AttributeGroupTypeContentDeserializer::finish_state(reader, state)?,
10465 ),
10466 event: DeserializerEvent::Continue(event),
10467 allow_any: false,
10468 });
10469 }
10470 (S::Init__, event) => match self.find_suitable(reader, event, &mut fallback)? {
10471 ElementHandlerOutput::Break { event, allow_any } => {
10472 break (event, allow_any)
10473 }
10474 ElementHandlerOutput::Continue { event, .. } => event,
10475 },
10476 (S::Annotation(values, None), event) => {
10477 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
10478 reader, event,
10479 )?;
10480 match self.handle_annotation(reader, values, output, &mut fallback)? {
10481 ElementHandlerOutput::Break { event, allow_any } => {
10482 break (event, allow_any)
10483 }
10484 ElementHandlerOutput::Continue { event, .. } => event,
10485 }
10486 }
10487 (S::Attribute(values, None), event) => {
10488 let output =
10489 <super::AttributeType as WithDeserializer>::Deserializer::init(
10490 reader, event,
10491 )?;
10492 match self.handle_attribute(reader, values, output, &mut fallback)? {
10493 ElementHandlerOutput::Break { event, allow_any } => {
10494 break (event, allow_any)
10495 }
10496 ElementHandlerOutput::Continue { event, .. } => event,
10497 }
10498 }
10499 (S::AttributeGroup(values, None), event) => {
10500 let output =
10501 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
10502 reader, event,
10503 )?;
10504 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
10505 ElementHandlerOutput::Break { event, allow_any } => {
10506 break (event, allow_any)
10507 }
10508 ElementHandlerOutput::Continue { event, .. } => event,
10509 }
10510 }
10511 (S::AnyAttribute(values, None), event) => {
10512 let output = <super::AnyAttribute as WithDeserializer>::Deserializer::init(
10513 reader, event,
10514 )?;
10515 match self.handle_any_attribute(reader, values, output, &mut fallback)? {
10516 ElementHandlerOutput::Break { event, allow_any } => {
10517 break (event, allow_any)
10518 }
10519 ElementHandlerOutput::Continue { event, .. } => event,
10520 }
10521 }
10522 (s @ S::Done__(_), event) => {
10523 *self.state = s;
10524 break (DeserializerEvent::Continue(event), false);
10525 }
10526 (S::Unknown__, _) => unreachable!(),
10527 }
10528 };
10529 let artifact = if matches!(&*self.state, S::Done__(_)) {
10530 DeserializerArtifact::Data(self.finish(reader)?)
10531 } else {
10532 DeserializerArtifact::Deserializer(self)
10533 };
10534 Ok(DeserializerOutput {
10535 artifact,
10536 event,
10537 allow_any,
10538 })
10539 }
10540 fn finish<R>(self, reader: &R) -> Result<super::AttributeGroupTypeContent, Error>
10541 where
10542 R: DeserializeReader,
10543 {
10544 AttributeGroupTypeContentDeserializer::finish_state(reader, *self.state)
10545 }
10546 }
10547 #[derive(Debug)]
10548 pub struct ElementTypeDeserializer {
10549 id: Option<String>,
10550 name: Option<String>,
10551 ref_: Option<super::QName>,
10552 type_: Option<super::QName>,
10553 substitution_group: Option<super::QNameList>,
10554 min_occurs: usize,
10555 max_occurs: super::MaxOccurs,
10556 default: Option<String>,
10557 fixed: Option<String>,
10558 nillable: Option<bool>,
10559 abstract_: bool,
10560 final_: Option<super::DerivationSetType>,
10561 block: Option<super::BlockSetType>,
10562 form: Option<super::FormChoiceType>,
10563 target_namespace: Option<String>,
10564 content: Vec<super::ElementTypeContent>,
10565 state: Box<ElementTypeDeserializerState>,
10566 }
10567 #[derive(Debug)]
10568 enum ElementTypeDeserializerState {
10569 Init__,
10570 Next__,
10571 Content__(<super::ElementTypeContent as WithDeserializer>::Deserializer),
10572 Unknown__,
10573 }
10574 impl ElementTypeDeserializer {
10575 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
10576 where
10577 R: DeserializeReader,
10578 {
10579 let mut id: Option<String> = None;
10580 let mut name: Option<String> = None;
10581 let mut ref_: Option<super::QName> = None;
10582 let mut type_: Option<super::QName> = None;
10583 let mut substitution_group: Option<super::QNameList> = None;
10584 let mut min_occurs: Option<usize> = None;
10585 let mut max_occurs: Option<super::MaxOccurs> = None;
10586 let mut default: Option<String> = None;
10587 let mut fixed: Option<String> = None;
10588 let mut nillable: Option<bool> = None;
10589 let mut abstract_: Option<bool> = None;
10590 let mut final_: Option<super::DerivationSetType> = None;
10591 let mut block: Option<super::BlockSetType> = None;
10592 let mut form: Option<super::FormChoiceType> = None;
10593 let mut target_namespace: Option<String> = None;
10594 for attrib in filter_xmlns_attributes(bytes_start) {
10595 let attrib = attrib?;
10596 if matches!(
10597 reader.resolve_local_name(attrib.key, &super::NS_XS),
10598 Some(b"id")
10599 ) {
10600 reader.read_attrib(&mut id, b"id", &attrib.value)?;
10601 } else if matches!(
10602 reader.resolve_local_name(attrib.key, &super::NS_XS),
10603 Some(b"name")
10604 ) {
10605 reader.read_attrib(&mut name, b"name", &attrib.value)?;
10606 } else if matches!(
10607 reader.resolve_local_name(attrib.key, &super::NS_XS),
10608 Some(b"ref")
10609 ) {
10610 reader.read_attrib(&mut ref_, b"ref", &attrib.value)?;
10611 } else if matches!(
10612 reader.resolve_local_name(attrib.key, &super::NS_XS),
10613 Some(b"type")
10614 ) {
10615 reader.read_attrib(&mut type_, b"type", &attrib.value)?;
10616 } else if matches!(
10617 reader.resolve_local_name(attrib.key, &super::NS_XS),
10618 Some(b"substitutionGroup")
10619 ) {
10620 reader.read_attrib(
10621 &mut substitution_group,
10622 b"substitutionGroup",
10623 &attrib.value,
10624 )?;
10625 } else if matches!(
10626 reader.resolve_local_name(attrib.key, &super::NS_XS),
10627 Some(b"minOccurs")
10628 ) {
10629 reader.read_attrib(&mut min_occurs, b"minOccurs", &attrib.value)?;
10630 } else if matches!(
10631 reader.resolve_local_name(attrib.key, &super::NS_XS),
10632 Some(b"maxOccurs")
10633 ) {
10634 reader.read_attrib(&mut max_occurs, b"maxOccurs", &attrib.value)?;
10635 } else if matches!(
10636 reader.resolve_local_name(attrib.key, &super::NS_XS),
10637 Some(b"default")
10638 ) {
10639 reader.read_attrib(&mut default, b"default", &attrib.value)?;
10640 } else if matches!(
10641 reader.resolve_local_name(attrib.key, &super::NS_XS),
10642 Some(b"fixed")
10643 ) {
10644 reader.read_attrib(&mut fixed, b"fixed", &attrib.value)?;
10645 } else if matches!(
10646 reader.resolve_local_name(attrib.key, &super::NS_XS),
10647 Some(b"nillable")
10648 ) {
10649 reader.read_attrib(&mut nillable, b"nillable", &attrib.value)?;
10650 } else if matches!(
10651 reader.resolve_local_name(attrib.key, &super::NS_XS),
10652 Some(b"abstract")
10653 ) {
10654 reader.read_attrib(&mut abstract_, b"abstract", &attrib.value)?;
10655 } else if matches!(
10656 reader.resolve_local_name(attrib.key, &super::NS_XS),
10657 Some(b"final")
10658 ) {
10659 reader.read_attrib(&mut final_, b"final", &attrib.value)?;
10660 } else if matches!(
10661 reader.resolve_local_name(attrib.key, &super::NS_XS),
10662 Some(b"block")
10663 ) {
10664 reader.read_attrib(&mut block, b"block", &attrib.value)?;
10665 } else if matches!(
10666 reader.resolve_local_name(attrib.key, &super::NS_XS),
10667 Some(b"form")
10668 ) {
10669 reader.read_attrib(&mut form, b"form", &attrib.value)?;
10670 } else if matches!(
10671 reader.resolve_local_name(attrib.key, &super::NS_XS),
10672 Some(b"targetNamespace")
10673 ) {
10674 reader.read_attrib(&mut target_namespace, b"targetNamespace", &attrib.value)?;
10675 }
10676 }
10677 Ok(Box::new(Self {
10678 id: id,
10679 name: name,
10680 ref_: ref_,
10681 type_: type_,
10682 substitution_group: substitution_group,
10683 min_occurs: min_occurs.unwrap_or_else(super::ElementType::default_min_occurs),
10684 max_occurs: max_occurs.unwrap_or_else(super::ElementType::default_max_occurs),
10685 default: default,
10686 fixed: fixed,
10687 nillable: nillable,
10688 abstract_: abstract_.unwrap_or_else(super::ElementType::default_abstract_),
10689 final_: final_,
10690 block: block,
10691 form: form,
10692 target_namespace: target_namespace,
10693 content: Vec::new(),
10694 state: Box::new(ElementTypeDeserializerState::Init__),
10695 }))
10696 }
10697 fn finish_state<R>(
10698 &mut self,
10699 reader: &R,
10700 state: ElementTypeDeserializerState,
10701 ) -> Result<(), Error>
10702 where
10703 R: DeserializeReader,
10704 {
10705 if let ElementTypeDeserializerState::Content__(deserializer) = state {
10706 self.store_content(deserializer.finish(reader)?)?;
10707 }
10708 Ok(())
10709 }
10710 fn store_content(&mut self, value: super::ElementTypeContent) -> Result<(), Error> {
10711 self.content.push(value);
10712 Ok(())
10713 }
10714 fn handle_content<'de, R>(
10715 &mut self,
10716 reader: &R,
10717 output: DeserializerOutput<'de, super::ElementTypeContent>,
10718 fallback: &mut Option<ElementTypeDeserializerState>,
10719 ) -> Result<ElementHandlerOutput<'de>, Error>
10720 where
10721 R: DeserializeReader,
10722 {
10723 let DeserializerOutput {
10724 artifact,
10725 event,
10726 allow_any,
10727 } = output;
10728 if artifact.is_none() {
10729 *self.state = fallback
10730 .take()
10731 .unwrap_or(ElementTypeDeserializerState::Next__);
10732 return Ok(ElementHandlerOutput::break_(event, allow_any));
10733 }
10734 if let Some(fallback) = fallback.take() {
10735 self.finish_state(reader, fallback)?;
10736 }
10737 Ok(match artifact {
10738 DeserializerArtifact::None => unreachable!(),
10739 DeserializerArtifact::Data(data) => {
10740 self.store_content(data)?;
10741 *self.state = ElementTypeDeserializerState::Next__;
10742 ElementHandlerOutput::from_event(event, allow_any)
10743 }
10744 DeserializerArtifact::Deserializer(deserializer) => {
10745 let ret = ElementHandlerOutput::from_event(event, allow_any);
10746 match &ret {
10747 ElementHandlerOutput::Break { .. } => {
10748 *self.state = ElementTypeDeserializerState::Content__(deserializer);
10749 }
10750 ElementHandlerOutput::Continue { .. } => {
10751 fallback.get_or_insert(ElementTypeDeserializerState::Content__(
10752 deserializer,
10753 ));
10754 *self.state = ElementTypeDeserializerState::Next__;
10755 }
10756 }
10757 ret
10758 }
10759 })
10760 }
10761 }
10762 impl<'de> Deserializer<'de, super::ElementType> for Box<ElementTypeDeserializer> {
10763 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::ElementType>
10764 where
10765 R: DeserializeReader,
10766 {
10767 reader.init_deserializer_from_start_event(
10768 event,
10769 ElementTypeDeserializer::from_bytes_start,
10770 )
10771 }
10772 fn next<R>(
10773 mut self,
10774 reader: &R,
10775 event: Event<'de>,
10776 ) -> DeserializerResult<'de, super::ElementType>
10777 where
10778 R: DeserializeReader,
10779 {
10780 use ElementTypeDeserializerState as S;
10781 let mut event = event;
10782 let mut fallback = None;
10783 let (event, allow_any) = loop {
10784 let state = replace(&mut *self.state, S::Unknown__);
10785 event = match (state, event) {
10786 (S::Content__(deserializer), event) => {
10787 let output = deserializer.next(reader, event)?;
10788 match self.handle_content(reader, output, &mut fallback)? {
10789 ElementHandlerOutput::Break { event, allow_any } => {
10790 break (event, allow_any)
10791 }
10792 ElementHandlerOutput::Continue { event, .. } => event,
10793 }
10794 }
10795 (_, Event::End(_)) => {
10796 return Ok(DeserializerOutput {
10797 artifact: DeserializerArtifact::Data(self.finish(reader)?),
10798 event: DeserializerEvent::None,
10799 allow_any: false,
10800 });
10801 }
10802 (state @ (S::Init__ | S::Next__), event) => {
10803 fallback.get_or_insert(state);
10804 let output =
10805 <super::ElementTypeContent as WithDeserializer>::Deserializer::init(
10806 reader, event,
10807 )?;
10808 match self.handle_content(reader, output, &mut fallback)? {
10809 ElementHandlerOutput::Break { event, allow_any } => {
10810 break (event, allow_any)
10811 }
10812 ElementHandlerOutput::Continue { event, .. } => event,
10813 }
10814 }
10815 (S::Unknown__, _) => unreachable!(),
10816 }
10817 };
10818 let artifact = DeserializerArtifact::Deserializer(self);
10819 Ok(DeserializerOutput {
10820 artifact,
10821 event,
10822 allow_any,
10823 })
10824 }
10825 fn finish<R>(mut self, reader: &R) -> Result<super::ElementType, Error>
10826 where
10827 R: DeserializeReader,
10828 {
10829 let state = replace(&mut *self.state, ElementTypeDeserializerState::Unknown__);
10830 self.finish_state(reader, state)?;
10831 Ok(super::ElementType {
10832 id: self.id,
10833 name: self.name,
10834 ref_: self.ref_,
10835 type_: self.type_,
10836 substitution_group: self.substitution_group,
10837 min_occurs: self.min_occurs,
10838 max_occurs: self.max_occurs,
10839 default: self.default,
10840 fixed: self.fixed,
10841 nillable: self.nillable,
10842 abstract_: self.abstract_,
10843 final_: self.final_,
10844 block: self.block,
10845 form: self.form,
10846 target_namespace: self.target_namespace,
10847 content: self.content,
10848 })
10849 }
10850 }
10851 #[derive(Debug)]
10852 pub struct ElementTypeContentDeserializer {
10853 state: Box<ElementTypeContentDeserializerState>,
10854 }
10855 #[derive(Debug)]
10856 pub enum ElementTypeContentDeserializerState {
10857 Init__,
10858 Annotation(
10859 Option<super::Annotation>,
10860 Option<<super::Annotation as WithDeserializer>::Deserializer>,
10861 ),
10862 SimpleType(
10863 Option<super::SimpleBaseType>,
10864 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
10865 ),
10866 ComplexType(
10867 Option<super::ComplexBaseType>,
10868 Option<<super::ComplexBaseType as WithDeserializer>::Deserializer>,
10869 ),
10870 Alternative(
10871 Option<super::AltType>,
10872 Option<<super::AltType as WithDeserializer>::Deserializer>,
10873 ),
10874 Unique(
10875 Option<super::KeybaseType>,
10876 Option<<super::KeybaseType as WithDeserializer>::Deserializer>,
10877 ),
10878 Key(
10879 Option<super::KeybaseType>,
10880 Option<<super::KeybaseType as WithDeserializer>::Deserializer>,
10881 ),
10882 Keyref(
10883 Option<super::Keyref>,
10884 Option<<super::Keyref as WithDeserializer>::Deserializer>,
10885 ),
10886 Done__(super::ElementTypeContent),
10887 Unknown__,
10888 }
10889 impl ElementTypeContentDeserializer {
10890 fn find_suitable<'de, R>(
10891 &mut self,
10892 reader: &R,
10893 event: Event<'de>,
10894 fallback: &mut Option<ElementTypeContentDeserializerState>,
10895 ) -> Result<ElementHandlerOutput<'de>, Error>
10896 where
10897 R: DeserializeReader,
10898 {
10899 let (Event::Start(x) | Event::Empty(x)) = &event else {
10900 *self.state = fallback
10901 .take()
10902 .unwrap_or(ElementTypeContentDeserializerState::Init__);
10903 return Ok(ElementHandlerOutput::return_to_parent(event, false));
10904 };
10905 if matches!(
10906 reader.resolve_local_name(x.name(), &super::NS_XS),
10907 Some(b"annotation")
10908 ) {
10909 let output =
10910 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
10911 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
10912 }
10913 if matches!(
10914 reader.resolve_local_name(x.name(), &super::NS_XS),
10915 Some(b"simpleType")
10916 ) {
10917 let output =
10918 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(reader, event)?;
10919 return self.handle_simple_type(reader, Default::default(), output, &mut *fallback);
10920 }
10921 if matches!(
10922 reader.resolve_local_name(x.name(), &super::NS_XS),
10923 Some(b"complexType")
10924 ) {
10925 let output = <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
10926 reader, event,
10927 )?;
10928 return self.handle_complex_type(
10929 reader,
10930 Default::default(),
10931 output,
10932 &mut *fallback,
10933 );
10934 }
10935 if matches!(
10936 reader.resolve_local_name(x.name(), &super::NS_XS),
10937 Some(b"alternative")
10938 ) {
10939 let output =
10940 <super::AltType as WithDeserializer>::Deserializer::init(reader, event)?;
10941 return self.handle_alternative(reader, Default::default(), output, &mut *fallback);
10942 }
10943 if matches!(
10944 reader.resolve_local_name(x.name(), &super::NS_XS),
10945 Some(b"unique")
10946 ) {
10947 let output =
10948 <super::KeybaseType as WithDeserializer>::Deserializer::init(reader, event)?;
10949 return self.handle_unique(reader, Default::default(), output, &mut *fallback);
10950 }
10951 if matches!(
10952 reader.resolve_local_name(x.name(), &super::NS_XS),
10953 Some(b"key")
10954 ) {
10955 let output =
10956 <super::KeybaseType as WithDeserializer>::Deserializer::init(reader, event)?;
10957 return self.handle_key(reader, Default::default(), output, &mut *fallback);
10958 }
10959 if matches!(
10960 reader.resolve_local_name(x.name(), &super::NS_XS),
10961 Some(b"keyref")
10962 ) {
10963 let output =
10964 <super::Keyref as WithDeserializer>::Deserializer::init(reader, event)?;
10965 return self.handle_keyref(reader, Default::default(), output, &mut *fallback);
10966 }
10967 *self.state = fallback
10968 .take()
10969 .unwrap_or(ElementTypeContentDeserializerState::Init__);
10970 Ok(ElementHandlerOutput::return_to_parent(event, false))
10971 }
10972 fn finish_state<R>(
10973 reader: &R,
10974 state: ElementTypeContentDeserializerState,
10975 ) -> Result<super::ElementTypeContent, Error>
10976 where
10977 R: DeserializeReader,
10978 {
10979 use ElementTypeContentDeserializerState as S;
10980 match state {
10981 S::Init__ => Err(ErrorKind::MissingContent.into()),
10982 S::Annotation(mut values, deserializer) => {
10983 if let Some(deserializer) = deserializer {
10984 let value = deserializer.finish(reader)?;
10985 ElementTypeContentDeserializer::store_annotation(&mut values, value)?;
10986 }
10987 Ok(super::ElementTypeContent::Annotation(values.ok_or_else(
10988 || ErrorKind::MissingElement("annotation".into()),
10989 )?))
10990 }
10991 S::SimpleType(mut values, deserializer) => {
10992 if let Some(deserializer) = deserializer {
10993 let value = deserializer.finish(reader)?;
10994 ElementTypeContentDeserializer::store_simple_type(&mut values, value)?;
10995 }
10996 Ok(super::ElementTypeContent::SimpleType(values.ok_or_else(
10997 || ErrorKind::MissingElement("simpleType".into()),
10998 )?))
10999 }
11000 S::ComplexType(mut values, deserializer) => {
11001 if let Some(deserializer) = deserializer {
11002 let value = deserializer.finish(reader)?;
11003 ElementTypeContentDeserializer::store_complex_type(&mut values, value)?;
11004 }
11005 Ok(super::ElementTypeContent::ComplexType(values.ok_or_else(
11006 || ErrorKind::MissingElement("complexType".into()),
11007 )?))
11008 }
11009 S::Alternative(mut values, deserializer) => {
11010 if let Some(deserializer) = deserializer {
11011 let value = deserializer.finish(reader)?;
11012 ElementTypeContentDeserializer::store_alternative(&mut values, value)?;
11013 }
11014 Ok(super::ElementTypeContent::Alternative(values.ok_or_else(
11015 || ErrorKind::MissingElement("alternative".into()),
11016 )?))
11017 }
11018 S::Unique(mut values, deserializer) => {
11019 if let Some(deserializer) = deserializer {
11020 let value = deserializer.finish(reader)?;
11021 ElementTypeContentDeserializer::store_unique(&mut values, value)?;
11022 }
11023 Ok(super::ElementTypeContent::Unique(values.ok_or_else(
11024 || ErrorKind::MissingElement("unique".into()),
11025 )?))
11026 }
11027 S::Key(mut values, deserializer) => {
11028 if let Some(deserializer) = deserializer {
11029 let value = deserializer.finish(reader)?;
11030 ElementTypeContentDeserializer::store_key(&mut values, value)?;
11031 }
11032 Ok(super::ElementTypeContent::Key(
11033 values.ok_or_else(|| ErrorKind::MissingElement("key".into()))?,
11034 ))
11035 }
11036 S::Keyref(mut values, deserializer) => {
11037 if let Some(deserializer) = deserializer {
11038 let value = deserializer.finish(reader)?;
11039 ElementTypeContentDeserializer::store_keyref(&mut values, value)?;
11040 }
11041 Ok(super::ElementTypeContent::Keyref(values.ok_or_else(
11042 || ErrorKind::MissingElement("keyref".into()),
11043 )?))
11044 }
11045 S::Done__(data) => Ok(data),
11046 S::Unknown__ => unreachable!(),
11047 }
11048 }
11049 fn store_annotation(
11050 values: &mut Option<super::Annotation>,
11051 value: super::Annotation,
11052 ) -> Result<(), Error> {
11053 if values.is_some() {
11054 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11055 b"annotation",
11056 )))?;
11057 }
11058 *values = Some(value);
11059 Ok(())
11060 }
11061 fn store_simple_type(
11062 values: &mut Option<super::SimpleBaseType>,
11063 value: super::SimpleBaseType,
11064 ) -> Result<(), Error> {
11065 if values.is_some() {
11066 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11067 b"simpleType",
11068 )))?;
11069 }
11070 *values = Some(value);
11071 Ok(())
11072 }
11073 fn store_complex_type(
11074 values: &mut Option<super::ComplexBaseType>,
11075 value: super::ComplexBaseType,
11076 ) -> Result<(), Error> {
11077 if values.is_some() {
11078 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11079 b"complexType",
11080 )))?;
11081 }
11082 *values = Some(value);
11083 Ok(())
11084 }
11085 fn store_alternative(
11086 values: &mut Option<super::AltType>,
11087 value: super::AltType,
11088 ) -> Result<(), Error> {
11089 if values.is_some() {
11090 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11091 b"alternative",
11092 )))?;
11093 }
11094 *values = Some(value);
11095 Ok(())
11096 }
11097 fn store_unique(
11098 values: &mut Option<super::KeybaseType>,
11099 value: super::KeybaseType,
11100 ) -> Result<(), Error> {
11101 if values.is_some() {
11102 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11103 b"unique",
11104 )))?;
11105 }
11106 *values = Some(value);
11107 Ok(())
11108 }
11109 fn store_key(
11110 values: &mut Option<super::KeybaseType>,
11111 value: super::KeybaseType,
11112 ) -> Result<(), Error> {
11113 if values.is_some() {
11114 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"key")))?;
11115 }
11116 *values = Some(value);
11117 Ok(())
11118 }
11119 fn store_keyref(
11120 values: &mut Option<super::Keyref>,
11121 value: super::Keyref,
11122 ) -> Result<(), Error> {
11123 if values.is_some() {
11124 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11125 b"keyref",
11126 )))?;
11127 }
11128 *values = Some(value);
11129 Ok(())
11130 }
11131 fn handle_annotation<'de, R>(
11132 &mut self,
11133 reader: &R,
11134 mut values: Option<super::Annotation>,
11135 output: DeserializerOutput<'de, super::Annotation>,
11136 fallback: &mut Option<ElementTypeContentDeserializerState>,
11137 ) -> Result<ElementHandlerOutput<'de>, Error>
11138 where
11139 R: DeserializeReader,
11140 {
11141 let DeserializerOutput {
11142 artifact,
11143 event,
11144 allow_any,
11145 } = output;
11146 if artifact.is_none() {
11147 *self.state = match fallback.take() {
11148 None => ElementTypeContentDeserializerState::Init__,
11149 Some(ElementTypeContentDeserializerState::Annotation(
11150 _,
11151 Some(deserializer),
11152 )) => {
11153 ElementTypeContentDeserializerState::Annotation(values, Some(deserializer))
11154 }
11155 _ => unreachable!(),
11156 };
11157 return Ok(ElementHandlerOutput::break_(event, allow_any));
11158 }
11159 match fallback.take() {
11160 None => (),
11161 Some(ElementTypeContentDeserializerState::Annotation(_, Some(deserializer))) => {
11162 let data = deserializer.finish(reader)?;
11163 ElementTypeContentDeserializer::store_annotation(&mut values, data)?;
11164 }
11165 Some(_) => unreachable!(),
11166 }
11167 Ok(match artifact {
11168 DeserializerArtifact::None => unreachable!(),
11169 DeserializerArtifact::Data(data) => {
11170 ElementTypeContentDeserializer::store_annotation(&mut values, data)?;
11171 let data = ElementTypeContentDeserializer::finish_state(
11172 reader,
11173 ElementTypeContentDeserializerState::Annotation(values, None),
11174 )?;
11175 *self.state = ElementTypeContentDeserializerState::Done__(data);
11176 ElementHandlerOutput::Break { event, allow_any }
11177 }
11178 DeserializerArtifact::Deserializer(deserializer) => {
11179 *self.state =
11180 ElementTypeContentDeserializerState::Annotation(values, Some(deserializer));
11181 ElementHandlerOutput::from_event_end(event, allow_any)
11182 }
11183 })
11184 }
11185 fn handle_simple_type<'de, R>(
11186 &mut self,
11187 reader: &R,
11188 mut values: Option<super::SimpleBaseType>,
11189 output: DeserializerOutput<'de, super::SimpleBaseType>,
11190 fallback: &mut Option<ElementTypeContentDeserializerState>,
11191 ) -> Result<ElementHandlerOutput<'de>, Error>
11192 where
11193 R: DeserializeReader,
11194 {
11195 let DeserializerOutput {
11196 artifact,
11197 event,
11198 allow_any,
11199 } = output;
11200 if artifact.is_none() {
11201 *self.state = match fallback.take() {
11202 None => ElementTypeContentDeserializerState::Init__,
11203 Some(ElementTypeContentDeserializerState::SimpleType(
11204 _,
11205 Some(deserializer),
11206 )) => {
11207 ElementTypeContentDeserializerState::SimpleType(values, Some(deserializer))
11208 }
11209 _ => unreachable!(),
11210 };
11211 return Ok(ElementHandlerOutput::break_(event, allow_any));
11212 }
11213 match fallback.take() {
11214 None => (),
11215 Some(ElementTypeContentDeserializerState::SimpleType(_, Some(deserializer))) => {
11216 let data = deserializer.finish(reader)?;
11217 ElementTypeContentDeserializer::store_simple_type(&mut values, data)?;
11218 }
11219 Some(_) => unreachable!(),
11220 }
11221 Ok(match artifact {
11222 DeserializerArtifact::None => unreachable!(),
11223 DeserializerArtifact::Data(data) => {
11224 ElementTypeContentDeserializer::store_simple_type(&mut values, data)?;
11225 let data = ElementTypeContentDeserializer::finish_state(
11226 reader,
11227 ElementTypeContentDeserializerState::SimpleType(values, None),
11228 )?;
11229 *self.state = ElementTypeContentDeserializerState::Done__(data);
11230 ElementHandlerOutput::Break { event, allow_any }
11231 }
11232 DeserializerArtifact::Deserializer(deserializer) => {
11233 *self.state =
11234 ElementTypeContentDeserializerState::SimpleType(values, Some(deserializer));
11235 ElementHandlerOutput::from_event_end(event, allow_any)
11236 }
11237 })
11238 }
11239 fn handle_complex_type<'de, R>(
11240 &mut self,
11241 reader: &R,
11242 mut values: Option<super::ComplexBaseType>,
11243 output: DeserializerOutput<'de, super::ComplexBaseType>,
11244 fallback: &mut Option<ElementTypeContentDeserializerState>,
11245 ) -> Result<ElementHandlerOutput<'de>, Error>
11246 where
11247 R: DeserializeReader,
11248 {
11249 let DeserializerOutput {
11250 artifact,
11251 event,
11252 allow_any,
11253 } = output;
11254 if artifact.is_none() {
11255 *self.state = match fallback.take() {
11256 None => ElementTypeContentDeserializerState::Init__,
11257 Some(ElementTypeContentDeserializerState::ComplexType(
11258 _,
11259 Some(deserializer),
11260 )) => {
11261 ElementTypeContentDeserializerState::ComplexType(values, Some(deserializer))
11262 }
11263 _ => unreachable!(),
11264 };
11265 return Ok(ElementHandlerOutput::break_(event, allow_any));
11266 }
11267 match fallback.take() {
11268 None => (),
11269 Some(ElementTypeContentDeserializerState::ComplexType(_, Some(deserializer))) => {
11270 let data = deserializer.finish(reader)?;
11271 ElementTypeContentDeserializer::store_complex_type(&mut values, data)?;
11272 }
11273 Some(_) => unreachable!(),
11274 }
11275 Ok(match artifact {
11276 DeserializerArtifact::None => unreachable!(),
11277 DeserializerArtifact::Data(data) => {
11278 ElementTypeContentDeserializer::store_complex_type(&mut values, data)?;
11279 let data = ElementTypeContentDeserializer::finish_state(
11280 reader,
11281 ElementTypeContentDeserializerState::ComplexType(values, None),
11282 )?;
11283 *self.state = ElementTypeContentDeserializerState::Done__(data);
11284 ElementHandlerOutput::Break { event, allow_any }
11285 }
11286 DeserializerArtifact::Deserializer(deserializer) => {
11287 *self.state = ElementTypeContentDeserializerState::ComplexType(
11288 values,
11289 Some(deserializer),
11290 );
11291 ElementHandlerOutput::from_event_end(event, allow_any)
11292 }
11293 })
11294 }
11295 fn handle_alternative<'de, R>(
11296 &mut self,
11297 reader: &R,
11298 mut values: Option<super::AltType>,
11299 output: DeserializerOutput<'de, super::AltType>,
11300 fallback: &mut Option<ElementTypeContentDeserializerState>,
11301 ) -> Result<ElementHandlerOutput<'de>, Error>
11302 where
11303 R: DeserializeReader,
11304 {
11305 let DeserializerOutput {
11306 artifact,
11307 event,
11308 allow_any,
11309 } = output;
11310 if artifact.is_none() {
11311 *self.state = match fallback.take() {
11312 None => ElementTypeContentDeserializerState::Init__,
11313 Some(ElementTypeContentDeserializerState::Alternative(
11314 _,
11315 Some(deserializer),
11316 )) => {
11317 ElementTypeContentDeserializerState::Alternative(values, Some(deserializer))
11318 }
11319 _ => unreachable!(),
11320 };
11321 return Ok(ElementHandlerOutput::break_(event, allow_any));
11322 }
11323 match fallback.take() {
11324 None => (),
11325 Some(ElementTypeContentDeserializerState::Alternative(_, Some(deserializer))) => {
11326 let data = deserializer.finish(reader)?;
11327 ElementTypeContentDeserializer::store_alternative(&mut values, data)?;
11328 }
11329 Some(_) => unreachable!(),
11330 }
11331 Ok(match artifact {
11332 DeserializerArtifact::None => unreachable!(),
11333 DeserializerArtifact::Data(data) => {
11334 ElementTypeContentDeserializer::store_alternative(&mut values, data)?;
11335 let data = ElementTypeContentDeserializer::finish_state(
11336 reader,
11337 ElementTypeContentDeserializerState::Alternative(values, None),
11338 )?;
11339 *self.state = ElementTypeContentDeserializerState::Done__(data);
11340 ElementHandlerOutput::Break { event, allow_any }
11341 }
11342 DeserializerArtifact::Deserializer(deserializer) => {
11343 *self.state = ElementTypeContentDeserializerState::Alternative(
11344 values,
11345 Some(deserializer),
11346 );
11347 ElementHandlerOutput::from_event_end(event, allow_any)
11348 }
11349 })
11350 }
11351 fn handle_unique<'de, R>(
11352 &mut self,
11353 reader: &R,
11354 mut values: Option<super::KeybaseType>,
11355 output: DeserializerOutput<'de, super::KeybaseType>,
11356 fallback: &mut Option<ElementTypeContentDeserializerState>,
11357 ) -> Result<ElementHandlerOutput<'de>, Error>
11358 where
11359 R: DeserializeReader,
11360 {
11361 let DeserializerOutput {
11362 artifact,
11363 event,
11364 allow_any,
11365 } = output;
11366 if artifact.is_none() {
11367 *self.state = match fallback.take() {
11368 None => ElementTypeContentDeserializerState::Init__,
11369 Some(ElementTypeContentDeserializerState::Unique(_, Some(deserializer))) => {
11370 ElementTypeContentDeserializerState::Unique(values, Some(deserializer))
11371 }
11372 _ => unreachable!(),
11373 };
11374 return Ok(ElementHandlerOutput::break_(event, allow_any));
11375 }
11376 match fallback.take() {
11377 None => (),
11378 Some(ElementTypeContentDeserializerState::Unique(_, Some(deserializer))) => {
11379 let data = deserializer.finish(reader)?;
11380 ElementTypeContentDeserializer::store_unique(&mut values, data)?;
11381 }
11382 Some(_) => unreachable!(),
11383 }
11384 Ok(match artifact {
11385 DeserializerArtifact::None => unreachable!(),
11386 DeserializerArtifact::Data(data) => {
11387 ElementTypeContentDeserializer::store_unique(&mut values, data)?;
11388 let data = ElementTypeContentDeserializer::finish_state(
11389 reader,
11390 ElementTypeContentDeserializerState::Unique(values, None),
11391 )?;
11392 *self.state = ElementTypeContentDeserializerState::Done__(data);
11393 ElementHandlerOutput::Break { event, allow_any }
11394 }
11395 DeserializerArtifact::Deserializer(deserializer) => {
11396 *self.state =
11397 ElementTypeContentDeserializerState::Unique(values, Some(deserializer));
11398 ElementHandlerOutput::from_event_end(event, allow_any)
11399 }
11400 })
11401 }
11402 fn handle_key<'de, R>(
11403 &mut self,
11404 reader: &R,
11405 mut values: Option<super::KeybaseType>,
11406 output: DeserializerOutput<'de, super::KeybaseType>,
11407 fallback: &mut Option<ElementTypeContentDeserializerState>,
11408 ) -> Result<ElementHandlerOutput<'de>, Error>
11409 where
11410 R: DeserializeReader,
11411 {
11412 let DeserializerOutput {
11413 artifact,
11414 event,
11415 allow_any,
11416 } = output;
11417 if artifact.is_none() {
11418 *self.state = match fallback.take() {
11419 None => ElementTypeContentDeserializerState::Init__,
11420 Some(ElementTypeContentDeserializerState::Key(_, Some(deserializer))) => {
11421 ElementTypeContentDeserializerState::Key(values, Some(deserializer))
11422 }
11423 _ => unreachable!(),
11424 };
11425 return Ok(ElementHandlerOutput::break_(event, allow_any));
11426 }
11427 match fallback.take() {
11428 None => (),
11429 Some(ElementTypeContentDeserializerState::Key(_, Some(deserializer))) => {
11430 let data = deserializer.finish(reader)?;
11431 ElementTypeContentDeserializer::store_key(&mut values, data)?;
11432 }
11433 Some(_) => unreachable!(),
11434 }
11435 Ok(match artifact {
11436 DeserializerArtifact::None => unreachable!(),
11437 DeserializerArtifact::Data(data) => {
11438 ElementTypeContentDeserializer::store_key(&mut values, data)?;
11439 let data = ElementTypeContentDeserializer::finish_state(
11440 reader,
11441 ElementTypeContentDeserializerState::Key(values, None),
11442 )?;
11443 *self.state = ElementTypeContentDeserializerState::Done__(data);
11444 ElementHandlerOutput::Break { event, allow_any }
11445 }
11446 DeserializerArtifact::Deserializer(deserializer) => {
11447 *self.state =
11448 ElementTypeContentDeserializerState::Key(values, Some(deserializer));
11449 ElementHandlerOutput::from_event_end(event, allow_any)
11450 }
11451 })
11452 }
11453 fn handle_keyref<'de, R>(
11454 &mut self,
11455 reader: &R,
11456 mut values: Option<super::Keyref>,
11457 output: DeserializerOutput<'de, super::Keyref>,
11458 fallback: &mut Option<ElementTypeContentDeserializerState>,
11459 ) -> Result<ElementHandlerOutput<'de>, Error>
11460 where
11461 R: DeserializeReader,
11462 {
11463 let DeserializerOutput {
11464 artifact,
11465 event,
11466 allow_any,
11467 } = output;
11468 if artifact.is_none() {
11469 *self.state = match fallback.take() {
11470 None => ElementTypeContentDeserializerState::Init__,
11471 Some(ElementTypeContentDeserializerState::Keyref(_, Some(deserializer))) => {
11472 ElementTypeContentDeserializerState::Keyref(values, Some(deserializer))
11473 }
11474 _ => unreachable!(),
11475 };
11476 return Ok(ElementHandlerOutput::break_(event, allow_any));
11477 }
11478 match fallback.take() {
11479 None => (),
11480 Some(ElementTypeContentDeserializerState::Keyref(_, Some(deserializer))) => {
11481 let data = deserializer.finish(reader)?;
11482 ElementTypeContentDeserializer::store_keyref(&mut values, data)?;
11483 }
11484 Some(_) => unreachable!(),
11485 }
11486 Ok(match artifact {
11487 DeserializerArtifact::None => unreachable!(),
11488 DeserializerArtifact::Data(data) => {
11489 ElementTypeContentDeserializer::store_keyref(&mut values, data)?;
11490 let data = ElementTypeContentDeserializer::finish_state(
11491 reader,
11492 ElementTypeContentDeserializerState::Keyref(values, None),
11493 )?;
11494 *self.state = ElementTypeContentDeserializerState::Done__(data);
11495 ElementHandlerOutput::Break { event, allow_any }
11496 }
11497 DeserializerArtifact::Deserializer(deserializer) => {
11498 *self.state =
11499 ElementTypeContentDeserializerState::Keyref(values, Some(deserializer));
11500 ElementHandlerOutput::from_event_end(event, allow_any)
11501 }
11502 })
11503 }
11504 }
11505 impl<'de> Deserializer<'de, super::ElementTypeContent> for Box<ElementTypeContentDeserializer> {
11506 fn init<R>(
11507 reader: &R,
11508 event: Event<'de>,
11509 ) -> DeserializerResult<'de, super::ElementTypeContent>
11510 where
11511 R: DeserializeReader,
11512 {
11513 let deserializer = Box::new(ElementTypeContentDeserializer {
11514 state: Box::new(ElementTypeContentDeserializerState::Init__),
11515 });
11516 let mut output = deserializer.next(reader, event)?;
11517 output.artifact = match output.artifact {
11518 DeserializerArtifact::Deserializer(x)
11519 if matches!(&*x.state, ElementTypeContentDeserializerState::Init__) =>
11520 {
11521 DeserializerArtifact::None
11522 }
11523 artifact => artifact,
11524 };
11525 Ok(output)
11526 }
11527 fn next<R>(
11528 mut self,
11529 reader: &R,
11530 event: Event<'de>,
11531 ) -> DeserializerResult<'de, super::ElementTypeContent>
11532 where
11533 R: DeserializeReader,
11534 {
11535 use ElementTypeContentDeserializerState as S;
11536 let mut event = event;
11537 let mut fallback = None;
11538 let (event, allow_any) = loop {
11539 let state = replace(&mut *self.state, S::Unknown__);
11540 event = match (state, event) {
11541 (S::Annotation(values, Some(deserializer)), event) => {
11542 let output = deserializer.next(reader, event)?;
11543 match self.handle_annotation(reader, values, output, &mut fallback)? {
11544 ElementHandlerOutput::Break { event, allow_any } => {
11545 break (event, allow_any)
11546 }
11547 ElementHandlerOutput::Continue { event, .. } => event,
11548 }
11549 }
11550 (S::SimpleType(values, Some(deserializer)), event) => {
11551 let output = deserializer.next(reader, event)?;
11552 match self.handle_simple_type(reader, values, output, &mut fallback)? {
11553 ElementHandlerOutput::Break { event, allow_any } => {
11554 break (event, allow_any)
11555 }
11556 ElementHandlerOutput::Continue { event, .. } => event,
11557 }
11558 }
11559 (S::ComplexType(values, Some(deserializer)), event) => {
11560 let output = deserializer.next(reader, event)?;
11561 match self.handle_complex_type(reader, values, output, &mut fallback)? {
11562 ElementHandlerOutput::Break { event, allow_any } => {
11563 break (event, allow_any)
11564 }
11565 ElementHandlerOutput::Continue { event, .. } => event,
11566 }
11567 }
11568 (S::Alternative(values, Some(deserializer)), event) => {
11569 let output = deserializer.next(reader, event)?;
11570 match self.handle_alternative(reader, values, output, &mut fallback)? {
11571 ElementHandlerOutput::Break { event, allow_any } => {
11572 break (event, allow_any)
11573 }
11574 ElementHandlerOutput::Continue { event, .. } => event,
11575 }
11576 }
11577 (S::Unique(values, Some(deserializer)), event) => {
11578 let output = deserializer.next(reader, event)?;
11579 match self.handle_unique(reader, values, output, &mut fallback)? {
11580 ElementHandlerOutput::Break { event, allow_any } => {
11581 break (event, allow_any)
11582 }
11583 ElementHandlerOutput::Continue { event, .. } => event,
11584 }
11585 }
11586 (S::Key(values, Some(deserializer)), event) => {
11587 let output = deserializer.next(reader, event)?;
11588 match self.handle_key(reader, values, output, &mut fallback)? {
11589 ElementHandlerOutput::Break { event, allow_any } => {
11590 break (event, allow_any)
11591 }
11592 ElementHandlerOutput::Continue { event, .. } => event,
11593 }
11594 }
11595 (S::Keyref(values, Some(deserializer)), event) => {
11596 let output = deserializer.next(reader, event)?;
11597 match self.handle_keyref(reader, values, output, &mut fallback)? {
11598 ElementHandlerOutput::Break { event, allow_any } => {
11599 break (event, allow_any)
11600 }
11601 ElementHandlerOutput::Continue { event, .. } => event,
11602 }
11603 }
11604 (state, event @ Event::End(_)) => {
11605 return Ok(DeserializerOutput {
11606 artifact: DeserializerArtifact::Data(
11607 ElementTypeContentDeserializer::finish_state(reader, state)?,
11608 ),
11609 event: DeserializerEvent::Continue(event),
11610 allow_any: false,
11611 });
11612 }
11613 (S::Init__, event) => match self.find_suitable(reader, event, &mut fallback)? {
11614 ElementHandlerOutput::Break { event, allow_any } => {
11615 break (event, allow_any)
11616 }
11617 ElementHandlerOutput::Continue { event, .. } => event,
11618 },
11619 (S::Annotation(values, None), event) => {
11620 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
11621 reader, event,
11622 )?;
11623 match self.handle_annotation(reader, values, output, &mut fallback)? {
11624 ElementHandlerOutput::Break { event, allow_any } => {
11625 break (event, allow_any)
11626 }
11627 ElementHandlerOutput::Continue { event, .. } => event,
11628 }
11629 }
11630 (S::SimpleType(values, None), event) => {
11631 let output =
11632 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
11633 reader, event,
11634 )?;
11635 match self.handle_simple_type(reader, values, output, &mut fallback)? {
11636 ElementHandlerOutput::Break { event, allow_any } => {
11637 break (event, allow_any)
11638 }
11639 ElementHandlerOutput::Continue { event, .. } => event,
11640 }
11641 }
11642 (S::ComplexType(values, None), event) => {
11643 let output =
11644 <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
11645 reader, event,
11646 )?;
11647 match self.handle_complex_type(reader, values, output, &mut fallback)? {
11648 ElementHandlerOutput::Break { event, allow_any } => {
11649 break (event, allow_any)
11650 }
11651 ElementHandlerOutput::Continue { event, .. } => event,
11652 }
11653 }
11654 (S::Alternative(values, None), event) => {
11655 let output = <super::AltType as WithDeserializer>::Deserializer::init(
11656 reader, event,
11657 )?;
11658 match self.handle_alternative(reader, values, output, &mut fallback)? {
11659 ElementHandlerOutput::Break { event, allow_any } => {
11660 break (event, allow_any)
11661 }
11662 ElementHandlerOutput::Continue { event, .. } => event,
11663 }
11664 }
11665 (S::Unique(values, None), event) => {
11666 let output = <super::KeybaseType as WithDeserializer>::Deserializer::init(
11667 reader, event,
11668 )?;
11669 match self.handle_unique(reader, 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, None), event) => {
11677 let output = <super::KeybaseType as WithDeserializer>::Deserializer::init(
11678 reader, event,
11679 )?;
11680 match self.handle_key(reader, values, output, &mut fallback)? {
11681 ElementHandlerOutput::Break { event, allow_any } => {
11682 break (event, allow_any)
11683 }
11684 ElementHandlerOutput::Continue { event, .. } => event,
11685 }
11686 }
11687 (S::Keyref(values, None), event) => {
11688 let output =
11689 <super::Keyref as WithDeserializer>::Deserializer::init(reader, event)?;
11690 match self.handle_keyref(reader, values, output, &mut fallback)? {
11691 ElementHandlerOutput::Break { event, allow_any } => {
11692 break (event, allow_any)
11693 }
11694 ElementHandlerOutput::Continue { event, .. } => event,
11695 }
11696 }
11697 (s @ S::Done__(_), event) => {
11698 *self.state = s;
11699 break (DeserializerEvent::Continue(event), false);
11700 }
11701 (S::Unknown__, _) => unreachable!(),
11702 }
11703 };
11704 let artifact = if matches!(&*self.state, S::Done__(_)) {
11705 DeserializerArtifact::Data(self.finish(reader)?)
11706 } else {
11707 DeserializerArtifact::Deserializer(self)
11708 };
11709 Ok(DeserializerOutput {
11710 artifact,
11711 event,
11712 allow_any,
11713 })
11714 }
11715 fn finish<R>(self, reader: &R) -> Result<super::ElementTypeContent, Error>
11716 where
11717 R: DeserializeReader,
11718 {
11719 ElementTypeContentDeserializer::finish_state(reader, *self.state)
11720 }
11721 }
11722 #[derive(Debug)]
11723 pub struct AttributeTypeDeserializer {
11724 id: Option<String>,
11725 name: Option<String>,
11726 ref_: Option<super::QName>,
11727 type_: Option<super::QName>,
11728 use_: super::AttributeUseType,
11729 default: Option<String>,
11730 fixed: Option<String>,
11731 form: Option<super::FormChoiceType>,
11732 target_namespace: Option<String>,
11733 inheritable: Option<bool>,
11734 annotation: Option<super::Annotation>,
11735 simple_type: Option<super::SimpleBaseType>,
11736 state: Box<AttributeTypeDeserializerState>,
11737 }
11738 #[derive(Debug)]
11739 enum AttributeTypeDeserializerState {
11740 Init__,
11741 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
11742 SimpleType(Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>),
11743 Done__,
11744 Unknown__,
11745 }
11746 impl AttributeTypeDeserializer {
11747 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
11748 where
11749 R: DeserializeReader,
11750 {
11751 let mut id: Option<String> = None;
11752 let mut name: Option<String> = None;
11753 let mut ref_: Option<super::QName> = None;
11754 let mut type_: Option<super::QName> = None;
11755 let mut use_: Option<super::AttributeUseType> = None;
11756 let mut default: Option<String> = None;
11757 let mut fixed: Option<String> = None;
11758 let mut form: Option<super::FormChoiceType> = None;
11759 let mut target_namespace: Option<String> = None;
11760 let mut inheritable: Option<bool> = None;
11761 for attrib in filter_xmlns_attributes(bytes_start) {
11762 let attrib = attrib?;
11763 if matches!(
11764 reader.resolve_local_name(attrib.key, &super::NS_XS),
11765 Some(b"id")
11766 ) {
11767 reader.read_attrib(&mut id, b"id", &attrib.value)?;
11768 } else if matches!(
11769 reader.resolve_local_name(attrib.key, &super::NS_XS),
11770 Some(b"name")
11771 ) {
11772 reader.read_attrib(&mut name, b"name", &attrib.value)?;
11773 } else if matches!(
11774 reader.resolve_local_name(attrib.key, &super::NS_XS),
11775 Some(b"ref")
11776 ) {
11777 reader.read_attrib(&mut ref_, b"ref", &attrib.value)?;
11778 } else if matches!(
11779 reader.resolve_local_name(attrib.key, &super::NS_XS),
11780 Some(b"type")
11781 ) {
11782 reader.read_attrib(&mut type_, b"type", &attrib.value)?;
11783 } else if matches!(
11784 reader.resolve_local_name(attrib.key, &super::NS_XS),
11785 Some(b"use")
11786 ) {
11787 reader.read_attrib(&mut use_, b"use", &attrib.value)?;
11788 } else if matches!(
11789 reader.resolve_local_name(attrib.key, &super::NS_XS),
11790 Some(b"default")
11791 ) {
11792 reader.read_attrib(&mut default, b"default", &attrib.value)?;
11793 } else if matches!(
11794 reader.resolve_local_name(attrib.key, &super::NS_XS),
11795 Some(b"fixed")
11796 ) {
11797 reader.read_attrib(&mut fixed, b"fixed", &attrib.value)?;
11798 } else if matches!(
11799 reader.resolve_local_name(attrib.key, &super::NS_XS),
11800 Some(b"form")
11801 ) {
11802 reader.read_attrib(&mut form, b"form", &attrib.value)?;
11803 } else if matches!(
11804 reader.resolve_local_name(attrib.key, &super::NS_XS),
11805 Some(b"targetNamespace")
11806 ) {
11807 reader.read_attrib(&mut target_namespace, b"targetNamespace", &attrib.value)?;
11808 } else if matches!(
11809 reader.resolve_local_name(attrib.key, &super::NS_XS),
11810 Some(b"inheritable")
11811 ) {
11812 reader.read_attrib(&mut inheritable, b"inheritable", &attrib.value)?;
11813 }
11814 }
11815 Ok(Box::new(Self {
11816 id: id,
11817 name: name,
11818 ref_: ref_,
11819 type_: type_,
11820 use_: use_.unwrap_or_else(super::AttributeType::default_use_),
11821 default: default,
11822 fixed: fixed,
11823 form: form,
11824 target_namespace: target_namespace,
11825 inheritable: inheritable,
11826 annotation: None,
11827 simple_type: None,
11828 state: Box::new(AttributeTypeDeserializerState::Init__),
11829 }))
11830 }
11831 fn finish_state<R>(
11832 &mut self,
11833 reader: &R,
11834 state: AttributeTypeDeserializerState,
11835 ) -> Result<(), Error>
11836 where
11837 R: DeserializeReader,
11838 {
11839 use AttributeTypeDeserializerState as S;
11840 match state {
11841 S::Annotation(Some(deserializer)) => {
11842 self.store_annotation(deserializer.finish(reader)?)?
11843 }
11844 S::SimpleType(Some(deserializer)) => {
11845 self.store_simple_type(deserializer.finish(reader)?)?
11846 }
11847 _ => (),
11848 }
11849 Ok(())
11850 }
11851 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
11852 if self.annotation.is_some() {
11853 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11854 b"annotation",
11855 )))?;
11856 }
11857 self.annotation = Some(value);
11858 Ok(())
11859 }
11860 fn store_simple_type(&mut self, value: super::SimpleBaseType) -> Result<(), Error> {
11861 if self.simple_type.is_some() {
11862 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11863 b"simpleType",
11864 )))?;
11865 }
11866 self.simple_type = Some(value);
11867 Ok(())
11868 }
11869 fn handle_annotation<'de, R>(
11870 &mut self,
11871 reader: &R,
11872 output: DeserializerOutput<'de, super::Annotation>,
11873 fallback: &mut Option<AttributeTypeDeserializerState>,
11874 ) -> Result<ElementHandlerOutput<'de>, Error>
11875 where
11876 R: DeserializeReader,
11877 {
11878 let DeserializerOutput {
11879 artifact,
11880 event,
11881 allow_any,
11882 } = output;
11883 if artifact.is_none() {
11884 fallback.get_or_insert(AttributeTypeDeserializerState::Annotation(None));
11885 *self.state = AttributeTypeDeserializerState::SimpleType(None);
11886 return Ok(ElementHandlerOutput::from_event(event, allow_any));
11887 }
11888 if let Some(fallback) = fallback.take() {
11889 self.finish_state(reader, fallback)?;
11890 }
11891 Ok(match artifact {
11892 DeserializerArtifact::None => unreachable!(),
11893 DeserializerArtifact::Data(data) => {
11894 self.store_annotation(data)?;
11895 *self.state = AttributeTypeDeserializerState::SimpleType(None);
11896 ElementHandlerOutput::from_event(event, allow_any)
11897 }
11898 DeserializerArtifact::Deserializer(deserializer) => {
11899 let ret = ElementHandlerOutput::from_event(event, allow_any);
11900 match &ret {
11901 ElementHandlerOutput::Continue { .. } => {
11902 fallback.get_or_insert(AttributeTypeDeserializerState::Annotation(
11903 Some(deserializer),
11904 ));
11905 *self.state = AttributeTypeDeserializerState::SimpleType(None);
11906 }
11907 ElementHandlerOutput::Break { .. } => {
11908 *self.state =
11909 AttributeTypeDeserializerState::Annotation(Some(deserializer));
11910 }
11911 }
11912 ret
11913 }
11914 })
11915 }
11916 fn handle_simple_type<'de, R>(
11917 &mut self,
11918 reader: &R,
11919 output: DeserializerOutput<'de, super::SimpleBaseType>,
11920 fallback: &mut Option<AttributeTypeDeserializerState>,
11921 ) -> Result<ElementHandlerOutput<'de>, Error>
11922 where
11923 R: DeserializeReader,
11924 {
11925 let DeserializerOutput {
11926 artifact,
11927 event,
11928 allow_any,
11929 } = output;
11930 if artifact.is_none() {
11931 fallback.get_or_insert(AttributeTypeDeserializerState::SimpleType(None));
11932 *self.state = AttributeTypeDeserializerState::Done__;
11933 return Ok(ElementHandlerOutput::from_event(event, allow_any));
11934 }
11935 if let Some(fallback) = fallback.take() {
11936 self.finish_state(reader, fallback)?;
11937 }
11938 Ok(match artifact {
11939 DeserializerArtifact::None => unreachable!(),
11940 DeserializerArtifact::Data(data) => {
11941 self.store_simple_type(data)?;
11942 *self.state = AttributeTypeDeserializerState::Done__;
11943 ElementHandlerOutput::from_event(event, allow_any)
11944 }
11945 DeserializerArtifact::Deserializer(deserializer) => {
11946 let ret = ElementHandlerOutput::from_event(event, allow_any);
11947 match &ret {
11948 ElementHandlerOutput::Continue { .. } => {
11949 fallback.get_or_insert(AttributeTypeDeserializerState::SimpleType(
11950 Some(deserializer),
11951 ));
11952 *self.state = AttributeTypeDeserializerState::Done__;
11953 }
11954 ElementHandlerOutput::Break { .. } => {
11955 *self.state =
11956 AttributeTypeDeserializerState::SimpleType(Some(deserializer));
11957 }
11958 }
11959 ret
11960 }
11961 })
11962 }
11963 }
11964 impl<'de> Deserializer<'de, super::AttributeType> for Box<AttributeTypeDeserializer> {
11965 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::AttributeType>
11966 where
11967 R: DeserializeReader,
11968 {
11969 reader.init_deserializer_from_start_event(
11970 event,
11971 AttributeTypeDeserializer::from_bytes_start,
11972 )
11973 }
11974 fn next<R>(
11975 mut self,
11976 reader: &R,
11977 event: Event<'de>,
11978 ) -> DeserializerResult<'de, super::AttributeType>
11979 where
11980 R: DeserializeReader,
11981 {
11982 use AttributeTypeDeserializerState as S;
11983 let mut event = event;
11984 let mut fallback = None;
11985 let mut allow_any_element = false;
11986 let (event, allow_any) = loop {
11987 let state = replace(&mut *self.state, S::Unknown__);
11988 event = match (state, event) {
11989 (S::Annotation(Some(deserializer)), event) => {
11990 let output = deserializer.next(reader, event)?;
11991 match self.handle_annotation(reader, output, &mut fallback)? {
11992 ElementHandlerOutput::Continue { event, allow_any } => {
11993 allow_any_element = allow_any_element || allow_any;
11994 event
11995 }
11996 ElementHandlerOutput::Break { event, allow_any } => {
11997 break (event, allow_any)
11998 }
11999 }
12000 }
12001 (S::SimpleType(Some(deserializer)), event) => {
12002 let output = deserializer.next(reader, event)?;
12003 match self.handle_simple_type(reader, output, &mut fallback)? {
12004 ElementHandlerOutput::Continue { event, allow_any } => {
12005 allow_any_element = allow_any_element || allow_any;
12006 event
12007 }
12008 ElementHandlerOutput::Break { event, allow_any } => {
12009 break (event, allow_any)
12010 }
12011 }
12012 }
12013 (_, Event::End(_)) => {
12014 if let Some(fallback) = fallback.take() {
12015 self.finish_state(reader, fallback)?;
12016 }
12017 return Ok(DeserializerOutput {
12018 artifact: DeserializerArtifact::Data(self.finish(reader)?),
12019 event: DeserializerEvent::None,
12020 allow_any: false,
12021 });
12022 }
12023 (S::Init__, event) => {
12024 fallback.get_or_insert(S::Init__);
12025 *self.state = AttributeTypeDeserializerState::Annotation(None);
12026 event
12027 }
12028 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
12029 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
12030 let output =
12031 <super::Annotation as WithDeserializer>::Deserializer::init(
12032 reader, event,
12033 )?;
12034 match self.handle_annotation(reader, output, &mut fallback)? {
12035 ElementHandlerOutput::Continue { event, allow_any } => {
12036 allow_any_element = allow_any_element || allow_any;
12037 event
12038 }
12039 ElementHandlerOutput::Break { event, allow_any } => {
12040 break (event, allow_any)
12041 }
12042 }
12043 } else {
12044 *self.state = S::SimpleType(None);
12045 allow_any_element = true;
12046 fallback.get_or_insert(S::Annotation(None));
12047 event
12048 }
12049 }
12050 (S::SimpleType(None), event @ (Event::Start(_) | Event::Empty(_))) => {
12051 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"simpleType") {
12052 let output =
12053 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
12054 reader, event,
12055 )?;
12056 match self.handle_simple_type(reader, output, &mut fallback)? {
12057 ElementHandlerOutput::Continue { event, allow_any } => {
12058 allow_any_element = allow_any_element || allow_any;
12059 event
12060 }
12061 ElementHandlerOutput::Break { event, allow_any } => {
12062 break (event, allow_any)
12063 }
12064 }
12065 } else {
12066 *self.state = S::Done__;
12067 allow_any_element = true;
12068 fallback.get_or_insert(S::SimpleType(None));
12069 event
12070 }
12071 }
12072 (S::Done__, event) => {
12073 fallback.get_or_insert(S::Done__);
12074 break (DeserializerEvent::Continue(event), allow_any_element);
12075 }
12076 (S::Unknown__, _) => unreachable!(),
12077 (state, event) => {
12078 *self.state = state;
12079 break (DeserializerEvent::Break(event), false);
12080 }
12081 }
12082 };
12083 if let Some(fallback) = fallback {
12084 *self.state = fallback;
12085 }
12086 Ok(DeserializerOutput {
12087 artifact: DeserializerArtifact::Deserializer(self),
12088 event,
12089 allow_any,
12090 })
12091 }
12092 fn finish<R>(mut self, reader: &R) -> Result<super::AttributeType, Error>
12093 where
12094 R: DeserializeReader,
12095 {
12096 let state = replace(&mut *self.state, AttributeTypeDeserializerState::Unknown__);
12097 self.finish_state(reader, state)?;
12098 Ok(super::AttributeType {
12099 id: self.id,
12100 name: self.name,
12101 ref_: self.ref_,
12102 type_: self.type_,
12103 use_: self.use_,
12104 default: self.default,
12105 fixed: self.fixed,
12106 form: self.form,
12107 target_namespace: self.target_namespace,
12108 inheritable: self.inheritable,
12109 annotation: self.annotation,
12110 simple_type: self.simple_type,
12111 })
12112 }
12113 }
12114 #[derive(Debug)]
12115 pub struct NotationDeserializer {
12116 id: Option<String>,
12117 name: String,
12118 public: Option<String>,
12119 system: Option<String>,
12120 annotation: Option<super::Annotation>,
12121 state: Box<NotationDeserializerState>,
12122 }
12123 #[derive(Debug)]
12124 enum NotationDeserializerState {
12125 Init__,
12126 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
12127 Done__,
12128 Unknown__,
12129 }
12130 impl NotationDeserializer {
12131 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
12132 where
12133 R: DeserializeReader,
12134 {
12135 let mut id: Option<String> = None;
12136 let mut name: Option<String> = None;
12137 let mut public: Option<String> = None;
12138 let mut system: Option<String> = None;
12139 for attrib in filter_xmlns_attributes(bytes_start) {
12140 let attrib = attrib?;
12141 if matches!(
12142 reader.resolve_local_name(attrib.key, &super::NS_XS),
12143 Some(b"id")
12144 ) {
12145 reader.read_attrib(&mut id, b"id", &attrib.value)?;
12146 } else if matches!(
12147 reader.resolve_local_name(attrib.key, &super::NS_XS),
12148 Some(b"name")
12149 ) {
12150 reader.read_attrib(&mut name, b"name", &attrib.value)?;
12151 } else if matches!(
12152 reader.resolve_local_name(attrib.key, &super::NS_XS),
12153 Some(b"public")
12154 ) {
12155 reader.read_attrib(&mut public, b"public", &attrib.value)?;
12156 } else if matches!(
12157 reader.resolve_local_name(attrib.key, &super::NS_XS),
12158 Some(b"system")
12159 ) {
12160 reader.read_attrib(&mut system, b"system", &attrib.value)?;
12161 }
12162 }
12163 Ok(Box::new(Self {
12164 id: id,
12165 name: name
12166 .ok_or_else(|| reader.map_error(ErrorKind::MissingAttribute("name".into())))?,
12167 public: public,
12168 system: system,
12169 annotation: None,
12170 state: Box::new(NotationDeserializerState::Init__),
12171 }))
12172 }
12173 fn finish_state<R>(
12174 &mut self,
12175 reader: &R,
12176 state: NotationDeserializerState,
12177 ) -> Result<(), Error>
12178 where
12179 R: DeserializeReader,
12180 {
12181 use NotationDeserializerState as S;
12182 match state {
12183 S::Annotation(Some(deserializer)) => {
12184 self.store_annotation(deserializer.finish(reader)?)?
12185 }
12186 _ => (),
12187 }
12188 Ok(())
12189 }
12190 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
12191 if self.annotation.is_some() {
12192 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
12193 b"annotation",
12194 )))?;
12195 }
12196 self.annotation = Some(value);
12197 Ok(())
12198 }
12199 fn handle_annotation<'de, R>(
12200 &mut self,
12201 reader: &R,
12202 output: DeserializerOutput<'de, super::Annotation>,
12203 fallback: &mut Option<NotationDeserializerState>,
12204 ) -> Result<ElementHandlerOutput<'de>, Error>
12205 where
12206 R: DeserializeReader,
12207 {
12208 let DeserializerOutput {
12209 artifact,
12210 event,
12211 allow_any,
12212 } = output;
12213 if artifact.is_none() {
12214 fallback.get_or_insert(NotationDeserializerState::Annotation(None));
12215 *self.state = NotationDeserializerState::Done__;
12216 return Ok(ElementHandlerOutput::from_event(event, allow_any));
12217 }
12218 if let Some(fallback) = fallback.take() {
12219 self.finish_state(reader, fallback)?;
12220 }
12221 Ok(match artifact {
12222 DeserializerArtifact::None => unreachable!(),
12223 DeserializerArtifact::Data(data) => {
12224 self.store_annotation(data)?;
12225 *self.state = NotationDeserializerState::Done__;
12226 ElementHandlerOutput::from_event(event, allow_any)
12227 }
12228 DeserializerArtifact::Deserializer(deserializer) => {
12229 let ret = ElementHandlerOutput::from_event(event, allow_any);
12230 match &ret {
12231 ElementHandlerOutput::Continue { .. } => {
12232 fallback.get_or_insert(NotationDeserializerState::Annotation(Some(
12233 deserializer,
12234 )));
12235 *self.state = NotationDeserializerState::Done__;
12236 }
12237 ElementHandlerOutput::Break { .. } => {
12238 *self.state = NotationDeserializerState::Annotation(Some(deserializer));
12239 }
12240 }
12241 ret
12242 }
12243 })
12244 }
12245 }
12246 impl<'de> Deserializer<'de, super::Notation> for Box<NotationDeserializer> {
12247 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Notation>
12248 where
12249 R: DeserializeReader,
12250 {
12251 reader.init_deserializer_from_start_event(event, NotationDeserializer::from_bytes_start)
12252 }
12253 fn next<R>(
12254 mut self,
12255 reader: &R,
12256 event: Event<'de>,
12257 ) -> DeserializerResult<'de, super::Notation>
12258 where
12259 R: DeserializeReader,
12260 {
12261 use NotationDeserializerState as S;
12262 let mut event = event;
12263 let mut fallback = None;
12264 let mut allow_any_element = false;
12265 let (event, allow_any) = loop {
12266 let state = replace(&mut *self.state, S::Unknown__);
12267 event = match (state, event) {
12268 (S::Annotation(Some(deserializer)), event) => {
12269 let output = deserializer.next(reader, event)?;
12270 match self.handle_annotation(reader, output, &mut fallback)? {
12271 ElementHandlerOutput::Continue { event, allow_any } => {
12272 allow_any_element = allow_any_element || allow_any;
12273 event
12274 }
12275 ElementHandlerOutput::Break { event, allow_any } => {
12276 break (event, allow_any)
12277 }
12278 }
12279 }
12280 (_, Event::End(_)) => {
12281 if let Some(fallback) = fallback.take() {
12282 self.finish_state(reader, fallback)?;
12283 }
12284 return Ok(DeserializerOutput {
12285 artifact: DeserializerArtifact::Data(self.finish(reader)?),
12286 event: DeserializerEvent::None,
12287 allow_any: false,
12288 });
12289 }
12290 (S::Init__, event) => {
12291 fallback.get_or_insert(S::Init__);
12292 *self.state = NotationDeserializerState::Annotation(None);
12293 event
12294 }
12295 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
12296 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
12297 let output =
12298 <super::Annotation as WithDeserializer>::Deserializer::init(
12299 reader, event,
12300 )?;
12301 match self.handle_annotation(reader, output, &mut fallback)? {
12302 ElementHandlerOutput::Continue { event, allow_any } => {
12303 allow_any_element = allow_any_element || allow_any;
12304 event
12305 }
12306 ElementHandlerOutput::Break { event, allow_any } => {
12307 break (event, allow_any)
12308 }
12309 }
12310 } else {
12311 *self.state = S::Done__;
12312 allow_any_element = true;
12313 fallback.get_or_insert(S::Annotation(None));
12314 event
12315 }
12316 }
12317 (S::Done__, event) => {
12318 fallback.get_or_insert(S::Done__);
12319 break (DeserializerEvent::Continue(event), allow_any_element);
12320 }
12321 (S::Unknown__, _) => unreachable!(),
12322 (state, event) => {
12323 *self.state = state;
12324 break (DeserializerEvent::Break(event), false);
12325 }
12326 }
12327 };
12328 if let Some(fallback) = fallback {
12329 *self.state = fallback;
12330 }
12331 Ok(DeserializerOutput {
12332 artifact: DeserializerArtifact::Deserializer(self),
12333 event,
12334 allow_any,
12335 })
12336 }
12337 fn finish<R>(mut self, reader: &R) -> Result<super::Notation, Error>
12338 where
12339 R: DeserializeReader,
12340 {
12341 let state = replace(&mut *self.state, NotationDeserializerState::Unknown__);
12342 self.finish_state(reader, state)?;
12343 Ok(super::Notation {
12344 id: self.id,
12345 name: self.name,
12346 public: self.public,
12347 system: self.system,
12348 annotation: self.annotation,
12349 })
12350 }
12351 }
12352 #[derive(Debug)]
12353 pub struct AppinfoDeserializer {
12354 source: Option<String>,
12355 state: Box<AppinfoDeserializerState>,
12356 }
12357 #[derive(Debug)]
12358 enum AppinfoDeserializerState {
12359 Init__,
12360 Unknown__,
12361 }
12362 impl AppinfoDeserializer {
12363 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
12364 where
12365 R: DeserializeReader,
12366 {
12367 let mut source: Option<String> = None;
12368 for attrib in filter_xmlns_attributes(bytes_start) {
12369 let attrib = attrib?;
12370 if matches!(
12371 reader.resolve_local_name(attrib.key, &super::NS_XS),
12372 Some(b"source")
12373 ) {
12374 reader.read_attrib(&mut source, b"source", &attrib.value)?;
12375 }
12376 }
12377 Ok(Box::new(Self {
12378 source: source,
12379 state: Box::new(AppinfoDeserializerState::Init__),
12380 }))
12381 }
12382 fn finish_state<R>(
12383 &mut self,
12384 reader: &R,
12385 state: AppinfoDeserializerState,
12386 ) -> Result<(), Error>
12387 where
12388 R: DeserializeReader,
12389 {
12390 Ok(())
12391 }
12392 }
12393 impl<'de> Deserializer<'de, super::Appinfo> for Box<AppinfoDeserializer> {
12394 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Appinfo>
12395 where
12396 R: DeserializeReader,
12397 {
12398 reader.init_deserializer_from_start_event(event, AppinfoDeserializer::from_bytes_start)
12399 }
12400 fn next<R>(
12401 mut self,
12402 reader: &R,
12403 event: Event<'de>,
12404 ) -> DeserializerResult<'de, super::Appinfo>
12405 where
12406 R: DeserializeReader,
12407 {
12408 if let Event::End(_) = &event {
12409 Ok(DeserializerOutput {
12410 artifact: DeserializerArtifact::Data(self.finish(reader)?),
12411 event: DeserializerEvent::None,
12412 allow_any: false,
12413 })
12414 } else {
12415 Ok(DeserializerOutput {
12416 artifact: DeserializerArtifact::Deserializer(self),
12417 event: DeserializerEvent::Break(event),
12418 allow_any: true,
12419 })
12420 }
12421 }
12422 fn finish<R>(mut self, reader: &R) -> Result<super::Appinfo, Error>
12423 where
12424 R: DeserializeReader,
12425 {
12426 let state = replace(&mut *self.state, AppinfoDeserializerState::Unknown__);
12427 self.finish_state(reader, state)?;
12428 Ok(super::Appinfo {
12429 source: self.source,
12430 })
12431 }
12432 }
12433 #[derive(Debug)]
12434 pub struct DocumentationDeserializer {
12435 source: Option<String>,
12436 lang: Option<String>,
12437 state: Box<DocumentationDeserializerState>,
12438 }
12439 #[derive(Debug)]
12440 enum DocumentationDeserializerState {
12441 Init__,
12442 Unknown__,
12443 }
12444 impl DocumentationDeserializer {
12445 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
12446 where
12447 R: DeserializeReader,
12448 {
12449 let mut source: Option<String> = None;
12450 let mut lang: Option<String> = None;
12451 for attrib in filter_xmlns_attributes(bytes_start) {
12452 let attrib = attrib?;
12453 if matches!(
12454 reader.resolve_local_name(attrib.key, &super::NS_XS),
12455 Some(b"source")
12456 ) {
12457 reader.read_attrib(&mut source, b"source", &attrib.value)?;
12458 } else if matches!(
12459 reader.resolve_local_name(attrib.key, &super::NS_XML),
12460 Some(b"lang")
12461 ) {
12462 reader.read_attrib(&mut lang, b"lang", &attrib.value)?;
12463 }
12464 }
12465 Ok(Box::new(Self {
12466 source: source,
12467 lang: lang,
12468 state: Box::new(DocumentationDeserializerState::Init__),
12469 }))
12470 }
12471 fn finish_state<R>(
12472 &mut self,
12473 reader: &R,
12474 state: DocumentationDeserializerState,
12475 ) -> Result<(), Error>
12476 where
12477 R: DeserializeReader,
12478 {
12479 Ok(())
12480 }
12481 }
12482 impl<'de> Deserializer<'de, super::Documentation> for Box<DocumentationDeserializer> {
12483 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Documentation>
12484 where
12485 R: DeserializeReader,
12486 {
12487 reader.init_deserializer_from_start_event(
12488 event,
12489 DocumentationDeserializer::from_bytes_start,
12490 )
12491 }
12492 fn next<R>(
12493 mut self,
12494 reader: &R,
12495 event: Event<'de>,
12496 ) -> DeserializerResult<'de, super::Documentation>
12497 where
12498 R: DeserializeReader,
12499 {
12500 if let Event::End(_) = &event {
12501 Ok(DeserializerOutput {
12502 artifact: DeserializerArtifact::Data(self.finish(reader)?),
12503 event: DeserializerEvent::None,
12504 allow_any: false,
12505 })
12506 } else {
12507 Ok(DeserializerOutput {
12508 artifact: DeserializerArtifact::Deserializer(self),
12509 event: DeserializerEvent::Break(event),
12510 allow_any: true,
12511 })
12512 }
12513 }
12514 fn finish<R>(mut self, reader: &R) -> Result<super::Documentation, Error>
12515 where
12516 R: DeserializeReader,
12517 {
12518 let state = replace(&mut *self.state, DocumentationDeserializerState::Unknown__);
12519 self.finish_state(reader, state)?;
12520 Ok(super::Documentation {
12521 source: self.source,
12522 lang: self.lang,
12523 })
12524 }
12525 }
12526 #[derive(Debug)]
12527 pub struct WildcardTypeDeserializer {
12528 id: Option<String>,
12529 namespace: Option<super::NamespaceListType>,
12530 not_namespace: Option<super::BasicNamespaceListType>,
12531 process_contents: super::ProcessContentsType,
12532 annotation: Option<super::Annotation>,
12533 state: Box<WildcardTypeDeserializerState>,
12534 }
12535 #[derive(Debug)]
12536 enum WildcardTypeDeserializerState {
12537 Init__,
12538 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
12539 Done__,
12540 Unknown__,
12541 }
12542 impl WildcardTypeDeserializer {
12543 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
12544 where
12545 R: DeserializeReader,
12546 {
12547 let mut id: Option<String> = None;
12548 let mut namespace: Option<super::NamespaceListType> = None;
12549 let mut not_namespace: Option<super::BasicNamespaceListType> = None;
12550 let mut process_contents: Option<super::ProcessContentsType> = None;
12551 for attrib in filter_xmlns_attributes(bytes_start) {
12552 let attrib = attrib?;
12553 if matches!(
12554 reader.resolve_local_name(attrib.key, &super::NS_XS),
12555 Some(b"id")
12556 ) {
12557 reader.read_attrib(&mut id, b"id", &attrib.value)?;
12558 } else if matches!(
12559 reader.resolve_local_name(attrib.key, &super::NS_XS),
12560 Some(b"namespace")
12561 ) {
12562 reader.read_attrib(&mut namespace, b"namespace", &attrib.value)?;
12563 } else if matches!(
12564 reader.resolve_local_name(attrib.key, &super::NS_XS),
12565 Some(b"notNamespace")
12566 ) {
12567 reader.read_attrib(&mut not_namespace, b"notNamespace", &attrib.value)?;
12568 } else if matches!(
12569 reader.resolve_local_name(attrib.key, &super::NS_XS),
12570 Some(b"processContents")
12571 ) {
12572 reader.read_attrib(&mut process_contents, b"processContents", &attrib.value)?;
12573 }
12574 }
12575 Ok(Box::new(Self {
12576 id: id,
12577 namespace: namespace,
12578 not_namespace: not_namespace,
12579 process_contents: process_contents
12580 .unwrap_or_else(super::WildcardType::default_process_contents),
12581 annotation: None,
12582 state: Box::new(WildcardTypeDeserializerState::Init__),
12583 }))
12584 }
12585 fn finish_state<R>(
12586 &mut self,
12587 reader: &R,
12588 state: WildcardTypeDeserializerState,
12589 ) -> Result<(), Error>
12590 where
12591 R: DeserializeReader,
12592 {
12593 use WildcardTypeDeserializerState as S;
12594 match state {
12595 S::Annotation(Some(deserializer)) => {
12596 self.store_annotation(deserializer.finish(reader)?)?
12597 }
12598 _ => (),
12599 }
12600 Ok(())
12601 }
12602 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
12603 if self.annotation.is_some() {
12604 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
12605 b"annotation",
12606 )))?;
12607 }
12608 self.annotation = Some(value);
12609 Ok(())
12610 }
12611 fn handle_annotation<'de, R>(
12612 &mut self,
12613 reader: &R,
12614 output: DeserializerOutput<'de, super::Annotation>,
12615 fallback: &mut Option<WildcardTypeDeserializerState>,
12616 ) -> Result<ElementHandlerOutput<'de>, Error>
12617 where
12618 R: DeserializeReader,
12619 {
12620 let DeserializerOutput {
12621 artifact,
12622 event,
12623 allow_any,
12624 } = output;
12625 if artifact.is_none() {
12626 fallback.get_or_insert(WildcardTypeDeserializerState::Annotation(None));
12627 *self.state = WildcardTypeDeserializerState::Done__;
12628 return Ok(ElementHandlerOutput::from_event(event, allow_any));
12629 }
12630 if let Some(fallback) = fallback.take() {
12631 self.finish_state(reader, fallback)?;
12632 }
12633 Ok(match artifact {
12634 DeserializerArtifact::None => unreachable!(),
12635 DeserializerArtifact::Data(data) => {
12636 self.store_annotation(data)?;
12637 *self.state = WildcardTypeDeserializerState::Done__;
12638 ElementHandlerOutput::from_event(event, allow_any)
12639 }
12640 DeserializerArtifact::Deserializer(deserializer) => {
12641 let ret = ElementHandlerOutput::from_event(event, allow_any);
12642 match &ret {
12643 ElementHandlerOutput::Continue { .. } => {
12644 fallback.get_or_insert(WildcardTypeDeserializerState::Annotation(
12645 Some(deserializer),
12646 ));
12647 *self.state = WildcardTypeDeserializerState::Done__;
12648 }
12649 ElementHandlerOutput::Break { .. } => {
12650 *self.state =
12651 WildcardTypeDeserializerState::Annotation(Some(deserializer));
12652 }
12653 }
12654 ret
12655 }
12656 })
12657 }
12658 }
12659 impl<'de> Deserializer<'de, super::WildcardType> for Box<WildcardTypeDeserializer> {
12660 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::WildcardType>
12661 where
12662 R: DeserializeReader,
12663 {
12664 reader.init_deserializer_from_start_event(
12665 event,
12666 WildcardTypeDeserializer::from_bytes_start,
12667 )
12668 }
12669 fn next<R>(
12670 mut self,
12671 reader: &R,
12672 event: Event<'de>,
12673 ) -> DeserializerResult<'de, super::WildcardType>
12674 where
12675 R: DeserializeReader,
12676 {
12677 use WildcardTypeDeserializerState as S;
12678 let mut event = event;
12679 let mut fallback = None;
12680 let mut allow_any_element = false;
12681 let (event, allow_any) = loop {
12682 let state = replace(&mut *self.state, S::Unknown__);
12683 event = match (state, event) {
12684 (S::Annotation(Some(deserializer)), event) => {
12685 let output = deserializer.next(reader, event)?;
12686 match self.handle_annotation(reader, output, &mut fallback)? {
12687 ElementHandlerOutput::Continue { event, allow_any } => {
12688 allow_any_element = allow_any_element || allow_any;
12689 event
12690 }
12691 ElementHandlerOutput::Break { event, allow_any } => {
12692 break (event, allow_any)
12693 }
12694 }
12695 }
12696 (_, Event::End(_)) => {
12697 if let Some(fallback) = fallback.take() {
12698 self.finish_state(reader, fallback)?;
12699 }
12700 return Ok(DeserializerOutput {
12701 artifact: DeserializerArtifact::Data(self.finish(reader)?),
12702 event: DeserializerEvent::None,
12703 allow_any: false,
12704 });
12705 }
12706 (S::Init__, event) => {
12707 fallback.get_or_insert(S::Init__);
12708 *self.state = WildcardTypeDeserializerState::Annotation(None);
12709 event
12710 }
12711 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
12712 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
12713 let output =
12714 <super::Annotation as WithDeserializer>::Deserializer::init(
12715 reader, event,
12716 )?;
12717 match self.handle_annotation(reader, output, &mut fallback)? {
12718 ElementHandlerOutput::Continue { event, allow_any } => {
12719 allow_any_element = allow_any_element || allow_any;
12720 event
12721 }
12722 ElementHandlerOutput::Break { event, allow_any } => {
12723 break (event, allow_any)
12724 }
12725 }
12726 } else {
12727 *self.state = S::Done__;
12728 allow_any_element = true;
12729 fallback.get_or_insert(S::Annotation(None));
12730 event
12731 }
12732 }
12733 (S::Done__, event) => {
12734 fallback.get_or_insert(S::Done__);
12735 break (DeserializerEvent::Continue(event), allow_any_element);
12736 }
12737 (S::Unknown__, _) => unreachable!(),
12738 (state, event) => {
12739 *self.state = state;
12740 break (DeserializerEvent::Break(event), false);
12741 }
12742 }
12743 };
12744 if let Some(fallback) = fallback {
12745 *self.state = fallback;
12746 }
12747 Ok(DeserializerOutput {
12748 artifact: DeserializerArtifact::Deserializer(self),
12749 event,
12750 allow_any,
12751 })
12752 }
12753 fn finish<R>(mut self, reader: &R) -> Result<super::WildcardType, Error>
12754 where
12755 R: DeserializeReader,
12756 {
12757 let state = replace(&mut *self.state, WildcardTypeDeserializerState::Unknown__);
12758 self.finish_state(reader, state)?;
12759 Ok(super::WildcardType {
12760 id: self.id,
12761 namespace: self.namespace,
12762 not_namespace: self.not_namespace,
12763 process_contents: self.process_contents,
12764 annotation: self.annotation,
12765 })
12766 }
12767 }
12768 #[derive(Debug)]
12769 pub struct RestrictionDeserializer {
12770 id: Option<String>,
12771 base: Option<super::QName>,
12772 content: Vec<super::RestrictionContent>,
12773 state: Box<RestrictionDeserializerState>,
12774 }
12775 #[derive(Debug)]
12776 enum RestrictionDeserializerState {
12777 Init__,
12778 Next__,
12779 Content__(<super::RestrictionContent as WithDeserializer>::Deserializer),
12780 Unknown__,
12781 }
12782 impl RestrictionDeserializer {
12783 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
12784 where
12785 R: DeserializeReader,
12786 {
12787 let mut id: Option<String> = None;
12788 let mut base: Option<super::QName> = None;
12789 for attrib in filter_xmlns_attributes(bytes_start) {
12790 let attrib = attrib?;
12791 if matches!(
12792 reader.resolve_local_name(attrib.key, &super::NS_XS),
12793 Some(b"id")
12794 ) {
12795 reader.read_attrib(&mut id, b"id", &attrib.value)?;
12796 } else if matches!(
12797 reader.resolve_local_name(attrib.key, &super::NS_XS),
12798 Some(b"base")
12799 ) {
12800 reader.read_attrib(&mut base, b"base", &attrib.value)?;
12801 }
12802 }
12803 Ok(Box::new(Self {
12804 id: id,
12805 base: base,
12806 content: Vec::new(),
12807 state: Box::new(RestrictionDeserializerState::Init__),
12808 }))
12809 }
12810 fn finish_state<R>(
12811 &mut self,
12812 reader: &R,
12813 state: RestrictionDeserializerState,
12814 ) -> Result<(), Error>
12815 where
12816 R: DeserializeReader,
12817 {
12818 if let RestrictionDeserializerState::Content__(deserializer) = state {
12819 self.store_content(deserializer.finish(reader)?)?;
12820 }
12821 Ok(())
12822 }
12823 fn store_content(&mut self, value: super::RestrictionContent) -> Result<(), Error> {
12824 self.content.push(value);
12825 Ok(())
12826 }
12827 fn handle_content<'de, R>(
12828 &mut self,
12829 reader: &R,
12830 output: DeserializerOutput<'de, super::RestrictionContent>,
12831 fallback: &mut Option<RestrictionDeserializerState>,
12832 ) -> Result<ElementHandlerOutput<'de>, Error>
12833 where
12834 R: DeserializeReader,
12835 {
12836 let DeserializerOutput {
12837 artifact,
12838 event,
12839 allow_any,
12840 } = output;
12841 if artifact.is_none() {
12842 *self.state = fallback
12843 .take()
12844 .unwrap_or(RestrictionDeserializerState::Next__);
12845 return Ok(ElementHandlerOutput::break_(event, allow_any));
12846 }
12847 if let Some(fallback) = fallback.take() {
12848 self.finish_state(reader, fallback)?;
12849 }
12850 Ok(match artifact {
12851 DeserializerArtifact::None => unreachable!(),
12852 DeserializerArtifact::Data(data) => {
12853 self.store_content(data)?;
12854 *self.state = RestrictionDeserializerState::Next__;
12855 ElementHandlerOutput::from_event(event, allow_any)
12856 }
12857 DeserializerArtifact::Deserializer(deserializer) => {
12858 let ret = ElementHandlerOutput::from_event(event, allow_any);
12859 match &ret {
12860 ElementHandlerOutput::Break { .. } => {
12861 *self.state = RestrictionDeserializerState::Content__(deserializer);
12862 }
12863 ElementHandlerOutput::Continue { .. } => {
12864 fallback.get_or_insert(RestrictionDeserializerState::Content__(
12865 deserializer,
12866 ));
12867 *self.state = RestrictionDeserializerState::Next__;
12868 }
12869 }
12870 ret
12871 }
12872 })
12873 }
12874 }
12875 impl<'de> Deserializer<'de, super::Restriction> for Box<RestrictionDeserializer> {
12876 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Restriction>
12877 where
12878 R: DeserializeReader,
12879 {
12880 reader.init_deserializer_from_start_event(
12881 event,
12882 RestrictionDeserializer::from_bytes_start,
12883 )
12884 }
12885 fn next<R>(
12886 mut self,
12887 reader: &R,
12888 event: Event<'de>,
12889 ) -> DeserializerResult<'de, super::Restriction>
12890 where
12891 R: DeserializeReader,
12892 {
12893 use RestrictionDeserializerState as S;
12894 let mut event = event;
12895 let mut fallback = None;
12896 let (event, allow_any) = loop {
12897 let state = replace(&mut *self.state, S::Unknown__);
12898 event = match (state, event) {
12899 (S::Content__(deserializer), event) => {
12900 let output = deserializer.next(reader, event)?;
12901 match self.handle_content(reader, output, &mut fallback)? {
12902 ElementHandlerOutput::Break { event, allow_any } => {
12903 break (event, allow_any)
12904 }
12905 ElementHandlerOutput::Continue { event, .. } => event,
12906 }
12907 }
12908 (_, Event::End(_)) => {
12909 return Ok(DeserializerOutput {
12910 artifact: DeserializerArtifact::Data(self.finish(reader)?),
12911 event: DeserializerEvent::None,
12912 allow_any: false,
12913 });
12914 }
12915 (state @ (S::Init__ | S::Next__), event) => {
12916 fallback.get_or_insert(state);
12917 let output =
12918 <super::RestrictionContent as WithDeserializer>::Deserializer::init(
12919 reader, event,
12920 )?;
12921 match self.handle_content(reader, output, &mut fallback)? {
12922 ElementHandlerOutput::Break { event, allow_any } => {
12923 break (event, allow_any)
12924 }
12925 ElementHandlerOutput::Continue { event, .. } => event,
12926 }
12927 }
12928 (S::Unknown__, _) => unreachable!(),
12929 }
12930 };
12931 let artifact = DeserializerArtifact::Deserializer(self);
12932 Ok(DeserializerOutput {
12933 artifact,
12934 event,
12935 allow_any,
12936 })
12937 }
12938 fn finish<R>(mut self, reader: &R) -> Result<super::Restriction, Error>
12939 where
12940 R: DeserializeReader,
12941 {
12942 let state = replace(&mut *self.state, RestrictionDeserializerState::Unknown__);
12943 self.finish_state(reader, state)?;
12944 Ok(super::Restriction {
12945 id: self.id,
12946 base: self.base,
12947 content: self.content,
12948 })
12949 }
12950 }
12951 #[derive(Debug)]
12952 pub struct RestrictionContentDeserializer {
12953 state: Box<RestrictionContentDeserializerState>,
12954 }
12955 #[derive(Debug)]
12956 pub enum RestrictionContentDeserializerState {
12957 Init__,
12958 Annotation(
12959 Option<super::Annotation>,
12960 Option<<super::Annotation as WithDeserializer>::Deserializer>,
12961 ),
12962 SimpleType(
12963 Option<super::SimpleBaseType>,
12964 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
12965 ),
12966 Facet(
12967 Option<super::Facet>,
12968 Option<<super::Facet as WithDeserializer>::Deserializer>,
12969 ),
12970 Done__(super::RestrictionContent),
12971 Unknown__,
12972 }
12973 impl RestrictionContentDeserializer {
12974 fn find_suitable<'de, R>(
12975 &mut self,
12976 reader: &R,
12977 event: Event<'de>,
12978 fallback: &mut Option<RestrictionContentDeserializerState>,
12979 ) -> Result<ElementHandlerOutput<'de>, Error>
12980 where
12981 R: DeserializeReader,
12982 {
12983 let (Event::Start(x) | Event::Empty(x)) = &event else {
12984 *self.state = fallback
12985 .take()
12986 .unwrap_or(RestrictionContentDeserializerState::Init__);
12987 return Ok(ElementHandlerOutput::return_to_parent(event, true));
12988 };
12989 if matches!(
12990 reader.resolve_local_name(x.name(), &super::NS_XS),
12991 Some(b"annotation")
12992 ) {
12993 let output =
12994 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
12995 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
12996 }
12997 if matches!(
12998 reader.resolve_local_name(x.name(), &super::NS_XS),
12999 Some(b"simpleType")
13000 ) {
13001 let output =
13002 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(reader, event)?;
13003 return self.handle_simple_type(reader, Default::default(), output, &mut *fallback);
13004 }
13005 let event = {
13006 let output = <super::Facet as WithDeserializer>::Deserializer::init(reader, event)?;
13007 match self.handle_facet(reader, Default::default(), output, &mut *fallback)? {
13008 ElementHandlerOutput::Continue { event, .. } => event,
13009 output => {
13010 return Ok(output);
13011 }
13012 }
13013 };
13014 *self.state = fallback
13015 .take()
13016 .unwrap_or(RestrictionContentDeserializerState::Init__);
13017 Ok(ElementHandlerOutput::return_to_parent(event, true))
13018 }
13019 fn finish_state<R>(
13020 reader: &R,
13021 state: RestrictionContentDeserializerState,
13022 ) -> Result<super::RestrictionContent, Error>
13023 where
13024 R: DeserializeReader,
13025 {
13026 use RestrictionContentDeserializerState as S;
13027 match state {
13028 S::Init__ => Err(ErrorKind::MissingContent.into()),
13029 S::Annotation(mut values, deserializer) => {
13030 if let Some(deserializer) = deserializer {
13031 let value = deserializer.finish(reader)?;
13032 RestrictionContentDeserializer::store_annotation(&mut values, value)?;
13033 }
13034 Ok(super::RestrictionContent::Annotation(values.ok_or_else(
13035 || ErrorKind::MissingElement("annotation".into()),
13036 )?))
13037 }
13038 S::SimpleType(mut values, deserializer) => {
13039 if let Some(deserializer) = deserializer {
13040 let value = deserializer.finish(reader)?;
13041 RestrictionContentDeserializer::store_simple_type(&mut values, value)?;
13042 }
13043 Ok(super::RestrictionContent::SimpleType(values.ok_or_else(
13044 || ErrorKind::MissingElement("simpleType".into()),
13045 )?))
13046 }
13047 S::Facet(mut values, deserializer) => {
13048 if let Some(deserializer) = deserializer {
13049 let value = deserializer.finish(reader)?;
13050 RestrictionContentDeserializer::store_facet(&mut values, value)?;
13051 }
13052 Ok(super::RestrictionContent::Facet(values.ok_or_else(
13053 || ErrorKind::MissingElement("facet".into()),
13054 )?))
13055 }
13056 S::Done__(data) => Ok(data),
13057 S::Unknown__ => unreachable!(),
13058 }
13059 }
13060 fn store_annotation(
13061 values: &mut Option<super::Annotation>,
13062 value: super::Annotation,
13063 ) -> Result<(), Error> {
13064 if values.is_some() {
13065 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
13066 b"annotation",
13067 )))?;
13068 }
13069 *values = Some(value);
13070 Ok(())
13071 }
13072 fn store_simple_type(
13073 values: &mut Option<super::SimpleBaseType>,
13074 value: super::SimpleBaseType,
13075 ) -> Result<(), Error> {
13076 if values.is_some() {
13077 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
13078 b"simpleType",
13079 )))?;
13080 }
13081 *values = Some(value);
13082 Ok(())
13083 }
13084 fn store_facet(
13085 values: &mut Option<super::Facet>,
13086 value: super::Facet,
13087 ) -> Result<(), Error> {
13088 if values.is_some() {
13089 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
13090 b"facet",
13091 )))?;
13092 }
13093 *values = Some(value);
13094 Ok(())
13095 }
13096 fn handle_annotation<'de, R>(
13097 &mut self,
13098 reader: &R,
13099 mut values: Option<super::Annotation>,
13100 output: DeserializerOutput<'de, super::Annotation>,
13101 fallback: &mut Option<RestrictionContentDeserializerState>,
13102 ) -> Result<ElementHandlerOutput<'de>, Error>
13103 where
13104 R: DeserializeReader,
13105 {
13106 let DeserializerOutput {
13107 artifact,
13108 event,
13109 allow_any,
13110 } = output;
13111 if artifact.is_none() {
13112 *self.state = match fallback.take() {
13113 None => RestrictionContentDeserializerState::Init__,
13114 Some(RestrictionContentDeserializerState::Annotation(
13115 _,
13116 Some(deserializer),
13117 )) => {
13118 RestrictionContentDeserializerState::Annotation(values, Some(deserializer))
13119 }
13120 _ => unreachable!(),
13121 };
13122 return Ok(ElementHandlerOutput::break_(event, allow_any));
13123 }
13124 match fallback.take() {
13125 None => (),
13126 Some(RestrictionContentDeserializerState::Annotation(_, Some(deserializer))) => {
13127 let data = deserializer.finish(reader)?;
13128 RestrictionContentDeserializer::store_annotation(&mut values, data)?;
13129 }
13130 Some(_) => unreachable!(),
13131 }
13132 Ok(match artifact {
13133 DeserializerArtifact::None => unreachable!(),
13134 DeserializerArtifact::Data(data) => {
13135 RestrictionContentDeserializer::store_annotation(&mut values, data)?;
13136 let data = RestrictionContentDeserializer::finish_state(
13137 reader,
13138 RestrictionContentDeserializerState::Annotation(values, None),
13139 )?;
13140 *self.state = RestrictionContentDeserializerState::Done__(data);
13141 ElementHandlerOutput::Break { event, allow_any }
13142 }
13143 DeserializerArtifact::Deserializer(deserializer) => {
13144 *self.state =
13145 RestrictionContentDeserializerState::Annotation(values, Some(deserializer));
13146 ElementHandlerOutput::from_event_end(event, allow_any)
13147 }
13148 })
13149 }
13150 fn handle_simple_type<'de, R>(
13151 &mut self,
13152 reader: &R,
13153 mut values: Option<super::SimpleBaseType>,
13154 output: DeserializerOutput<'de, super::SimpleBaseType>,
13155 fallback: &mut Option<RestrictionContentDeserializerState>,
13156 ) -> Result<ElementHandlerOutput<'de>, Error>
13157 where
13158 R: DeserializeReader,
13159 {
13160 let DeserializerOutput {
13161 artifact,
13162 event,
13163 allow_any,
13164 } = output;
13165 if artifact.is_none() {
13166 *self.state = match fallback.take() {
13167 None => RestrictionContentDeserializerState::Init__,
13168 Some(RestrictionContentDeserializerState::SimpleType(
13169 _,
13170 Some(deserializer),
13171 )) => {
13172 RestrictionContentDeserializerState::SimpleType(values, Some(deserializer))
13173 }
13174 _ => unreachable!(),
13175 };
13176 return Ok(ElementHandlerOutput::break_(event, allow_any));
13177 }
13178 match fallback.take() {
13179 None => (),
13180 Some(RestrictionContentDeserializerState::SimpleType(_, Some(deserializer))) => {
13181 let data = deserializer.finish(reader)?;
13182 RestrictionContentDeserializer::store_simple_type(&mut values, data)?;
13183 }
13184 Some(_) => unreachable!(),
13185 }
13186 Ok(match artifact {
13187 DeserializerArtifact::None => unreachable!(),
13188 DeserializerArtifact::Data(data) => {
13189 RestrictionContentDeserializer::store_simple_type(&mut values, data)?;
13190 let data = RestrictionContentDeserializer::finish_state(
13191 reader,
13192 RestrictionContentDeserializerState::SimpleType(values, None),
13193 )?;
13194 *self.state = RestrictionContentDeserializerState::Done__(data);
13195 ElementHandlerOutput::Break { event, allow_any }
13196 }
13197 DeserializerArtifact::Deserializer(deserializer) => {
13198 *self.state =
13199 RestrictionContentDeserializerState::SimpleType(values, Some(deserializer));
13200 ElementHandlerOutput::from_event_end(event, allow_any)
13201 }
13202 })
13203 }
13204 fn handle_facet<'de, R>(
13205 &mut self,
13206 reader: &R,
13207 mut values: Option<super::Facet>,
13208 output: DeserializerOutput<'de, super::Facet>,
13209 fallback: &mut Option<RestrictionContentDeserializerState>,
13210 ) -> Result<ElementHandlerOutput<'de>, Error>
13211 where
13212 R: DeserializeReader,
13213 {
13214 let DeserializerOutput {
13215 artifact,
13216 event,
13217 allow_any,
13218 } = output;
13219 if artifact.is_none() {
13220 *self.state = match fallback.take() {
13221 None => RestrictionContentDeserializerState::Init__,
13222 Some(RestrictionContentDeserializerState::Facet(_, Some(deserializer))) => {
13223 RestrictionContentDeserializerState::Facet(values, Some(deserializer))
13224 }
13225 _ => unreachable!(),
13226 };
13227 return Ok(ElementHandlerOutput::break_(event, allow_any));
13228 }
13229 match fallback.take() {
13230 None => (),
13231 Some(RestrictionContentDeserializerState::Facet(_, Some(deserializer))) => {
13232 let data = deserializer.finish(reader)?;
13233 RestrictionContentDeserializer::store_facet(&mut values, data)?;
13234 }
13235 Some(_) => unreachable!(),
13236 }
13237 Ok(match artifact {
13238 DeserializerArtifact::None => unreachable!(),
13239 DeserializerArtifact::Data(data) => {
13240 RestrictionContentDeserializer::store_facet(&mut values, data)?;
13241 let data = RestrictionContentDeserializer::finish_state(
13242 reader,
13243 RestrictionContentDeserializerState::Facet(values, None),
13244 )?;
13245 *self.state = RestrictionContentDeserializerState::Done__(data);
13246 ElementHandlerOutput::Break { event, allow_any }
13247 }
13248 DeserializerArtifact::Deserializer(deserializer) => {
13249 *self.state =
13250 RestrictionContentDeserializerState::Facet(values, Some(deserializer));
13251 ElementHandlerOutput::from_event_end(event, allow_any)
13252 }
13253 })
13254 }
13255 }
13256 impl<'de> Deserializer<'de, super::RestrictionContent> for Box<RestrictionContentDeserializer> {
13257 fn init<R>(
13258 reader: &R,
13259 event: Event<'de>,
13260 ) -> DeserializerResult<'de, super::RestrictionContent>
13261 where
13262 R: DeserializeReader,
13263 {
13264 let deserializer = Box::new(RestrictionContentDeserializer {
13265 state: Box::new(RestrictionContentDeserializerState::Init__),
13266 });
13267 let mut output = deserializer.next(reader, event)?;
13268 output.artifact = match output.artifact {
13269 DeserializerArtifact::Deserializer(x)
13270 if matches!(&*x.state, RestrictionContentDeserializerState::Init__) =>
13271 {
13272 DeserializerArtifact::None
13273 }
13274 artifact => artifact,
13275 };
13276 Ok(output)
13277 }
13278 fn next<R>(
13279 mut self,
13280 reader: &R,
13281 event: Event<'de>,
13282 ) -> DeserializerResult<'de, super::RestrictionContent>
13283 where
13284 R: DeserializeReader,
13285 {
13286 use RestrictionContentDeserializerState as S;
13287 let mut event = event;
13288 let mut fallback = None;
13289 let (event, allow_any) = loop {
13290 let state = replace(&mut *self.state, S::Unknown__);
13291 event = match (state, event) {
13292 (S::Annotation(values, Some(deserializer)), event) => {
13293 let output = deserializer.next(reader, event)?;
13294 match self.handle_annotation(reader, values, output, &mut fallback)? {
13295 ElementHandlerOutput::Break { event, allow_any } => {
13296 break (event, allow_any)
13297 }
13298 ElementHandlerOutput::Continue { event, .. } => event,
13299 }
13300 }
13301 (S::SimpleType(values, Some(deserializer)), event) => {
13302 let output = deserializer.next(reader, event)?;
13303 match self.handle_simple_type(reader, values, output, &mut fallback)? {
13304 ElementHandlerOutput::Break { event, allow_any } => {
13305 break (event, allow_any)
13306 }
13307 ElementHandlerOutput::Continue { event, .. } => event,
13308 }
13309 }
13310 (S::Facet(values, Some(deserializer)), event) => {
13311 let output = deserializer.next(reader, event)?;
13312 match self.handle_facet(reader, values, output, &mut fallback)? {
13313 ElementHandlerOutput::Break { event, allow_any } => {
13314 break (event, allow_any)
13315 }
13316 ElementHandlerOutput::Continue { event, .. } => event,
13317 }
13318 }
13319 (state, event @ Event::End(_)) => {
13320 return Ok(DeserializerOutput {
13321 artifact: DeserializerArtifact::Data(
13322 RestrictionContentDeserializer::finish_state(reader, state)?,
13323 ),
13324 event: DeserializerEvent::Continue(event),
13325 allow_any: false,
13326 });
13327 }
13328 (S::Init__, event) => match self.find_suitable(reader, event, &mut fallback)? {
13329 ElementHandlerOutput::Break { event, allow_any } => {
13330 break (event, allow_any)
13331 }
13332 ElementHandlerOutput::Continue { event, .. } => event,
13333 },
13334 (S::Annotation(values, None), event) => {
13335 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
13336 reader, event,
13337 )?;
13338 match self.handle_annotation(reader, values, output, &mut fallback)? {
13339 ElementHandlerOutput::Break { event, allow_any } => {
13340 break (event, allow_any)
13341 }
13342 ElementHandlerOutput::Continue { event, .. } => event,
13343 }
13344 }
13345 (S::SimpleType(values, None), event) => {
13346 let output =
13347 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
13348 reader, event,
13349 )?;
13350 match self.handle_simple_type(reader, values, output, &mut fallback)? {
13351 ElementHandlerOutput::Break { event, allow_any } => {
13352 break (event, allow_any)
13353 }
13354 ElementHandlerOutput::Continue { event, .. } => event,
13355 }
13356 }
13357 (S::Facet(values, None), event) => {
13358 let output =
13359 <super::Facet as WithDeserializer>::Deserializer::init(reader, event)?;
13360 match self.handle_facet(reader, values, output, &mut fallback)? {
13361 ElementHandlerOutput::Break { event, allow_any } => {
13362 break (event, allow_any)
13363 }
13364 ElementHandlerOutput::Continue { event, .. } => event,
13365 }
13366 }
13367 (s @ S::Done__(_), event) => {
13368 *self.state = s;
13369 break (DeserializerEvent::Continue(event), false);
13370 }
13371 (S::Unknown__, _) => unreachable!(),
13372 }
13373 };
13374 let artifact = if matches!(&*self.state, S::Done__(_)) {
13375 DeserializerArtifact::Data(self.finish(reader)?)
13376 } else {
13377 DeserializerArtifact::Deserializer(self)
13378 };
13379 Ok(DeserializerOutput {
13380 artifact,
13381 event,
13382 allow_any,
13383 })
13384 }
13385 fn finish<R>(self, reader: &R) -> Result<super::RestrictionContent, Error>
13386 where
13387 R: DeserializeReader,
13388 {
13389 RestrictionContentDeserializer::finish_state(reader, *self.state)
13390 }
13391 }
13392 #[derive(Debug)]
13393 pub struct ListDeserializer {
13394 id: Option<String>,
13395 item_type: Option<super::QName>,
13396 annotation: Option<super::Annotation>,
13397 simple_type: Option<super::SimpleBaseType>,
13398 state: Box<ListDeserializerState>,
13399 }
13400 #[derive(Debug)]
13401 enum ListDeserializerState {
13402 Init__,
13403 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
13404 SimpleType(Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>),
13405 Done__,
13406 Unknown__,
13407 }
13408 impl ListDeserializer {
13409 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
13410 where
13411 R: DeserializeReader,
13412 {
13413 let mut id: Option<String> = None;
13414 let mut item_type: Option<super::QName> = None;
13415 for attrib in filter_xmlns_attributes(bytes_start) {
13416 let attrib = attrib?;
13417 if matches!(
13418 reader.resolve_local_name(attrib.key, &super::NS_XS),
13419 Some(b"id")
13420 ) {
13421 reader.read_attrib(&mut id, b"id", &attrib.value)?;
13422 } else if matches!(
13423 reader.resolve_local_name(attrib.key, &super::NS_XS),
13424 Some(b"itemType")
13425 ) {
13426 reader.read_attrib(&mut item_type, b"itemType", &attrib.value)?;
13427 }
13428 }
13429 Ok(Box::new(Self {
13430 id: id,
13431 item_type: item_type,
13432 annotation: None,
13433 simple_type: None,
13434 state: Box::new(ListDeserializerState::Init__),
13435 }))
13436 }
13437 fn finish_state<R>(&mut self, reader: &R, state: ListDeserializerState) -> Result<(), Error>
13438 where
13439 R: DeserializeReader,
13440 {
13441 use ListDeserializerState as S;
13442 match state {
13443 S::Annotation(Some(deserializer)) => {
13444 self.store_annotation(deserializer.finish(reader)?)?
13445 }
13446 S::SimpleType(Some(deserializer)) => {
13447 self.store_simple_type(deserializer.finish(reader)?)?
13448 }
13449 _ => (),
13450 }
13451 Ok(())
13452 }
13453 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
13454 if self.annotation.is_some() {
13455 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
13456 b"annotation",
13457 )))?;
13458 }
13459 self.annotation = Some(value);
13460 Ok(())
13461 }
13462 fn store_simple_type(&mut self, value: super::SimpleBaseType) -> Result<(), Error> {
13463 if self.simple_type.is_some() {
13464 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
13465 b"simpleType",
13466 )))?;
13467 }
13468 self.simple_type = Some(value);
13469 Ok(())
13470 }
13471 fn handle_annotation<'de, R>(
13472 &mut self,
13473 reader: &R,
13474 output: DeserializerOutput<'de, super::Annotation>,
13475 fallback: &mut Option<ListDeserializerState>,
13476 ) -> Result<ElementHandlerOutput<'de>, Error>
13477 where
13478 R: DeserializeReader,
13479 {
13480 let DeserializerOutput {
13481 artifact,
13482 event,
13483 allow_any,
13484 } = output;
13485 if artifact.is_none() {
13486 fallback.get_or_insert(ListDeserializerState::Annotation(None));
13487 *self.state = ListDeserializerState::SimpleType(None);
13488 return Ok(ElementHandlerOutput::from_event(event, allow_any));
13489 }
13490 if let Some(fallback) = fallback.take() {
13491 self.finish_state(reader, fallback)?;
13492 }
13493 Ok(match artifact {
13494 DeserializerArtifact::None => unreachable!(),
13495 DeserializerArtifact::Data(data) => {
13496 self.store_annotation(data)?;
13497 *self.state = ListDeserializerState::SimpleType(None);
13498 ElementHandlerOutput::from_event(event, allow_any)
13499 }
13500 DeserializerArtifact::Deserializer(deserializer) => {
13501 let ret = ElementHandlerOutput::from_event(event, allow_any);
13502 match &ret {
13503 ElementHandlerOutput::Continue { .. } => {
13504 fallback.get_or_insert(ListDeserializerState::Annotation(Some(
13505 deserializer,
13506 )));
13507 *self.state = ListDeserializerState::SimpleType(None);
13508 }
13509 ElementHandlerOutput::Break { .. } => {
13510 *self.state = ListDeserializerState::Annotation(Some(deserializer));
13511 }
13512 }
13513 ret
13514 }
13515 })
13516 }
13517 fn handle_simple_type<'de, R>(
13518 &mut self,
13519 reader: &R,
13520 output: DeserializerOutput<'de, super::SimpleBaseType>,
13521 fallback: &mut Option<ListDeserializerState>,
13522 ) -> Result<ElementHandlerOutput<'de>, Error>
13523 where
13524 R: DeserializeReader,
13525 {
13526 let DeserializerOutput {
13527 artifact,
13528 event,
13529 allow_any,
13530 } = output;
13531 if artifact.is_none() {
13532 fallback.get_or_insert(ListDeserializerState::SimpleType(None));
13533 *self.state = ListDeserializerState::Done__;
13534 return Ok(ElementHandlerOutput::from_event(event, allow_any));
13535 }
13536 if let Some(fallback) = fallback.take() {
13537 self.finish_state(reader, fallback)?;
13538 }
13539 Ok(match artifact {
13540 DeserializerArtifact::None => unreachable!(),
13541 DeserializerArtifact::Data(data) => {
13542 self.store_simple_type(data)?;
13543 *self.state = ListDeserializerState::Done__;
13544 ElementHandlerOutput::from_event(event, allow_any)
13545 }
13546 DeserializerArtifact::Deserializer(deserializer) => {
13547 let ret = ElementHandlerOutput::from_event(event, allow_any);
13548 match &ret {
13549 ElementHandlerOutput::Continue { .. } => {
13550 fallback.get_or_insert(ListDeserializerState::SimpleType(Some(
13551 deserializer,
13552 )));
13553 *self.state = ListDeserializerState::Done__;
13554 }
13555 ElementHandlerOutput::Break { .. } => {
13556 *self.state = ListDeserializerState::SimpleType(Some(deserializer));
13557 }
13558 }
13559 ret
13560 }
13561 })
13562 }
13563 }
13564 impl<'de> Deserializer<'de, super::List> for Box<ListDeserializer> {
13565 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::List>
13566 where
13567 R: DeserializeReader,
13568 {
13569 reader.init_deserializer_from_start_event(event, ListDeserializer::from_bytes_start)
13570 }
13571 fn next<R>(mut self, reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::List>
13572 where
13573 R: DeserializeReader,
13574 {
13575 use ListDeserializerState as S;
13576 let mut event = event;
13577 let mut fallback = None;
13578 let mut allow_any_element = false;
13579 let (event, allow_any) = loop {
13580 let state = replace(&mut *self.state, S::Unknown__);
13581 event = match (state, event) {
13582 (S::Annotation(Some(deserializer)), event) => {
13583 let output = deserializer.next(reader, event)?;
13584 match self.handle_annotation(reader, output, &mut fallback)? {
13585 ElementHandlerOutput::Continue { event, allow_any } => {
13586 allow_any_element = allow_any_element || allow_any;
13587 event
13588 }
13589 ElementHandlerOutput::Break { event, allow_any } => {
13590 break (event, allow_any)
13591 }
13592 }
13593 }
13594 (S::SimpleType(Some(deserializer)), event) => {
13595 let output = deserializer.next(reader, event)?;
13596 match self.handle_simple_type(reader, output, &mut fallback)? {
13597 ElementHandlerOutput::Continue { event, allow_any } => {
13598 allow_any_element = allow_any_element || allow_any;
13599 event
13600 }
13601 ElementHandlerOutput::Break { event, allow_any } => {
13602 break (event, allow_any)
13603 }
13604 }
13605 }
13606 (_, Event::End(_)) => {
13607 if let Some(fallback) = fallback.take() {
13608 self.finish_state(reader, fallback)?;
13609 }
13610 return Ok(DeserializerOutput {
13611 artifact: DeserializerArtifact::Data(self.finish(reader)?),
13612 event: DeserializerEvent::None,
13613 allow_any: false,
13614 });
13615 }
13616 (S::Init__, event) => {
13617 fallback.get_or_insert(S::Init__);
13618 *self.state = ListDeserializerState::Annotation(None);
13619 event
13620 }
13621 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
13622 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
13623 let output =
13624 <super::Annotation as WithDeserializer>::Deserializer::init(
13625 reader, event,
13626 )?;
13627 match self.handle_annotation(reader, output, &mut fallback)? {
13628 ElementHandlerOutput::Continue { event, allow_any } => {
13629 allow_any_element = allow_any_element || allow_any;
13630 event
13631 }
13632 ElementHandlerOutput::Break { event, allow_any } => {
13633 break (event, allow_any)
13634 }
13635 }
13636 } else {
13637 *self.state = S::SimpleType(None);
13638 allow_any_element = true;
13639 fallback.get_or_insert(S::Annotation(None));
13640 event
13641 }
13642 }
13643 (S::SimpleType(None), event @ (Event::Start(_) | Event::Empty(_))) => {
13644 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"simpleType") {
13645 let output =
13646 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
13647 reader, event,
13648 )?;
13649 match self.handle_simple_type(reader, output, &mut fallback)? {
13650 ElementHandlerOutput::Continue { event, allow_any } => {
13651 allow_any_element = allow_any_element || allow_any;
13652 event
13653 }
13654 ElementHandlerOutput::Break { event, allow_any } => {
13655 break (event, allow_any)
13656 }
13657 }
13658 } else {
13659 *self.state = S::Done__;
13660 allow_any_element = true;
13661 fallback.get_or_insert(S::SimpleType(None));
13662 event
13663 }
13664 }
13665 (S::Done__, event) => {
13666 fallback.get_or_insert(S::Done__);
13667 break (DeserializerEvent::Continue(event), allow_any_element);
13668 }
13669 (S::Unknown__, _) => unreachable!(),
13670 (state, event) => {
13671 *self.state = state;
13672 break (DeserializerEvent::Break(event), false);
13673 }
13674 }
13675 };
13676 if let Some(fallback) = fallback {
13677 *self.state = fallback;
13678 }
13679 Ok(DeserializerOutput {
13680 artifact: DeserializerArtifact::Deserializer(self),
13681 event,
13682 allow_any,
13683 })
13684 }
13685 fn finish<R>(mut self, reader: &R) -> Result<super::List, Error>
13686 where
13687 R: DeserializeReader,
13688 {
13689 let state = replace(&mut *self.state, ListDeserializerState::Unknown__);
13690 self.finish_state(reader, state)?;
13691 Ok(super::List {
13692 id: self.id,
13693 item_type: self.item_type,
13694 annotation: self.annotation,
13695 simple_type: self.simple_type,
13696 })
13697 }
13698 }
13699 #[derive(Debug)]
13700 pub struct UnionDeserializer {
13701 id: Option<String>,
13702 member_types: Option<super::QNameList>,
13703 annotation: Option<super::Annotation>,
13704 simple_type: Vec<super::SimpleBaseType>,
13705 state: Box<UnionDeserializerState>,
13706 }
13707 #[derive(Debug)]
13708 enum UnionDeserializerState {
13709 Init__,
13710 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
13711 SimpleType(Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>),
13712 Done__,
13713 Unknown__,
13714 }
13715 impl UnionDeserializer {
13716 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
13717 where
13718 R: DeserializeReader,
13719 {
13720 let mut id: Option<String> = None;
13721 let mut member_types: Option<super::QNameList> = None;
13722 for attrib in filter_xmlns_attributes(bytes_start) {
13723 let attrib = attrib?;
13724 if matches!(
13725 reader.resolve_local_name(attrib.key, &super::NS_XS),
13726 Some(b"id")
13727 ) {
13728 reader.read_attrib(&mut id, b"id", &attrib.value)?;
13729 } else if matches!(
13730 reader.resolve_local_name(attrib.key, &super::NS_XS),
13731 Some(b"memberTypes")
13732 ) {
13733 reader.read_attrib(&mut member_types, b"memberTypes", &attrib.value)?;
13734 }
13735 }
13736 Ok(Box::new(Self {
13737 id: id,
13738 member_types: member_types,
13739 annotation: None,
13740 simple_type: Vec::new(),
13741 state: Box::new(UnionDeserializerState::Init__),
13742 }))
13743 }
13744 fn finish_state<R>(
13745 &mut self,
13746 reader: &R,
13747 state: UnionDeserializerState,
13748 ) -> Result<(), Error>
13749 where
13750 R: DeserializeReader,
13751 {
13752 use UnionDeserializerState as S;
13753 match state {
13754 S::Annotation(Some(deserializer)) => {
13755 self.store_annotation(deserializer.finish(reader)?)?
13756 }
13757 S::SimpleType(Some(deserializer)) => {
13758 self.store_simple_type(deserializer.finish(reader)?)?
13759 }
13760 _ => (),
13761 }
13762 Ok(())
13763 }
13764 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
13765 if self.annotation.is_some() {
13766 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
13767 b"annotation",
13768 )))?;
13769 }
13770 self.annotation = Some(value);
13771 Ok(())
13772 }
13773 fn store_simple_type(&mut self, value: super::SimpleBaseType) -> Result<(), Error> {
13774 self.simple_type.push(value);
13775 Ok(())
13776 }
13777 fn handle_annotation<'de, R>(
13778 &mut self,
13779 reader: &R,
13780 output: DeserializerOutput<'de, super::Annotation>,
13781 fallback: &mut Option<UnionDeserializerState>,
13782 ) -> Result<ElementHandlerOutput<'de>, Error>
13783 where
13784 R: DeserializeReader,
13785 {
13786 let DeserializerOutput {
13787 artifact,
13788 event,
13789 allow_any,
13790 } = output;
13791 if artifact.is_none() {
13792 fallback.get_or_insert(UnionDeserializerState::Annotation(None));
13793 *self.state = UnionDeserializerState::SimpleType(None);
13794 return Ok(ElementHandlerOutput::from_event(event, allow_any));
13795 }
13796 if let Some(fallback) = fallback.take() {
13797 self.finish_state(reader, fallback)?;
13798 }
13799 Ok(match artifact {
13800 DeserializerArtifact::None => unreachable!(),
13801 DeserializerArtifact::Data(data) => {
13802 self.store_annotation(data)?;
13803 *self.state = UnionDeserializerState::SimpleType(None);
13804 ElementHandlerOutput::from_event(event, allow_any)
13805 }
13806 DeserializerArtifact::Deserializer(deserializer) => {
13807 let ret = ElementHandlerOutput::from_event(event, allow_any);
13808 match &ret {
13809 ElementHandlerOutput::Continue { .. } => {
13810 fallback.get_or_insert(UnionDeserializerState::Annotation(Some(
13811 deserializer,
13812 )));
13813 *self.state = UnionDeserializerState::SimpleType(None);
13814 }
13815 ElementHandlerOutput::Break { .. } => {
13816 *self.state = UnionDeserializerState::Annotation(Some(deserializer));
13817 }
13818 }
13819 ret
13820 }
13821 })
13822 }
13823 fn handle_simple_type<'de, R>(
13824 &mut self,
13825 reader: &R,
13826 output: DeserializerOutput<'de, super::SimpleBaseType>,
13827 fallback: &mut Option<UnionDeserializerState>,
13828 ) -> Result<ElementHandlerOutput<'de>, Error>
13829 where
13830 R: DeserializeReader,
13831 {
13832 let DeserializerOutput {
13833 artifact,
13834 event,
13835 allow_any,
13836 } = output;
13837 if artifact.is_none() {
13838 fallback.get_or_insert(UnionDeserializerState::SimpleType(None));
13839 *self.state = UnionDeserializerState::Done__;
13840 return Ok(ElementHandlerOutput::from_event(event, allow_any));
13841 }
13842 if let Some(fallback) = fallback.take() {
13843 self.finish_state(reader, fallback)?;
13844 }
13845 Ok(match artifact {
13846 DeserializerArtifact::None => unreachable!(),
13847 DeserializerArtifact::Data(data) => {
13848 self.store_simple_type(data)?;
13849 *self.state = UnionDeserializerState::SimpleType(None);
13850 ElementHandlerOutput::from_event(event, allow_any)
13851 }
13852 DeserializerArtifact::Deserializer(deserializer) => {
13853 let ret = ElementHandlerOutput::from_event(event, allow_any);
13854 match &ret {
13855 ElementHandlerOutput::Continue { .. } => {
13856 fallback.get_or_insert(UnionDeserializerState::SimpleType(Some(
13857 deserializer,
13858 )));
13859 *self.state = UnionDeserializerState::SimpleType(None);
13860 }
13861 ElementHandlerOutput::Break { .. } => {
13862 *self.state = UnionDeserializerState::SimpleType(Some(deserializer));
13863 }
13864 }
13865 ret
13866 }
13867 })
13868 }
13869 }
13870 impl<'de> Deserializer<'de, super::Union> for Box<UnionDeserializer> {
13871 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Union>
13872 where
13873 R: DeserializeReader,
13874 {
13875 reader.init_deserializer_from_start_event(event, UnionDeserializer::from_bytes_start)
13876 }
13877 fn next<R>(mut self, reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Union>
13878 where
13879 R: DeserializeReader,
13880 {
13881 use UnionDeserializerState as S;
13882 let mut event = event;
13883 let mut fallback = None;
13884 let mut allow_any_element = false;
13885 let (event, allow_any) = loop {
13886 let state = replace(&mut *self.state, S::Unknown__);
13887 event = match (state, event) {
13888 (S::Annotation(Some(deserializer)), event) => {
13889 let output = deserializer.next(reader, event)?;
13890 match self.handle_annotation(reader, output, &mut fallback)? {
13891 ElementHandlerOutput::Continue { event, allow_any } => {
13892 allow_any_element = allow_any_element || allow_any;
13893 event
13894 }
13895 ElementHandlerOutput::Break { event, allow_any } => {
13896 break (event, allow_any)
13897 }
13898 }
13899 }
13900 (S::SimpleType(Some(deserializer)), event) => {
13901 let output = deserializer.next(reader, event)?;
13902 match self.handle_simple_type(reader, output, &mut fallback)? {
13903 ElementHandlerOutput::Continue { event, allow_any } => {
13904 allow_any_element = allow_any_element || allow_any;
13905 event
13906 }
13907 ElementHandlerOutput::Break { event, allow_any } => {
13908 break (event, allow_any)
13909 }
13910 }
13911 }
13912 (_, Event::End(_)) => {
13913 if let Some(fallback) = fallback.take() {
13914 self.finish_state(reader, fallback)?;
13915 }
13916 return Ok(DeserializerOutput {
13917 artifact: DeserializerArtifact::Data(self.finish(reader)?),
13918 event: DeserializerEvent::None,
13919 allow_any: false,
13920 });
13921 }
13922 (S::Init__, event) => {
13923 fallback.get_or_insert(S::Init__);
13924 *self.state = UnionDeserializerState::Annotation(None);
13925 event
13926 }
13927 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
13928 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
13929 let output =
13930 <super::Annotation as WithDeserializer>::Deserializer::init(
13931 reader, event,
13932 )?;
13933 match self.handle_annotation(reader, output, &mut fallback)? {
13934 ElementHandlerOutput::Continue { event, allow_any } => {
13935 allow_any_element = allow_any_element || allow_any;
13936 event
13937 }
13938 ElementHandlerOutput::Break { event, allow_any } => {
13939 break (event, allow_any)
13940 }
13941 }
13942 } else {
13943 *self.state = S::SimpleType(None);
13944 allow_any_element = true;
13945 fallback.get_or_insert(S::Annotation(None));
13946 event
13947 }
13948 }
13949 (S::SimpleType(None), event @ (Event::Start(_) | Event::Empty(_))) => {
13950 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"simpleType") {
13951 let output =
13952 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
13953 reader, event,
13954 )?;
13955 match self.handle_simple_type(reader, output, &mut fallback)? {
13956 ElementHandlerOutput::Continue { event, allow_any } => {
13957 allow_any_element = allow_any_element || allow_any;
13958 event
13959 }
13960 ElementHandlerOutput::Break { event, allow_any } => {
13961 break (event, allow_any)
13962 }
13963 }
13964 } else {
13965 *self.state = S::Done__;
13966 allow_any_element = true;
13967 fallback.get_or_insert(S::SimpleType(None));
13968 event
13969 }
13970 }
13971 (S::Done__, event) => {
13972 fallback.get_or_insert(S::Done__);
13973 break (DeserializerEvent::Continue(event), allow_any_element);
13974 }
13975 (S::Unknown__, _) => unreachable!(),
13976 (state, event) => {
13977 *self.state = state;
13978 break (DeserializerEvent::Break(event), false);
13979 }
13980 }
13981 };
13982 if let Some(fallback) = fallback {
13983 *self.state = fallback;
13984 }
13985 Ok(DeserializerOutput {
13986 artifact: DeserializerArtifact::Deserializer(self),
13987 event,
13988 allow_any,
13989 })
13990 }
13991 fn finish<R>(mut self, reader: &R) -> Result<super::Union, Error>
13992 where
13993 R: DeserializeReader,
13994 {
13995 let state = replace(&mut *self.state, UnionDeserializerState::Unknown__);
13996 self.finish_state(reader, state)?;
13997 Ok(super::Union {
13998 id: self.id,
13999 member_types: self.member_types,
14000 annotation: self.annotation,
14001 simple_type: self.simple_type,
14002 })
14003 }
14004 }
14005 #[derive(Debug)]
14006 pub struct SimpleContentDeserializer {
14007 id: Option<String>,
14008 content: Vec<super::SimpleContentContent>,
14009 state: Box<SimpleContentDeserializerState>,
14010 }
14011 #[derive(Debug)]
14012 enum SimpleContentDeserializerState {
14013 Init__,
14014 Next__,
14015 Content__(<super::SimpleContentContent as WithDeserializer>::Deserializer),
14016 Unknown__,
14017 }
14018 impl SimpleContentDeserializer {
14019 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
14020 where
14021 R: DeserializeReader,
14022 {
14023 let mut id: Option<String> = None;
14024 for attrib in filter_xmlns_attributes(bytes_start) {
14025 let attrib = attrib?;
14026 if matches!(
14027 reader.resolve_local_name(attrib.key, &super::NS_XS),
14028 Some(b"id")
14029 ) {
14030 reader.read_attrib(&mut id, b"id", &attrib.value)?;
14031 }
14032 }
14033 Ok(Box::new(Self {
14034 id: id,
14035 content: Vec::new(),
14036 state: Box::new(SimpleContentDeserializerState::Init__),
14037 }))
14038 }
14039 fn finish_state<R>(
14040 &mut self,
14041 reader: &R,
14042 state: SimpleContentDeserializerState,
14043 ) -> Result<(), Error>
14044 where
14045 R: DeserializeReader,
14046 {
14047 if let SimpleContentDeserializerState::Content__(deserializer) = state {
14048 self.store_content(deserializer.finish(reader)?)?;
14049 }
14050 Ok(())
14051 }
14052 fn store_content(&mut self, value: super::SimpleContentContent) -> Result<(), Error> {
14053 self.content.push(value);
14054 Ok(())
14055 }
14056 fn handle_content<'de, R>(
14057 &mut self,
14058 reader: &R,
14059 output: DeserializerOutput<'de, super::SimpleContentContent>,
14060 fallback: &mut Option<SimpleContentDeserializerState>,
14061 ) -> Result<ElementHandlerOutput<'de>, Error>
14062 where
14063 R: DeserializeReader,
14064 {
14065 let DeserializerOutput {
14066 artifact,
14067 event,
14068 allow_any,
14069 } = output;
14070 if artifact.is_none() {
14071 *self.state = fallback
14072 .take()
14073 .unwrap_or(SimpleContentDeserializerState::Next__);
14074 return Ok(ElementHandlerOutput::break_(event, allow_any));
14075 }
14076 if let Some(fallback) = fallback.take() {
14077 self.finish_state(reader, fallback)?;
14078 }
14079 Ok(match artifact {
14080 DeserializerArtifact::None => unreachable!(),
14081 DeserializerArtifact::Data(data) => {
14082 self.store_content(data)?;
14083 *self.state = SimpleContentDeserializerState::Next__;
14084 ElementHandlerOutput::from_event(event, allow_any)
14085 }
14086 DeserializerArtifact::Deserializer(deserializer) => {
14087 let can_have_more = self.content.len().saturating_add(1) < 3usize;
14088 let ret = if can_have_more {
14089 ElementHandlerOutput::from_event(event, allow_any)
14090 } else {
14091 ElementHandlerOutput::from_event_end(event, allow_any)
14092 };
14093 match (can_have_more, &ret) {
14094 (true, ElementHandlerOutput::Continue { .. }) => {
14095 fallback.get_or_insert(SimpleContentDeserializerState::Content__(
14096 deserializer,
14097 ));
14098 *self.state = SimpleContentDeserializerState::Next__;
14099 }
14100 (false, _) | (_, ElementHandlerOutput::Break { .. }) => {
14101 *self.state = SimpleContentDeserializerState::Content__(deserializer);
14102 }
14103 }
14104 ret
14105 }
14106 })
14107 }
14108 }
14109 impl<'de> Deserializer<'de, super::SimpleContent> for Box<SimpleContentDeserializer> {
14110 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::SimpleContent>
14111 where
14112 R: DeserializeReader,
14113 {
14114 reader.init_deserializer_from_start_event(
14115 event,
14116 SimpleContentDeserializer::from_bytes_start,
14117 )
14118 }
14119 fn next<R>(
14120 mut self,
14121 reader: &R,
14122 event: Event<'de>,
14123 ) -> DeserializerResult<'de, super::SimpleContent>
14124 where
14125 R: DeserializeReader,
14126 {
14127 use SimpleContentDeserializerState as S;
14128 let mut event = event;
14129 let mut fallback = None;
14130 let (event, allow_any) = loop {
14131 let state = replace(&mut *self.state, S::Unknown__);
14132 event = match (state, event) {
14133 (S::Content__(deserializer), event) => {
14134 let output = deserializer.next(reader, event)?;
14135 match self.handle_content(reader, output, &mut fallback)? {
14136 ElementHandlerOutput::Break { event, allow_any } => {
14137 break (event, allow_any)
14138 }
14139 ElementHandlerOutput::Continue { event, .. } => event,
14140 }
14141 }
14142 (_, Event::End(_)) => {
14143 return Ok(DeserializerOutput {
14144 artifact: DeserializerArtifact::Data(self.finish(reader)?),
14145 event: DeserializerEvent::None,
14146 allow_any: false,
14147 });
14148 }
14149 (state @ (S::Init__ | S::Next__), event) => {
14150 fallback.get_or_insert(state);
14151 let output =
14152 <super::SimpleContentContent as WithDeserializer>::Deserializer::init(
14153 reader, event,
14154 )?;
14155 match self.handle_content(reader, output, &mut fallback)? {
14156 ElementHandlerOutput::Break { event, allow_any } => {
14157 break (event, allow_any)
14158 }
14159 ElementHandlerOutput::Continue { event, .. } => event,
14160 }
14161 }
14162 (S::Unknown__, _) => unreachable!(),
14163 }
14164 };
14165 let artifact = DeserializerArtifact::Deserializer(self);
14166 Ok(DeserializerOutput {
14167 artifact,
14168 event,
14169 allow_any,
14170 })
14171 }
14172 fn finish<R>(mut self, reader: &R) -> Result<super::SimpleContent, Error>
14173 where
14174 R: DeserializeReader,
14175 {
14176 let state = replace(&mut *self.state, SimpleContentDeserializerState::Unknown__);
14177 self.finish_state(reader, state)?;
14178 Ok(super::SimpleContent {
14179 id: self.id,
14180 content: self.content,
14181 })
14182 }
14183 }
14184 #[derive(Debug)]
14185 pub struct SimpleContentContentDeserializer {
14186 state: Box<SimpleContentContentDeserializerState>,
14187 }
14188 #[derive(Debug)]
14189 pub enum SimpleContentContentDeserializerState {
14190 Init__,
14191 Annotation(
14192 Option<super::Annotation>,
14193 Option<<super::Annotation as WithDeserializer>::Deserializer>,
14194 ),
14195 Restriction(
14196 Option<super::RestrictionType>,
14197 Option<<super::RestrictionType as WithDeserializer>::Deserializer>,
14198 ),
14199 Extension(
14200 Option<super::ExtensionType>,
14201 Option<<super::ExtensionType as WithDeserializer>::Deserializer>,
14202 ),
14203 Done__(super::SimpleContentContent),
14204 Unknown__,
14205 }
14206 impl SimpleContentContentDeserializer {
14207 fn find_suitable<'de, R>(
14208 &mut self,
14209 reader: &R,
14210 event: Event<'de>,
14211 fallback: &mut Option<SimpleContentContentDeserializerState>,
14212 ) -> Result<ElementHandlerOutput<'de>, Error>
14213 where
14214 R: DeserializeReader,
14215 {
14216 let (Event::Start(x) | Event::Empty(x)) = &event else {
14217 *self.state = fallback
14218 .take()
14219 .unwrap_or(SimpleContentContentDeserializerState::Init__);
14220 return Ok(ElementHandlerOutput::return_to_parent(event, false));
14221 };
14222 if matches!(
14223 reader.resolve_local_name(x.name(), &super::NS_XS),
14224 Some(b"annotation")
14225 ) {
14226 let output =
14227 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
14228 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
14229 }
14230 if matches!(
14231 reader.resolve_local_name(x.name(), &super::NS_XS),
14232 Some(b"restriction")
14233 ) {
14234 let output = <super::RestrictionType as WithDeserializer>::Deserializer::init(
14235 reader, event,
14236 )?;
14237 return self.handle_restriction(reader, Default::default(), output, &mut *fallback);
14238 }
14239 if matches!(
14240 reader.resolve_local_name(x.name(), &super::NS_XS),
14241 Some(b"extension")
14242 ) {
14243 let output =
14244 <super::ExtensionType as WithDeserializer>::Deserializer::init(reader, event)?;
14245 return self.handle_extension(reader, Default::default(), output, &mut *fallback);
14246 }
14247 *self.state = fallback
14248 .take()
14249 .unwrap_or(SimpleContentContentDeserializerState::Init__);
14250 Ok(ElementHandlerOutput::return_to_parent(event, false))
14251 }
14252 fn finish_state<R>(
14253 reader: &R,
14254 state: SimpleContentContentDeserializerState,
14255 ) -> Result<super::SimpleContentContent, Error>
14256 where
14257 R: DeserializeReader,
14258 {
14259 use SimpleContentContentDeserializerState as S;
14260 match state {
14261 S::Init__ => Err(ErrorKind::MissingContent.into()),
14262 S::Annotation(mut values, deserializer) => {
14263 if let Some(deserializer) = deserializer {
14264 let value = deserializer.finish(reader)?;
14265 SimpleContentContentDeserializer::store_annotation(&mut values, value)?;
14266 }
14267 Ok(super::SimpleContentContent::Annotation(values.ok_or_else(
14268 || ErrorKind::MissingElement("annotation".into()),
14269 )?))
14270 }
14271 S::Restriction(mut values, deserializer) => {
14272 if let Some(deserializer) = deserializer {
14273 let value = deserializer.finish(reader)?;
14274 SimpleContentContentDeserializer::store_restriction(&mut values, value)?;
14275 }
14276 Ok(super::SimpleContentContent::Restriction(
14277 values.ok_or_else(|| ErrorKind::MissingElement("restriction".into()))?,
14278 ))
14279 }
14280 S::Extension(mut values, deserializer) => {
14281 if let Some(deserializer) = deserializer {
14282 let value = deserializer.finish(reader)?;
14283 SimpleContentContentDeserializer::store_extension(&mut values, value)?;
14284 }
14285 Ok(super::SimpleContentContent::Extension(values.ok_or_else(
14286 || ErrorKind::MissingElement("extension".into()),
14287 )?))
14288 }
14289 S::Done__(data) => Ok(data),
14290 S::Unknown__ => unreachable!(),
14291 }
14292 }
14293 fn store_annotation(
14294 values: &mut Option<super::Annotation>,
14295 value: super::Annotation,
14296 ) -> Result<(), Error> {
14297 if values.is_some() {
14298 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
14299 b"annotation",
14300 )))?;
14301 }
14302 *values = Some(value);
14303 Ok(())
14304 }
14305 fn store_restriction(
14306 values: &mut Option<super::RestrictionType>,
14307 value: super::RestrictionType,
14308 ) -> Result<(), Error> {
14309 if values.is_some() {
14310 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
14311 b"restriction",
14312 )))?;
14313 }
14314 *values = Some(value);
14315 Ok(())
14316 }
14317 fn store_extension(
14318 values: &mut Option<super::ExtensionType>,
14319 value: super::ExtensionType,
14320 ) -> Result<(), Error> {
14321 if values.is_some() {
14322 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
14323 b"extension",
14324 )))?;
14325 }
14326 *values = Some(value);
14327 Ok(())
14328 }
14329 fn handle_annotation<'de, R>(
14330 &mut self,
14331 reader: &R,
14332 mut values: Option<super::Annotation>,
14333 output: DeserializerOutput<'de, super::Annotation>,
14334 fallback: &mut Option<SimpleContentContentDeserializerState>,
14335 ) -> Result<ElementHandlerOutput<'de>, Error>
14336 where
14337 R: DeserializeReader,
14338 {
14339 let DeserializerOutput {
14340 artifact,
14341 event,
14342 allow_any,
14343 } = output;
14344 if artifact.is_none() {
14345 *self.state = match fallback.take() {
14346 None => SimpleContentContentDeserializerState::Init__,
14347 Some(SimpleContentContentDeserializerState::Annotation(
14348 _,
14349 Some(deserializer),
14350 )) => SimpleContentContentDeserializerState::Annotation(
14351 values,
14352 Some(deserializer),
14353 ),
14354 _ => unreachable!(),
14355 };
14356 return Ok(ElementHandlerOutput::break_(event, allow_any));
14357 }
14358 match fallback.take() {
14359 None => (),
14360 Some(SimpleContentContentDeserializerState::Annotation(_, Some(deserializer))) => {
14361 let data = deserializer.finish(reader)?;
14362 SimpleContentContentDeserializer::store_annotation(&mut values, data)?;
14363 }
14364 Some(_) => unreachable!(),
14365 }
14366 Ok(match artifact {
14367 DeserializerArtifact::None => unreachable!(),
14368 DeserializerArtifact::Data(data) => {
14369 SimpleContentContentDeserializer::store_annotation(&mut values, data)?;
14370 let data = SimpleContentContentDeserializer::finish_state(
14371 reader,
14372 SimpleContentContentDeserializerState::Annotation(values, None),
14373 )?;
14374 *self.state = SimpleContentContentDeserializerState::Done__(data);
14375 ElementHandlerOutput::Break { event, allow_any }
14376 }
14377 DeserializerArtifact::Deserializer(deserializer) => {
14378 *self.state = SimpleContentContentDeserializerState::Annotation(
14379 values,
14380 Some(deserializer),
14381 );
14382 ElementHandlerOutput::from_event_end(event, allow_any)
14383 }
14384 })
14385 }
14386 fn handle_restriction<'de, R>(
14387 &mut self,
14388 reader: &R,
14389 mut values: Option<super::RestrictionType>,
14390 output: DeserializerOutput<'de, super::RestrictionType>,
14391 fallback: &mut Option<SimpleContentContentDeserializerState>,
14392 ) -> Result<ElementHandlerOutput<'de>, Error>
14393 where
14394 R: DeserializeReader,
14395 {
14396 let DeserializerOutput {
14397 artifact,
14398 event,
14399 allow_any,
14400 } = output;
14401 if artifact.is_none() {
14402 *self.state = match fallback.take() {
14403 None => SimpleContentContentDeserializerState::Init__,
14404 Some(SimpleContentContentDeserializerState::Restriction(
14405 _,
14406 Some(deserializer),
14407 )) => SimpleContentContentDeserializerState::Restriction(
14408 values,
14409 Some(deserializer),
14410 ),
14411 _ => unreachable!(),
14412 };
14413 return Ok(ElementHandlerOutput::break_(event, allow_any));
14414 }
14415 match fallback.take() {
14416 None => (),
14417 Some(SimpleContentContentDeserializerState::Restriction(_, Some(deserializer))) => {
14418 let data = deserializer.finish(reader)?;
14419 SimpleContentContentDeserializer::store_restriction(&mut values, data)?;
14420 }
14421 Some(_) => unreachable!(),
14422 }
14423 Ok(match artifact {
14424 DeserializerArtifact::None => unreachable!(),
14425 DeserializerArtifact::Data(data) => {
14426 SimpleContentContentDeserializer::store_restriction(&mut values, data)?;
14427 let data = SimpleContentContentDeserializer::finish_state(
14428 reader,
14429 SimpleContentContentDeserializerState::Restriction(values, None),
14430 )?;
14431 *self.state = SimpleContentContentDeserializerState::Done__(data);
14432 ElementHandlerOutput::Break { event, allow_any }
14433 }
14434 DeserializerArtifact::Deserializer(deserializer) => {
14435 *self.state = SimpleContentContentDeserializerState::Restriction(
14436 values,
14437 Some(deserializer),
14438 );
14439 ElementHandlerOutput::from_event_end(event, allow_any)
14440 }
14441 })
14442 }
14443 fn handle_extension<'de, R>(
14444 &mut self,
14445 reader: &R,
14446 mut values: Option<super::ExtensionType>,
14447 output: DeserializerOutput<'de, super::ExtensionType>,
14448 fallback: &mut Option<SimpleContentContentDeserializerState>,
14449 ) -> Result<ElementHandlerOutput<'de>, Error>
14450 where
14451 R: DeserializeReader,
14452 {
14453 let DeserializerOutput {
14454 artifact,
14455 event,
14456 allow_any,
14457 } = output;
14458 if artifact.is_none() {
14459 *self.state = match fallback.take() {
14460 None => SimpleContentContentDeserializerState::Init__,
14461 Some(SimpleContentContentDeserializerState::Extension(
14462 _,
14463 Some(deserializer),
14464 )) => {
14465 SimpleContentContentDeserializerState::Extension(values, Some(deserializer))
14466 }
14467 _ => unreachable!(),
14468 };
14469 return Ok(ElementHandlerOutput::break_(event, allow_any));
14470 }
14471 match fallback.take() {
14472 None => (),
14473 Some(SimpleContentContentDeserializerState::Extension(_, Some(deserializer))) => {
14474 let data = deserializer.finish(reader)?;
14475 SimpleContentContentDeserializer::store_extension(&mut values, data)?;
14476 }
14477 Some(_) => unreachable!(),
14478 }
14479 Ok(match artifact {
14480 DeserializerArtifact::None => unreachable!(),
14481 DeserializerArtifact::Data(data) => {
14482 SimpleContentContentDeserializer::store_extension(&mut values, data)?;
14483 let data = SimpleContentContentDeserializer::finish_state(
14484 reader,
14485 SimpleContentContentDeserializerState::Extension(values, None),
14486 )?;
14487 *self.state = SimpleContentContentDeserializerState::Done__(data);
14488 ElementHandlerOutput::Break { event, allow_any }
14489 }
14490 DeserializerArtifact::Deserializer(deserializer) => {
14491 *self.state = SimpleContentContentDeserializerState::Extension(
14492 values,
14493 Some(deserializer),
14494 );
14495 ElementHandlerOutput::from_event_end(event, allow_any)
14496 }
14497 })
14498 }
14499 }
14500 impl<'de> Deserializer<'de, super::SimpleContentContent> for Box<SimpleContentContentDeserializer> {
14501 fn init<R>(
14502 reader: &R,
14503 event: Event<'de>,
14504 ) -> DeserializerResult<'de, super::SimpleContentContent>
14505 where
14506 R: DeserializeReader,
14507 {
14508 let deserializer = Box::new(SimpleContentContentDeserializer {
14509 state: Box::new(SimpleContentContentDeserializerState::Init__),
14510 });
14511 let mut output = deserializer.next(reader, event)?;
14512 output.artifact = match output.artifact {
14513 DeserializerArtifact::Deserializer(x)
14514 if matches!(&*x.state, SimpleContentContentDeserializerState::Init__) =>
14515 {
14516 DeserializerArtifact::None
14517 }
14518 artifact => artifact,
14519 };
14520 Ok(output)
14521 }
14522 fn next<R>(
14523 mut self,
14524 reader: &R,
14525 event: Event<'de>,
14526 ) -> DeserializerResult<'de, super::SimpleContentContent>
14527 where
14528 R: DeserializeReader,
14529 {
14530 use SimpleContentContentDeserializerState as S;
14531 let mut event = event;
14532 let mut fallback = None;
14533 let (event, allow_any) = loop {
14534 let state = replace(&mut *self.state, S::Unknown__);
14535 event = match (state, event) {
14536 (S::Annotation(values, Some(deserializer)), event) => {
14537 let output = deserializer.next(reader, event)?;
14538 match self.handle_annotation(reader, values, output, &mut fallback)? {
14539 ElementHandlerOutput::Break { event, allow_any } => {
14540 break (event, allow_any)
14541 }
14542 ElementHandlerOutput::Continue { event, .. } => event,
14543 }
14544 }
14545 (S::Restriction(values, Some(deserializer)), event) => {
14546 let output = deserializer.next(reader, event)?;
14547 match self.handle_restriction(reader, values, output, &mut fallback)? {
14548 ElementHandlerOutput::Break { event, allow_any } => {
14549 break (event, allow_any)
14550 }
14551 ElementHandlerOutput::Continue { event, .. } => event,
14552 }
14553 }
14554 (S::Extension(values, Some(deserializer)), event) => {
14555 let output = deserializer.next(reader, event)?;
14556 match self.handle_extension(reader, values, output, &mut fallback)? {
14557 ElementHandlerOutput::Break { event, allow_any } => {
14558 break (event, allow_any)
14559 }
14560 ElementHandlerOutput::Continue { event, .. } => event,
14561 }
14562 }
14563 (state, event @ Event::End(_)) => {
14564 return Ok(DeserializerOutput {
14565 artifact: DeserializerArtifact::Data(
14566 SimpleContentContentDeserializer::finish_state(reader, state)?,
14567 ),
14568 event: DeserializerEvent::Continue(event),
14569 allow_any: false,
14570 });
14571 }
14572 (S::Init__, event) => match self.find_suitable(reader, event, &mut fallback)? {
14573 ElementHandlerOutput::Break { event, allow_any } => {
14574 break (event, allow_any)
14575 }
14576 ElementHandlerOutput::Continue { event, .. } => event,
14577 },
14578 (S::Annotation(values, None), event) => {
14579 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
14580 reader, event,
14581 )?;
14582 match self.handle_annotation(reader, values, output, &mut fallback)? {
14583 ElementHandlerOutput::Break { event, allow_any } => {
14584 break (event, allow_any)
14585 }
14586 ElementHandlerOutput::Continue { event, .. } => event,
14587 }
14588 }
14589 (S::Restriction(values, None), event) => {
14590 let output =
14591 <super::RestrictionType as WithDeserializer>::Deserializer::init(
14592 reader, event,
14593 )?;
14594 match self.handle_restriction(reader, values, output, &mut fallback)? {
14595 ElementHandlerOutput::Break { event, allow_any } => {
14596 break (event, allow_any)
14597 }
14598 ElementHandlerOutput::Continue { event, .. } => event,
14599 }
14600 }
14601 (S::Extension(values, None), event) => {
14602 let output =
14603 <super::ExtensionType as WithDeserializer>::Deserializer::init(
14604 reader, event,
14605 )?;
14606 match self.handle_extension(reader, values, output, &mut fallback)? {
14607 ElementHandlerOutput::Break { event, allow_any } => {
14608 break (event, allow_any)
14609 }
14610 ElementHandlerOutput::Continue { event, .. } => event,
14611 }
14612 }
14613 (s @ S::Done__(_), event) => {
14614 *self.state = s;
14615 break (DeserializerEvent::Continue(event), false);
14616 }
14617 (S::Unknown__, _) => unreachable!(),
14618 }
14619 };
14620 let artifact = if matches!(&*self.state, S::Done__(_)) {
14621 DeserializerArtifact::Data(self.finish(reader)?)
14622 } else {
14623 DeserializerArtifact::Deserializer(self)
14624 };
14625 Ok(DeserializerOutput {
14626 artifact,
14627 event,
14628 allow_any,
14629 })
14630 }
14631 fn finish<R>(self, reader: &R) -> Result<super::SimpleContentContent, Error>
14632 where
14633 R: DeserializeReader,
14634 {
14635 SimpleContentContentDeserializer::finish_state(reader, *self.state)
14636 }
14637 }
14638 #[derive(Debug)]
14639 pub struct ComplexContentDeserializer {
14640 id: Option<String>,
14641 mixed: Option<bool>,
14642 content: Vec<super::ComplexContentContent>,
14643 state: Box<ComplexContentDeserializerState>,
14644 }
14645 #[derive(Debug)]
14646 enum ComplexContentDeserializerState {
14647 Init__,
14648 Next__,
14649 Content__(<super::ComplexContentContent as WithDeserializer>::Deserializer),
14650 Unknown__,
14651 }
14652 impl ComplexContentDeserializer {
14653 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
14654 where
14655 R: DeserializeReader,
14656 {
14657 let mut id: Option<String> = None;
14658 let mut mixed: Option<bool> = None;
14659 for attrib in filter_xmlns_attributes(bytes_start) {
14660 let attrib = attrib?;
14661 if matches!(
14662 reader.resolve_local_name(attrib.key, &super::NS_XS),
14663 Some(b"id")
14664 ) {
14665 reader.read_attrib(&mut id, b"id", &attrib.value)?;
14666 } else if matches!(
14667 reader.resolve_local_name(attrib.key, &super::NS_XS),
14668 Some(b"mixed")
14669 ) {
14670 reader.read_attrib(&mut mixed, b"mixed", &attrib.value)?;
14671 }
14672 }
14673 Ok(Box::new(Self {
14674 id: id,
14675 mixed: mixed,
14676 content: Vec::new(),
14677 state: Box::new(ComplexContentDeserializerState::Init__),
14678 }))
14679 }
14680 fn finish_state<R>(
14681 &mut self,
14682 reader: &R,
14683 state: ComplexContentDeserializerState,
14684 ) -> Result<(), Error>
14685 where
14686 R: DeserializeReader,
14687 {
14688 if let ComplexContentDeserializerState::Content__(deserializer) = state {
14689 self.store_content(deserializer.finish(reader)?)?;
14690 }
14691 Ok(())
14692 }
14693 fn store_content(&mut self, value: super::ComplexContentContent) -> Result<(), Error> {
14694 self.content.push(value);
14695 Ok(())
14696 }
14697 fn handle_content<'de, R>(
14698 &mut self,
14699 reader: &R,
14700 output: DeserializerOutput<'de, super::ComplexContentContent>,
14701 fallback: &mut Option<ComplexContentDeserializerState>,
14702 ) -> Result<ElementHandlerOutput<'de>, Error>
14703 where
14704 R: DeserializeReader,
14705 {
14706 let DeserializerOutput {
14707 artifact,
14708 event,
14709 allow_any,
14710 } = output;
14711 if artifact.is_none() {
14712 *self.state = fallback
14713 .take()
14714 .unwrap_or(ComplexContentDeserializerState::Next__);
14715 return Ok(ElementHandlerOutput::break_(event, allow_any));
14716 }
14717 if let Some(fallback) = fallback.take() {
14718 self.finish_state(reader, fallback)?;
14719 }
14720 Ok(match artifact {
14721 DeserializerArtifact::None => unreachable!(),
14722 DeserializerArtifact::Data(data) => {
14723 self.store_content(data)?;
14724 *self.state = ComplexContentDeserializerState::Next__;
14725 ElementHandlerOutput::from_event(event, allow_any)
14726 }
14727 DeserializerArtifact::Deserializer(deserializer) => {
14728 let can_have_more = self.content.len().saturating_add(1) < 3usize;
14729 let ret = if can_have_more {
14730 ElementHandlerOutput::from_event(event, allow_any)
14731 } else {
14732 ElementHandlerOutput::from_event_end(event, allow_any)
14733 };
14734 match (can_have_more, &ret) {
14735 (true, ElementHandlerOutput::Continue { .. }) => {
14736 fallback.get_or_insert(ComplexContentDeserializerState::Content__(
14737 deserializer,
14738 ));
14739 *self.state = ComplexContentDeserializerState::Next__;
14740 }
14741 (false, _) | (_, ElementHandlerOutput::Break { .. }) => {
14742 *self.state = ComplexContentDeserializerState::Content__(deserializer);
14743 }
14744 }
14745 ret
14746 }
14747 })
14748 }
14749 }
14750 impl<'de> Deserializer<'de, super::ComplexContent> for Box<ComplexContentDeserializer> {
14751 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::ComplexContent>
14752 where
14753 R: DeserializeReader,
14754 {
14755 reader.init_deserializer_from_start_event(
14756 event,
14757 ComplexContentDeserializer::from_bytes_start,
14758 )
14759 }
14760 fn next<R>(
14761 mut self,
14762 reader: &R,
14763 event: Event<'de>,
14764 ) -> DeserializerResult<'de, super::ComplexContent>
14765 where
14766 R: DeserializeReader,
14767 {
14768 use ComplexContentDeserializerState as S;
14769 let mut event = event;
14770 let mut fallback = None;
14771 let (event, allow_any) = loop {
14772 let state = replace(&mut *self.state, S::Unknown__);
14773 event = match (state, event) {
14774 (S::Content__(deserializer), event) => {
14775 let output = deserializer.next(reader, event)?;
14776 match self.handle_content(reader, output, &mut fallback)? {
14777 ElementHandlerOutput::Break { event, allow_any } => {
14778 break (event, allow_any)
14779 }
14780 ElementHandlerOutput::Continue { event, .. } => event,
14781 }
14782 }
14783 (_, Event::End(_)) => {
14784 return Ok(DeserializerOutput {
14785 artifact: DeserializerArtifact::Data(self.finish(reader)?),
14786 event: DeserializerEvent::None,
14787 allow_any: false,
14788 });
14789 }
14790 (state @ (S::Init__ | S::Next__), event) => {
14791 fallback.get_or_insert(state);
14792 let output =
14793 <super::ComplexContentContent as WithDeserializer>::Deserializer::init(
14794 reader, event,
14795 )?;
14796 match self.handle_content(reader, output, &mut fallback)? {
14797 ElementHandlerOutput::Break { event, allow_any } => {
14798 break (event, allow_any)
14799 }
14800 ElementHandlerOutput::Continue { event, .. } => event,
14801 }
14802 }
14803 (S::Unknown__, _) => unreachable!(),
14804 }
14805 };
14806 let artifact = DeserializerArtifact::Deserializer(self);
14807 Ok(DeserializerOutput {
14808 artifact,
14809 event,
14810 allow_any,
14811 })
14812 }
14813 fn finish<R>(mut self, reader: &R) -> Result<super::ComplexContent, Error>
14814 where
14815 R: DeserializeReader,
14816 {
14817 let state = replace(&mut *self.state, ComplexContentDeserializerState::Unknown__);
14818 self.finish_state(reader, state)?;
14819 Ok(super::ComplexContent {
14820 id: self.id,
14821 mixed: self.mixed,
14822 content: self.content,
14823 })
14824 }
14825 }
14826 #[derive(Debug)]
14827 pub struct ComplexContentContentDeserializer {
14828 state: Box<ComplexContentContentDeserializerState>,
14829 }
14830 #[derive(Debug)]
14831 pub enum ComplexContentContentDeserializerState {
14832 Init__,
14833 Annotation(
14834 Option<super::Annotation>,
14835 Option<<super::Annotation as WithDeserializer>::Deserializer>,
14836 ),
14837 Restriction(
14838 Option<super::RestrictionType>,
14839 Option<<super::RestrictionType as WithDeserializer>::Deserializer>,
14840 ),
14841 Extension(
14842 Option<super::ExtensionType>,
14843 Option<<super::ExtensionType as WithDeserializer>::Deserializer>,
14844 ),
14845 Done__(super::ComplexContentContent),
14846 Unknown__,
14847 }
14848 impl ComplexContentContentDeserializer {
14849 fn find_suitable<'de, R>(
14850 &mut self,
14851 reader: &R,
14852 event: Event<'de>,
14853 fallback: &mut Option<ComplexContentContentDeserializerState>,
14854 ) -> Result<ElementHandlerOutput<'de>, Error>
14855 where
14856 R: DeserializeReader,
14857 {
14858 let (Event::Start(x) | Event::Empty(x)) = &event else {
14859 *self.state = fallback
14860 .take()
14861 .unwrap_or(ComplexContentContentDeserializerState::Init__);
14862 return Ok(ElementHandlerOutput::return_to_parent(event, false));
14863 };
14864 if matches!(
14865 reader.resolve_local_name(x.name(), &super::NS_XS),
14866 Some(b"annotation")
14867 ) {
14868 let output =
14869 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
14870 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
14871 }
14872 if matches!(
14873 reader.resolve_local_name(x.name(), &super::NS_XS),
14874 Some(b"restriction")
14875 ) {
14876 let output = <super::RestrictionType as WithDeserializer>::Deserializer::init(
14877 reader, event,
14878 )?;
14879 return self.handle_restriction(reader, Default::default(), output, &mut *fallback);
14880 }
14881 if matches!(
14882 reader.resolve_local_name(x.name(), &super::NS_XS),
14883 Some(b"extension")
14884 ) {
14885 let output =
14886 <super::ExtensionType as WithDeserializer>::Deserializer::init(reader, event)?;
14887 return self.handle_extension(reader, Default::default(), output, &mut *fallback);
14888 }
14889 *self.state = fallback
14890 .take()
14891 .unwrap_or(ComplexContentContentDeserializerState::Init__);
14892 Ok(ElementHandlerOutput::return_to_parent(event, false))
14893 }
14894 fn finish_state<R>(
14895 reader: &R,
14896 state: ComplexContentContentDeserializerState,
14897 ) -> Result<super::ComplexContentContent, Error>
14898 where
14899 R: DeserializeReader,
14900 {
14901 use ComplexContentContentDeserializerState as S;
14902 match state {
14903 S::Init__ => Err(ErrorKind::MissingContent.into()),
14904 S::Annotation(mut values, deserializer) => {
14905 if let Some(deserializer) = deserializer {
14906 let value = deserializer.finish(reader)?;
14907 ComplexContentContentDeserializer::store_annotation(&mut values, value)?;
14908 }
14909 Ok(super::ComplexContentContent::Annotation(
14910 values.ok_or_else(|| ErrorKind::MissingElement("annotation".into()))?,
14911 ))
14912 }
14913 S::Restriction(mut values, deserializer) => {
14914 if let Some(deserializer) = deserializer {
14915 let value = deserializer.finish(reader)?;
14916 ComplexContentContentDeserializer::store_restriction(&mut values, value)?;
14917 }
14918 Ok(super::ComplexContentContent::Restriction(
14919 values.ok_or_else(|| ErrorKind::MissingElement("restriction".into()))?,
14920 ))
14921 }
14922 S::Extension(mut values, deserializer) => {
14923 if let Some(deserializer) = deserializer {
14924 let value = deserializer.finish(reader)?;
14925 ComplexContentContentDeserializer::store_extension(&mut values, value)?;
14926 }
14927 Ok(super::ComplexContentContent::Extension(values.ok_or_else(
14928 || ErrorKind::MissingElement("extension".into()),
14929 )?))
14930 }
14931 S::Done__(data) => Ok(data),
14932 S::Unknown__ => unreachable!(),
14933 }
14934 }
14935 fn store_annotation(
14936 values: &mut Option<super::Annotation>,
14937 value: super::Annotation,
14938 ) -> Result<(), Error> {
14939 if values.is_some() {
14940 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
14941 b"annotation",
14942 )))?;
14943 }
14944 *values = Some(value);
14945 Ok(())
14946 }
14947 fn store_restriction(
14948 values: &mut Option<super::RestrictionType>,
14949 value: super::RestrictionType,
14950 ) -> Result<(), Error> {
14951 if values.is_some() {
14952 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
14953 b"restriction",
14954 )))?;
14955 }
14956 *values = Some(value);
14957 Ok(())
14958 }
14959 fn store_extension(
14960 values: &mut Option<super::ExtensionType>,
14961 value: super::ExtensionType,
14962 ) -> Result<(), Error> {
14963 if values.is_some() {
14964 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
14965 b"extension",
14966 )))?;
14967 }
14968 *values = Some(value);
14969 Ok(())
14970 }
14971 fn handle_annotation<'de, R>(
14972 &mut self,
14973 reader: &R,
14974 mut values: Option<super::Annotation>,
14975 output: DeserializerOutput<'de, super::Annotation>,
14976 fallback: &mut Option<ComplexContentContentDeserializerState>,
14977 ) -> Result<ElementHandlerOutput<'de>, Error>
14978 where
14979 R: DeserializeReader,
14980 {
14981 let DeserializerOutput {
14982 artifact,
14983 event,
14984 allow_any,
14985 } = output;
14986 if artifact.is_none() {
14987 *self.state = match fallback.take() {
14988 None => ComplexContentContentDeserializerState::Init__,
14989 Some(ComplexContentContentDeserializerState::Annotation(
14990 _,
14991 Some(deserializer),
14992 )) => ComplexContentContentDeserializerState::Annotation(
14993 values,
14994 Some(deserializer),
14995 ),
14996 _ => unreachable!(),
14997 };
14998 return Ok(ElementHandlerOutput::break_(event, allow_any));
14999 }
15000 match fallback.take() {
15001 None => (),
15002 Some(ComplexContentContentDeserializerState::Annotation(_, Some(deserializer))) => {
15003 let data = deserializer.finish(reader)?;
15004 ComplexContentContentDeserializer::store_annotation(&mut values, data)?;
15005 }
15006 Some(_) => unreachable!(),
15007 }
15008 Ok(match artifact {
15009 DeserializerArtifact::None => unreachable!(),
15010 DeserializerArtifact::Data(data) => {
15011 ComplexContentContentDeserializer::store_annotation(&mut values, data)?;
15012 let data = ComplexContentContentDeserializer::finish_state(
15013 reader,
15014 ComplexContentContentDeserializerState::Annotation(values, None),
15015 )?;
15016 *self.state = ComplexContentContentDeserializerState::Done__(data);
15017 ElementHandlerOutput::Break { event, allow_any }
15018 }
15019 DeserializerArtifact::Deserializer(deserializer) => {
15020 *self.state = ComplexContentContentDeserializerState::Annotation(
15021 values,
15022 Some(deserializer),
15023 );
15024 ElementHandlerOutput::from_event_end(event, allow_any)
15025 }
15026 })
15027 }
15028 fn handle_restriction<'de, R>(
15029 &mut self,
15030 reader: &R,
15031 mut values: Option<super::RestrictionType>,
15032 output: DeserializerOutput<'de, super::RestrictionType>,
15033 fallback: &mut Option<ComplexContentContentDeserializerState>,
15034 ) -> Result<ElementHandlerOutput<'de>, Error>
15035 where
15036 R: DeserializeReader,
15037 {
15038 let DeserializerOutput {
15039 artifact,
15040 event,
15041 allow_any,
15042 } = output;
15043 if artifact.is_none() {
15044 *self.state = match fallback.take() {
15045 None => ComplexContentContentDeserializerState::Init__,
15046 Some(ComplexContentContentDeserializerState::Restriction(
15047 _,
15048 Some(deserializer),
15049 )) => ComplexContentContentDeserializerState::Restriction(
15050 values,
15051 Some(deserializer),
15052 ),
15053 _ => unreachable!(),
15054 };
15055 return Ok(ElementHandlerOutput::break_(event, allow_any));
15056 }
15057 match fallback.take() {
15058 None => (),
15059 Some(ComplexContentContentDeserializerState::Restriction(
15060 _,
15061 Some(deserializer),
15062 )) => {
15063 let data = deserializer.finish(reader)?;
15064 ComplexContentContentDeserializer::store_restriction(&mut values, data)?;
15065 }
15066 Some(_) => unreachable!(),
15067 }
15068 Ok(match artifact {
15069 DeserializerArtifact::None => unreachable!(),
15070 DeserializerArtifact::Data(data) => {
15071 ComplexContentContentDeserializer::store_restriction(&mut values, data)?;
15072 let data = ComplexContentContentDeserializer::finish_state(
15073 reader,
15074 ComplexContentContentDeserializerState::Restriction(values, None),
15075 )?;
15076 *self.state = ComplexContentContentDeserializerState::Done__(data);
15077 ElementHandlerOutput::Break { event, allow_any }
15078 }
15079 DeserializerArtifact::Deserializer(deserializer) => {
15080 *self.state = ComplexContentContentDeserializerState::Restriction(
15081 values,
15082 Some(deserializer),
15083 );
15084 ElementHandlerOutput::from_event_end(event, allow_any)
15085 }
15086 })
15087 }
15088 fn handle_extension<'de, R>(
15089 &mut self,
15090 reader: &R,
15091 mut values: Option<super::ExtensionType>,
15092 output: DeserializerOutput<'de, super::ExtensionType>,
15093 fallback: &mut Option<ComplexContentContentDeserializerState>,
15094 ) -> Result<ElementHandlerOutput<'de>, Error>
15095 where
15096 R: DeserializeReader,
15097 {
15098 let DeserializerOutput {
15099 artifact,
15100 event,
15101 allow_any,
15102 } = output;
15103 if artifact.is_none() {
15104 *self.state = match fallback.take() {
15105 None => ComplexContentContentDeserializerState::Init__,
15106 Some(ComplexContentContentDeserializerState::Extension(
15107 _,
15108 Some(deserializer),
15109 )) => ComplexContentContentDeserializerState::Extension(
15110 values,
15111 Some(deserializer),
15112 ),
15113 _ => unreachable!(),
15114 };
15115 return Ok(ElementHandlerOutput::break_(event, allow_any));
15116 }
15117 match fallback.take() {
15118 None => (),
15119 Some(ComplexContentContentDeserializerState::Extension(_, Some(deserializer))) => {
15120 let data = deserializer.finish(reader)?;
15121 ComplexContentContentDeserializer::store_extension(&mut values, data)?;
15122 }
15123 Some(_) => unreachable!(),
15124 }
15125 Ok(match artifact {
15126 DeserializerArtifact::None => unreachable!(),
15127 DeserializerArtifact::Data(data) => {
15128 ComplexContentContentDeserializer::store_extension(&mut values, data)?;
15129 let data = ComplexContentContentDeserializer::finish_state(
15130 reader,
15131 ComplexContentContentDeserializerState::Extension(values, None),
15132 )?;
15133 *self.state = ComplexContentContentDeserializerState::Done__(data);
15134 ElementHandlerOutput::Break { event, allow_any }
15135 }
15136 DeserializerArtifact::Deserializer(deserializer) => {
15137 *self.state = ComplexContentContentDeserializerState::Extension(
15138 values,
15139 Some(deserializer),
15140 );
15141 ElementHandlerOutput::from_event_end(event, allow_any)
15142 }
15143 })
15144 }
15145 }
15146 impl<'de> Deserializer<'de, super::ComplexContentContent>
15147 for Box<ComplexContentContentDeserializer>
15148 {
15149 fn init<R>(
15150 reader: &R,
15151 event: Event<'de>,
15152 ) -> DeserializerResult<'de, super::ComplexContentContent>
15153 where
15154 R: DeserializeReader,
15155 {
15156 let deserializer = Box::new(ComplexContentContentDeserializer {
15157 state: Box::new(ComplexContentContentDeserializerState::Init__),
15158 });
15159 let mut output = deserializer.next(reader, event)?;
15160 output.artifact = match output.artifact {
15161 DeserializerArtifact::Deserializer(x)
15162 if matches!(&*x.state, ComplexContentContentDeserializerState::Init__) =>
15163 {
15164 DeserializerArtifact::None
15165 }
15166 artifact => artifact,
15167 };
15168 Ok(output)
15169 }
15170 fn next<R>(
15171 mut self,
15172 reader: &R,
15173 event: Event<'de>,
15174 ) -> DeserializerResult<'de, super::ComplexContentContent>
15175 where
15176 R: DeserializeReader,
15177 {
15178 use ComplexContentContentDeserializerState as S;
15179 let mut event = event;
15180 let mut fallback = None;
15181 let (event, allow_any) = loop {
15182 let state = replace(&mut *self.state, S::Unknown__);
15183 event = match (state, event) {
15184 (S::Annotation(values, Some(deserializer)), event) => {
15185 let output = deserializer.next(reader, event)?;
15186 match self.handle_annotation(reader, values, output, &mut fallback)? {
15187 ElementHandlerOutput::Break { event, allow_any } => {
15188 break (event, allow_any)
15189 }
15190 ElementHandlerOutput::Continue { event, .. } => event,
15191 }
15192 }
15193 (S::Restriction(values, Some(deserializer)), event) => {
15194 let output = deserializer.next(reader, event)?;
15195 match self.handle_restriction(reader, values, output, &mut fallback)? {
15196 ElementHandlerOutput::Break { event, allow_any } => {
15197 break (event, allow_any)
15198 }
15199 ElementHandlerOutput::Continue { event, .. } => event,
15200 }
15201 }
15202 (S::Extension(values, Some(deserializer)), event) => {
15203 let output = deserializer.next(reader, event)?;
15204 match self.handle_extension(reader, values, output, &mut fallback)? {
15205 ElementHandlerOutput::Break { event, allow_any } => {
15206 break (event, allow_any)
15207 }
15208 ElementHandlerOutput::Continue { event, .. } => event,
15209 }
15210 }
15211 (state, event @ Event::End(_)) => {
15212 return Ok(DeserializerOutput {
15213 artifact: DeserializerArtifact::Data(
15214 ComplexContentContentDeserializer::finish_state(reader, state)?,
15215 ),
15216 event: DeserializerEvent::Continue(event),
15217 allow_any: false,
15218 });
15219 }
15220 (S::Init__, event) => match self.find_suitable(reader, event, &mut fallback)? {
15221 ElementHandlerOutput::Break { event, allow_any } => {
15222 break (event, allow_any)
15223 }
15224 ElementHandlerOutput::Continue { event, .. } => event,
15225 },
15226 (S::Annotation(values, None), event) => {
15227 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
15228 reader, event,
15229 )?;
15230 match self.handle_annotation(reader, values, output, &mut fallback)? {
15231 ElementHandlerOutput::Break { event, allow_any } => {
15232 break (event, allow_any)
15233 }
15234 ElementHandlerOutput::Continue { event, .. } => event,
15235 }
15236 }
15237 (S::Restriction(values, None), event) => {
15238 let output =
15239 <super::RestrictionType as WithDeserializer>::Deserializer::init(
15240 reader, event,
15241 )?;
15242 match self.handle_restriction(reader, values, output, &mut fallback)? {
15243 ElementHandlerOutput::Break { event, allow_any } => {
15244 break (event, allow_any)
15245 }
15246 ElementHandlerOutput::Continue { event, .. } => event,
15247 }
15248 }
15249 (S::Extension(values, None), event) => {
15250 let output =
15251 <super::ExtensionType as WithDeserializer>::Deserializer::init(
15252 reader, event,
15253 )?;
15254 match self.handle_extension(reader, values, output, &mut fallback)? {
15255 ElementHandlerOutput::Break { event, allow_any } => {
15256 break (event, allow_any)
15257 }
15258 ElementHandlerOutput::Continue { event, .. } => event,
15259 }
15260 }
15261 (s @ S::Done__(_), event) => {
15262 *self.state = s;
15263 break (DeserializerEvent::Continue(event), false);
15264 }
15265 (S::Unknown__, _) => unreachable!(),
15266 }
15267 };
15268 let artifact = if matches!(&*self.state, S::Done__(_)) {
15269 DeserializerArtifact::Data(self.finish(reader)?)
15270 } else {
15271 DeserializerArtifact::Deserializer(self)
15272 };
15273 Ok(DeserializerOutput {
15274 artifact,
15275 event,
15276 allow_any,
15277 })
15278 }
15279 fn finish<R>(self, reader: &R) -> Result<super::ComplexContentContent, Error>
15280 where
15281 R: DeserializeReader,
15282 {
15283 ComplexContentContentDeserializer::finish_state(reader, *self.state)
15284 }
15285 }
15286 #[derive(Debug)]
15287 pub struct OpenContentDeserializer {
15288 id: Option<String>,
15289 mode: super::OpenContentModeType,
15290 annotation: Option<super::Annotation>,
15291 any: Option<super::WildcardType>,
15292 state: Box<OpenContentDeserializerState>,
15293 }
15294 #[derive(Debug)]
15295 enum OpenContentDeserializerState {
15296 Init__,
15297 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
15298 Any(Option<<super::WildcardType as WithDeserializer>::Deserializer>),
15299 Done__,
15300 Unknown__,
15301 }
15302 impl OpenContentDeserializer {
15303 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
15304 where
15305 R: DeserializeReader,
15306 {
15307 let mut id: Option<String> = None;
15308 let mut mode: Option<super::OpenContentModeType> = None;
15309 for attrib in filter_xmlns_attributes(bytes_start) {
15310 let attrib = attrib?;
15311 if matches!(
15312 reader.resolve_local_name(attrib.key, &super::NS_XS),
15313 Some(b"id")
15314 ) {
15315 reader.read_attrib(&mut id, b"id", &attrib.value)?;
15316 } else if matches!(
15317 reader.resolve_local_name(attrib.key, &super::NS_XS),
15318 Some(b"mode")
15319 ) {
15320 reader.read_attrib(&mut mode, b"mode", &attrib.value)?;
15321 }
15322 }
15323 Ok(Box::new(Self {
15324 id: id,
15325 mode: mode.unwrap_or_else(super::OpenContent::default_mode),
15326 annotation: None,
15327 any: None,
15328 state: Box::new(OpenContentDeserializerState::Init__),
15329 }))
15330 }
15331 fn finish_state<R>(
15332 &mut self,
15333 reader: &R,
15334 state: OpenContentDeserializerState,
15335 ) -> Result<(), Error>
15336 where
15337 R: DeserializeReader,
15338 {
15339 use OpenContentDeserializerState as S;
15340 match state {
15341 S::Annotation(Some(deserializer)) => {
15342 self.store_annotation(deserializer.finish(reader)?)?
15343 }
15344 S::Any(Some(deserializer)) => self.store_any(deserializer.finish(reader)?)?,
15345 _ => (),
15346 }
15347 Ok(())
15348 }
15349 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
15350 if self.annotation.is_some() {
15351 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
15352 b"annotation",
15353 )))?;
15354 }
15355 self.annotation = Some(value);
15356 Ok(())
15357 }
15358 fn store_any(&mut self, value: super::WildcardType) -> Result<(), Error> {
15359 if self.any.is_some() {
15360 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"any")))?;
15361 }
15362 self.any = Some(value);
15363 Ok(())
15364 }
15365 fn handle_annotation<'de, R>(
15366 &mut self,
15367 reader: &R,
15368 output: DeserializerOutput<'de, super::Annotation>,
15369 fallback: &mut Option<OpenContentDeserializerState>,
15370 ) -> Result<ElementHandlerOutput<'de>, Error>
15371 where
15372 R: DeserializeReader,
15373 {
15374 let DeserializerOutput {
15375 artifact,
15376 event,
15377 allow_any,
15378 } = output;
15379 if artifact.is_none() {
15380 fallback.get_or_insert(OpenContentDeserializerState::Annotation(None));
15381 *self.state = OpenContentDeserializerState::Any(None);
15382 return Ok(ElementHandlerOutput::from_event(event, allow_any));
15383 }
15384 if let Some(fallback) = fallback.take() {
15385 self.finish_state(reader, fallback)?;
15386 }
15387 Ok(match artifact {
15388 DeserializerArtifact::None => unreachable!(),
15389 DeserializerArtifact::Data(data) => {
15390 self.store_annotation(data)?;
15391 *self.state = OpenContentDeserializerState::Any(None);
15392 ElementHandlerOutput::from_event(event, allow_any)
15393 }
15394 DeserializerArtifact::Deserializer(deserializer) => {
15395 let ret = ElementHandlerOutput::from_event(event, allow_any);
15396 match &ret {
15397 ElementHandlerOutput::Continue { .. } => {
15398 fallback.get_or_insert(OpenContentDeserializerState::Annotation(Some(
15399 deserializer,
15400 )));
15401 *self.state = OpenContentDeserializerState::Any(None);
15402 }
15403 ElementHandlerOutput::Break { .. } => {
15404 *self.state =
15405 OpenContentDeserializerState::Annotation(Some(deserializer));
15406 }
15407 }
15408 ret
15409 }
15410 })
15411 }
15412 fn handle_any<'de, R>(
15413 &mut self,
15414 reader: &R,
15415 output: DeserializerOutput<'de, super::WildcardType>,
15416 fallback: &mut Option<OpenContentDeserializerState>,
15417 ) -> Result<ElementHandlerOutput<'de>, Error>
15418 where
15419 R: DeserializeReader,
15420 {
15421 let DeserializerOutput {
15422 artifact,
15423 event,
15424 allow_any,
15425 } = output;
15426 if artifact.is_none() {
15427 fallback.get_or_insert(OpenContentDeserializerState::Any(None));
15428 *self.state = OpenContentDeserializerState::Done__;
15429 return Ok(ElementHandlerOutput::from_event(event, allow_any));
15430 }
15431 if let Some(fallback) = fallback.take() {
15432 self.finish_state(reader, fallback)?;
15433 }
15434 Ok(match artifact {
15435 DeserializerArtifact::None => unreachable!(),
15436 DeserializerArtifact::Data(data) => {
15437 self.store_any(data)?;
15438 *self.state = OpenContentDeserializerState::Done__;
15439 ElementHandlerOutput::from_event(event, allow_any)
15440 }
15441 DeserializerArtifact::Deserializer(deserializer) => {
15442 let ret = ElementHandlerOutput::from_event(event, allow_any);
15443 match &ret {
15444 ElementHandlerOutput::Continue { .. } => {
15445 fallback.get_or_insert(OpenContentDeserializerState::Any(Some(
15446 deserializer,
15447 )));
15448 *self.state = OpenContentDeserializerState::Done__;
15449 }
15450 ElementHandlerOutput::Break { .. } => {
15451 *self.state = OpenContentDeserializerState::Any(Some(deserializer));
15452 }
15453 }
15454 ret
15455 }
15456 })
15457 }
15458 }
15459 impl<'de> Deserializer<'de, super::OpenContent> for Box<OpenContentDeserializer> {
15460 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::OpenContent>
15461 where
15462 R: DeserializeReader,
15463 {
15464 reader.init_deserializer_from_start_event(
15465 event,
15466 OpenContentDeserializer::from_bytes_start,
15467 )
15468 }
15469 fn next<R>(
15470 mut self,
15471 reader: &R,
15472 event: Event<'de>,
15473 ) -> DeserializerResult<'de, super::OpenContent>
15474 where
15475 R: DeserializeReader,
15476 {
15477 use OpenContentDeserializerState as S;
15478 let mut event = event;
15479 let mut fallback = None;
15480 let mut allow_any_element = false;
15481 let (event, allow_any) = loop {
15482 let state = replace(&mut *self.state, S::Unknown__);
15483 event = match (state, event) {
15484 (S::Annotation(Some(deserializer)), event) => {
15485 let output = deserializer.next(reader, event)?;
15486 match self.handle_annotation(reader, output, &mut fallback)? {
15487 ElementHandlerOutput::Continue { event, allow_any } => {
15488 allow_any_element = allow_any_element || allow_any;
15489 event
15490 }
15491 ElementHandlerOutput::Break { event, allow_any } => {
15492 break (event, allow_any)
15493 }
15494 }
15495 }
15496 (S::Any(Some(deserializer)), event) => {
15497 let output = deserializer.next(reader, event)?;
15498 match self.handle_any(reader, output, &mut fallback)? {
15499 ElementHandlerOutput::Continue { event, allow_any } => {
15500 allow_any_element = allow_any_element || allow_any;
15501 event
15502 }
15503 ElementHandlerOutput::Break { event, allow_any } => {
15504 break (event, allow_any)
15505 }
15506 }
15507 }
15508 (_, Event::End(_)) => {
15509 if let Some(fallback) = fallback.take() {
15510 self.finish_state(reader, fallback)?;
15511 }
15512 return Ok(DeserializerOutput {
15513 artifact: DeserializerArtifact::Data(self.finish(reader)?),
15514 event: DeserializerEvent::None,
15515 allow_any: false,
15516 });
15517 }
15518 (S::Init__, event) => {
15519 fallback.get_or_insert(S::Init__);
15520 *self.state = OpenContentDeserializerState::Annotation(None);
15521 event
15522 }
15523 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
15524 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
15525 let output =
15526 <super::Annotation as WithDeserializer>::Deserializer::init(
15527 reader, event,
15528 )?;
15529 match self.handle_annotation(reader, output, &mut fallback)? {
15530 ElementHandlerOutput::Continue { event, allow_any } => {
15531 allow_any_element = allow_any_element || allow_any;
15532 event
15533 }
15534 ElementHandlerOutput::Break { event, allow_any } => {
15535 break (event, allow_any)
15536 }
15537 }
15538 } else {
15539 *self.state = S::Any(None);
15540 allow_any_element = true;
15541 fallback.get_or_insert(S::Annotation(None));
15542 event
15543 }
15544 }
15545 (S::Any(None), event @ (Event::Start(_) | Event::Empty(_))) => {
15546 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"any") {
15547 let output =
15548 <super::WildcardType as WithDeserializer>::Deserializer::init(
15549 reader, event,
15550 )?;
15551 match self.handle_any(reader, output, &mut fallback)? {
15552 ElementHandlerOutput::Continue { event, allow_any } => {
15553 allow_any_element = allow_any_element || allow_any;
15554 event
15555 }
15556 ElementHandlerOutput::Break { event, allow_any } => {
15557 break (event, allow_any)
15558 }
15559 }
15560 } else {
15561 *self.state = S::Done__;
15562 allow_any_element = true;
15563 fallback.get_or_insert(S::Any(None));
15564 event
15565 }
15566 }
15567 (S::Done__, event) => {
15568 fallback.get_or_insert(S::Done__);
15569 break (DeserializerEvent::Continue(event), allow_any_element);
15570 }
15571 (S::Unknown__, _) => unreachable!(),
15572 (state, event) => {
15573 *self.state = state;
15574 break (DeserializerEvent::Break(event), false);
15575 }
15576 }
15577 };
15578 if let Some(fallback) = fallback {
15579 *self.state = fallback;
15580 }
15581 Ok(DeserializerOutput {
15582 artifact: DeserializerArtifact::Deserializer(self),
15583 event,
15584 allow_any,
15585 })
15586 }
15587 fn finish<R>(mut self, reader: &R) -> Result<super::OpenContent, Error>
15588 where
15589 R: DeserializeReader,
15590 {
15591 let state = replace(&mut *self.state, OpenContentDeserializerState::Unknown__);
15592 self.finish_state(reader, state)?;
15593 Ok(super::OpenContent {
15594 id: self.id,
15595 mode: self.mode,
15596 annotation: self.annotation,
15597 any: self.any,
15598 })
15599 }
15600 }
15601 #[derive(Debug)]
15602 pub struct AnyAttributeDeserializer {
15603 id: Option<String>,
15604 namespace: Option<super::NamespaceListType>,
15605 not_namespace: Option<super::BasicNamespaceListType>,
15606 process_contents: super::ProcessContentsType,
15607 not_q_name: Option<super::QnameListAType>,
15608 annotation: Option<super::Annotation>,
15609 state: Box<AnyAttributeDeserializerState>,
15610 }
15611 #[derive(Debug)]
15612 enum AnyAttributeDeserializerState {
15613 Init__,
15614 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
15615 Done__,
15616 Unknown__,
15617 }
15618 impl AnyAttributeDeserializer {
15619 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
15620 where
15621 R: DeserializeReader,
15622 {
15623 let mut id: Option<String> = None;
15624 let mut namespace: Option<super::NamespaceListType> = None;
15625 let mut not_namespace: Option<super::BasicNamespaceListType> = None;
15626 let mut process_contents: Option<super::ProcessContentsType> = None;
15627 let mut not_q_name: Option<super::QnameListAType> = None;
15628 for attrib in filter_xmlns_attributes(bytes_start) {
15629 let attrib = attrib?;
15630 if matches!(
15631 reader.resolve_local_name(attrib.key, &super::NS_XS),
15632 Some(b"id")
15633 ) {
15634 reader.read_attrib(&mut id, b"id", &attrib.value)?;
15635 } else if matches!(
15636 reader.resolve_local_name(attrib.key, &super::NS_XS),
15637 Some(b"namespace")
15638 ) {
15639 reader.read_attrib(&mut namespace, b"namespace", &attrib.value)?;
15640 } else if matches!(
15641 reader.resolve_local_name(attrib.key, &super::NS_XS),
15642 Some(b"notNamespace")
15643 ) {
15644 reader.read_attrib(&mut not_namespace, b"notNamespace", &attrib.value)?;
15645 } else if matches!(
15646 reader.resolve_local_name(attrib.key, &super::NS_XS),
15647 Some(b"processContents")
15648 ) {
15649 reader.read_attrib(&mut process_contents, b"processContents", &attrib.value)?;
15650 } else if matches!(
15651 reader.resolve_local_name(attrib.key, &super::NS_XS),
15652 Some(b"notQName")
15653 ) {
15654 reader.read_attrib(&mut not_q_name, b"notQName", &attrib.value)?;
15655 }
15656 }
15657 Ok(Box::new(Self {
15658 id: id,
15659 namespace: namespace,
15660 not_namespace: not_namespace,
15661 process_contents: process_contents
15662 .unwrap_or_else(super::AnyAttribute::default_process_contents),
15663 not_q_name: not_q_name,
15664 annotation: None,
15665 state: Box::new(AnyAttributeDeserializerState::Init__),
15666 }))
15667 }
15668 fn finish_state<R>(
15669 &mut self,
15670 reader: &R,
15671 state: AnyAttributeDeserializerState,
15672 ) -> Result<(), Error>
15673 where
15674 R: DeserializeReader,
15675 {
15676 use AnyAttributeDeserializerState as S;
15677 match state {
15678 S::Annotation(Some(deserializer)) => {
15679 self.store_annotation(deserializer.finish(reader)?)?
15680 }
15681 _ => (),
15682 }
15683 Ok(())
15684 }
15685 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
15686 if self.annotation.is_some() {
15687 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
15688 b"annotation",
15689 )))?;
15690 }
15691 self.annotation = Some(value);
15692 Ok(())
15693 }
15694 fn handle_annotation<'de, R>(
15695 &mut self,
15696 reader: &R,
15697 output: DeserializerOutput<'de, super::Annotation>,
15698 fallback: &mut Option<AnyAttributeDeserializerState>,
15699 ) -> Result<ElementHandlerOutput<'de>, Error>
15700 where
15701 R: DeserializeReader,
15702 {
15703 let DeserializerOutput {
15704 artifact,
15705 event,
15706 allow_any,
15707 } = output;
15708 if artifact.is_none() {
15709 fallback.get_or_insert(AnyAttributeDeserializerState::Annotation(None));
15710 *self.state = AnyAttributeDeserializerState::Done__;
15711 return Ok(ElementHandlerOutput::from_event(event, allow_any));
15712 }
15713 if let Some(fallback) = fallback.take() {
15714 self.finish_state(reader, fallback)?;
15715 }
15716 Ok(match artifact {
15717 DeserializerArtifact::None => unreachable!(),
15718 DeserializerArtifact::Data(data) => {
15719 self.store_annotation(data)?;
15720 *self.state = AnyAttributeDeserializerState::Done__;
15721 ElementHandlerOutput::from_event(event, allow_any)
15722 }
15723 DeserializerArtifact::Deserializer(deserializer) => {
15724 let ret = ElementHandlerOutput::from_event(event, allow_any);
15725 match &ret {
15726 ElementHandlerOutput::Continue { .. } => {
15727 fallback.get_or_insert(AnyAttributeDeserializerState::Annotation(
15728 Some(deserializer),
15729 ));
15730 *self.state = AnyAttributeDeserializerState::Done__;
15731 }
15732 ElementHandlerOutput::Break { .. } => {
15733 *self.state =
15734 AnyAttributeDeserializerState::Annotation(Some(deserializer));
15735 }
15736 }
15737 ret
15738 }
15739 })
15740 }
15741 }
15742 impl<'de> Deserializer<'de, super::AnyAttribute> for Box<AnyAttributeDeserializer> {
15743 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::AnyAttribute>
15744 where
15745 R: DeserializeReader,
15746 {
15747 reader.init_deserializer_from_start_event(
15748 event,
15749 AnyAttributeDeserializer::from_bytes_start,
15750 )
15751 }
15752 fn next<R>(
15753 mut self,
15754 reader: &R,
15755 event: Event<'de>,
15756 ) -> DeserializerResult<'de, super::AnyAttribute>
15757 where
15758 R: DeserializeReader,
15759 {
15760 use AnyAttributeDeserializerState as S;
15761 let mut event = event;
15762 let mut fallback = None;
15763 let mut allow_any_element = false;
15764 let (event, allow_any) = loop {
15765 let state = replace(&mut *self.state, S::Unknown__);
15766 event = match (state, event) {
15767 (S::Annotation(Some(deserializer)), event) => {
15768 let output = deserializer.next(reader, event)?;
15769 match self.handle_annotation(reader, output, &mut fallback)? {
15770 ElementHandlerOutput::Continue { event, allow_any } => {
15771 allow_any_element = allow_any_element || allow_any;
15772 event
15773 }
15774 ElementHandlerOutput::Break { event, allow_any } => {
15775 break (event, allow_any)
15776 }
15777 }
15778 }
15779 (_, Event::End(_)) => {
15780 if let Some(fallback) = fallback.take() {
15781 self.finish_state(reader, fallback)?;
15782 }
15783 return Ok(DeserializerOutput {
15784 artifact: DeserializerArtifact::Data(self.finish(reader)?),
15785 event: DeserializerEvent::None,
15786 allow_any: false,
15787 });
15788 }
15789 (S::Init__, event) => {
15790 fallback.get_or_insert(S::Init__);
15791 *self.state = AnyAttributeDeserializerState::Annotation(None);
15792 event
15793 }
15794 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
15795 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
15796 let output =
15797 <super::Annotation as WithDeserializer>::Deserializer::init(
15798 reader, event,
15799 )?;
15800 match self.handle_annotation(reader, output, &mut fallback)? {
15801 ElementHandlerOutput::Continue { event, allow_any } => {
15802 allow_any_element = allow_any_element || allow_any;
15803 event
15804 }
15805 ElementHandlerOutput::Break { event, allow_any } => {
15806 break (event, allow_any)
15807 }
15808 }
15809 } else {
15810 *self.state = S::Done__;
15811 allow_any_element = true;
15812 fallback.get_or_insert(S::Annotation(None));
15813 event
15814 }
15815 }
15816 (S::Done__, event) => {
15817 fallback.get_or_insert(S::Done__);
15818 break (DeserializerEvent::Continue(event), allow_any_element);
15819 }
15820 (S::Unknown__, _) => unreachable!(),
15821 (state, event) => {
15822 *self.state = state;
15823 break (DeserializerEvent::Break(event), false);
15824 }
15825 }
15826 };
15827 if let Some(fallback) = fallback {
15828 *self.state = fallback;
15829 }
15830 Ok(DeserializerOutput {
15831 artifact: DeserializerArtifact::Deserializer(self),
15832 event,
15833 allow_any,
15834 })
15835 }
15836 fn finish<R>(mut self, reader: &R) -> Result<super::AnyAttribute, Error>
15837 where
15838 R: DeserializeReader,
15839 {
15840 let state = replace(&mut *self.state, AnyAttributeDeserializerState::Unknown__);
15841 self.finish_state(reader, state)?;
15842 Ok(super::AnyAttribute {
15843 id: self.id,
15844 namespace: self.namespace,
15845 not_namespace: self.not_namespace,
15846 process_contents: self.process_contents,
15847 not_q_name: self.not_q_name,
15848 annotation: self.annotation,
15849 })
15850 }
15851 }
15852 #[derive(Debug)]
15853 pub struct AssertionTypeDeserializer {
15854 id: Option<String>,
15855 test: Option<String>,
15856 xpath_default_namespace: Option<super::XpathDefaultNamespaceType>,
15857 annotation: Option<super::Annotation>,
15858 state: Box<AssertionTypeDeserializerState>,
15859 }
15860 #[derive(Debug)]
15861 enum AssertionTypeDeserializerState {
15862 Init__,
15863 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
15864 Done__,
15865 Unknown__,
15866 }
15867 impl AssertionTypeDeserializer {
15868 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
15869 where
15870 R: DeserializeReader,
15871 {
15872 let mut id: Option<String> = None;
15873 let mut test: Option<String> = None;
15874 let mut xpath_default_namespace: Option<super::XpathDefaultNamespaceType> = None;
15875 for attrib in filter_xmlns_attributes(bytes_start) {
15876 let attrib = attrib?;
15877 if matches!(
15878 reader.resolve_local_name(attrib.key, &super::NS_XS),
15879 Some(b"id")
15880 ) {
15881 reader.read_attrib(&mut id, b"id", &attrib.value)?;
15882 } else if matches!(
15883 reader.resolve_local_name(attrib.key, &super::NS_XS),
15884 Some(b"test")
15885 ) {
15886 reader.read_attrib(&mut test, b"test", &attrib.value)?;
15887 } else if matches!(
15888 reader.resolve_local_name(attrib.key, &super::NS_XS),
15889 Some(b"xpathDefaultNamespace")
15890 ) {
15891 reader.read_attrib(
15892 &mut xpath_default_namespace,
15893 b"xpathDefaultNamespace",
15894 &attrib.value,
15895 )?;
15896 }
15897 }
15898 Ok(Box::new(Self {
15899 id: id,
15900 test: test,
15901 xpath_default_namespace: xpath_default_namespace,
15902 annotation: None,
15903 state: Box::new(AssertionTypeDeserializerState::Init__),
15904 }))
15905 }
15906 fn finish_state<R>(
15907 &mut self,
15908 reader: &R,
15909 state: AssertionTypeDeserializerState,
15910 ) -> Result<(), Error>
15911 where
15912 R: DeserializeReader,
15913 {
15914 use AssertionTypeDeserializerState as S;
15915 match state {
15916 S::Annotation(Some(deserializer)) => {
15917 self.store_annotation(deserializer.finish(reader)?)?
15918 }
15919 _ => (),
15920 }
15921 Ok(())
15922 }
15923 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
15924 if self.annotation.is_some() {
15925 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
15926 b"annotation",
15927 )))?;
15928 }
15929 self.annotation = Some(value);
15930 Ok(())
15931 }
15932 fn handle_annotation<'de, R>(
15933 &mut self,
15934 reader: &R,
15935 output: DeserializerOutput<'de, super::Annotation>,
15936 fallback: &mut Option<AssertionTypeDeserializerState>,
15937 ) -> Result<ElementHandlerOutput<'de>, Error>
15938 where
15939 R: DeserializeReader,
15940 {
15941 let DeserializerOutput {
15942 artifact,
15943 event,
15944 allow_any,
15945 } = output;
15946 if artifact.is_none() {
15947 fallback.get_or_insert(AssertionTypeDeserializerState::Annotation(None));
15948 *self.state = AssertionTypeDeserializerState::Done__;
15949 return Ok(ElementHandlerOutput::from_event(event, allow_any));
15950 }
15951 if let Some(fallback) = fallback.take() {
15952 self.finish_state(reader, fallback)?;
15953 }
15954 Ok(match artifact {
15955 DeserializerArtifact::None => unreachable!(),
15956 DeserializerArtifact::Data(data) => {
15957 self.store_annotation(data)?;
15958 *self.state = AssertionTypeDeserializerState::Done__;
15959 ElementHandlerOutput::from_event(event, allow_any)
15960 }
15961 DeserializerArtifact::Deserializer(deserializer) => {
15962 let ret = ElementHandlerOutput::from_event(event, allow_any);
15963 match &ret {
15964 ElementHandlerOutput::Continue { .. } => {
15965 fallback.get_or_insert(AssertionTypeDeserializerState::Annotation(
15966 Some(deserializer),
15967 ));
15968 *self.state = AssertionTypeDeserializerState::Done__;
15969 }
15970 ElementHandlerOutput::Break { .. } => {
15971 *self.state =
15972 AssertionTypeDeserializerState::Annotation(Some(deserializer));
15973 }
15974 }
15975 ret
15976 }
15977 })
15978 }
15979 }
15980 impl<'de> Deserializer<'de, super::AssertionType> for Box<AssertionTypeDeserializer> {
15981 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::AssertionType>
15982 where
15983 R: DeserializeReader,
15984 {
15985 reader.init_deserializer_from_start_event(
15986 event,
15987 AssertionTypeDeserializer::from_bytes_start,
15988 )
15989 }
15990 fn next<R>(
15991 mut self,
15992 reader: &R,
15993 event: Event<'de>,
15994 ) -> DeserializerResult<'de, super::AssertionType>
15995 where
15996 R: DeserializeReader,
15997 {
15998 use AssertionTypeDeserializerState as S;
15999 let mut event = event;
16000 let mut fallback = None;
16001 let mut allow_any_element = false;
16002 let (event, allow_any) = loop {
16003 let state = replace(&mut *self.state, S::Unknown__);
16004 event = match (state, event) {
16005 (S::Annotation(Some(deserializer)), event) => {
16006 let output = deserializer.next(reader, event)?;
16007 match self.handle_annotation(reader, output, &mut fallback)? {
16008 ElementHandlerOutput::Continue { event, allow_any } => {
16009 allow_any_element = allow_any_element || allow_any;
16010 event
16011 }
16012 ElementHandlerOutput::Break { event, allow_any } => {
16013 break (event, allow_any)
16014 }
16015 }
16016 }
16017 (_, Event::End(_)) => {
16018 if let Some(fallback) = fallback.take() {
16019 self.finish_state(reader, fallback)?;
16020 }
16021 return Ok(DeserializerOutput {
16022 artifact: DeserializerArtifact::Data(self.finish(reader)?),
16023 event: DeserializerEvent::None,
16024 allow_any: false,
16025 });
16026 }
16027 (S::Init__, event) => {
16028 fallback.get_or_insert(S::Init__);
16029 *self.state = AssertionTypeDeserializerState::Annotation(None);
16030 event
16031 }
16032 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
16033 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
16034 let output =
16035 <super::Annotation as WithDeserializer>::Deserializer::init(
16036 reader, event,
16037 )?;
16038 match self.handle_annotation(reader, output, &mut fallback)? {
16039 ElementHandlerOutput::Continue { event, allow_any } => {
16040 allow_any_element = allow_any_element || allow_any;
16041 event
16042 }
16043 ElementHandlerOutput::Break { event, allow_any } => {
16044 break (event, allow_any)
16045 }
16046 }
16047 } else {
16048 *self.state = S::Done__;
16049 allow_any_element = true;
16050 fallback.get_or_insert(S::Annotation(None));
16051 event
16052 }
16053 }
16054 (S::Done__, event) => {
16055 fallback.get_or_insert(S::Done__);
16056 break (DeserializerEvent::Continue(event), allow_any_element);
16057 }
16058 (S::Unknown__, _) => unreachable!(),
16059 (state, event) => {
16060 *self.state = state;
16061 break (DeserializerEvent::Break(event), false);
16062 }
16063 }
16064 };
16065 if let Some(fallback) = fallback {
16066 *self.state = fallback;
16067 }
16068 Ok(DeserializerOutput {
16069 artifact: DeserializerArtifact::Deserializer(self),
16070 event,
16071 allow_any,
16072 })
16073 }
16074 fn finish<R>(mut self, reader: &R) -> Result<super::AssertionType, Error>
16075 where
16076 R: DeserializeReader,
16077 {
16078 let state = replace(&mut *self.state, AssertionTypeDeserializerState::Unknown__);
16079 self.finish_state(reader, state)?;
16080 Ok(super::AssertionType {
16081 id: self.id,
16082 test: self.test,
16083 xpath_default_namespace: self.xpath_default_namespace,
16084 annotation: self.annotation,
16085 })
16086 }
16087 }
16088 #[derive(Debug)]
16089 pub struct AnyDeserializer {
16090 id: Option<String>,
16091 namespace: Option<super::NamespaceListType>,
16092 not_namespace: Option<super::BasicNamespaceListType>,
16093 process_contents: super::ProcessContentsType,
16094 not_q_name: Option<super::QnameListType>,
16095 min_occurs: usize,
16096 max_occurs: super::MaxOccurs,
16097 annotation: Option<super::Annotation>,
16098 state: Box<AnyDeserializerState>,
16099 }
16100 #[derive(Debug)]
16101 enum AnyDeserializerState {
16102 Init__,
16103 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
16104 Done__,
16105 Unknown__,
16106 }
16107 impl AnyDeserializer {
16108 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
16109 where
16110 R: DeserializeReader,
16111 {
16112 let mut id: Option<String> = None;
16113 let mut namespace: Option<super::NamespaceListType> = None;
16114 let mut not_namespace: Option<super::BasicNamespaceListType> = None;
16115 let mut process_contents: Option<super::ProcessContentsType> = None;
16116 let mut not_q_name: Option<super::QnameListType> = None;
16117 let mut min_occurs: Option<usize> = None;
16118 let mut max_occurs: Option<super::MaxOccurs> = None;
16119 for attrib in filter_xmlns_attributes(bytes_start) {
16120 let attrib = attrib?;
16121 if matches!(
16122 reader.resolve_local_name(attrib.key, &super::NS_XS),
16123 Some(b"id")
16124 ) {
16125 reader.read_attrib(&mut id, b"id", &attrib.value)?;
16126 } else if matches!(
16127 reader.resolve_local_name(attrib.key, &super::NS_XS),
16128 Some(b"namespace")
16129 ) {
16130 reader.read_attrib(&mut namespace, b"namespace", &attrib.value)?;
16131 } else if matches!(
16132 reader.resolve_local_name(attrib.key, &super::NS_XS),
16133 Some(b"notNamespace")
16134 ) {
16135 reader.read_attrib(&mut not_namespace, b"notNamespace", &attrib.value)?;
16136 } else if matches!(
16137 reader.resolve_local_name(attrib.key, &super::NS_XS),
16138 Some(b"processContents")
16139 ) {
16140 reader.read_attrib(&mut process_contents, b"processContents", &attrib.value)?;
16141 } else if matches!(
16142 reader.resolve_local_name(attrib.key, &super::NS_XS),
16143 Some(b"notQName")
16144 ) {
16145 reader.read_attrib(&mut not_q_name, b"notQName", &attrib.value)?;
16146 } else if matches!(
16147 reader.resolve_local_name(attrib.key, &super::NS_XS),
16148 Some(b"minOccurs")
16149 ) {
16150 reader.read_attrib(&mut min_occurs, b"minOccurs", &attrib.value)?;
16151 } else if matches!(
16152 reader.resolve_local_name(attrib.key, &super::NS_XS),
16153 Some(b"maxOccurs")
16154 ) {
16155 reader.read_attrib(&mut max_occurs, b"maxOccurs", &attrib.value)?;
16156 }
16157 }
16158 Ok(Box::new(Self {
16159 id: id,
16160 namespace: namespace,
16161 not_namespace: not_namespace,
16162 process_contents: process_contents
16163 .unwrap_or_else(super::Any::default_process_contents),
16164 not_q_name: not_q_name,
16165 min_occurs: min_occurs.unwrap_or_else(super::Any::default_min_occurs),
16166 max_occurs: max_occurs.unwrap_or_else(super::Any::default_max_occurs),
16167 annotation: None,
16168 state: Box::new(AnyDeserializerState::Init__),
16169 }))
16170 }
16171 fn finish_state<R>(&mut self, reader: &R, state: AnyDeserializerState) -> Result<(), Error>
16172 where
16173 R: DeserializeReader,
16174 {
16175 use AnyDeserializerState as S;
16176 match state {
16177 S::Annotation(Some(deserializer)) => {
16178 self.store_annotation(deserializer.finish(reader)?)?
16179 }
16180 _ => (),
16181 }
16182 Ok(())
16183 }
16184 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
16185 if self.annotation.is_some() {
16186 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
16187 b"annotation",
16188 )))?;
16189 }
16190 self.annotation = Some(value);
16191 Ok(())
16192 }
16193 fn handle_annotation<'de, R>(
16194 &mut self,
16195 reader: &R,
16196 output: DeserializerOutput<'de, super::Annotation>,
16197 fallback: &mut Option<AnyDeserializerState>,
16198 ) -> Result<ElementHandlerOutput<'de>, Error>
16199 where
16200 R: DeserializeReader,
16201 {
16202 let DeserializerOutput {
16203 artifact,
16204 event,
16205 allow_any,
16206 } = output;
16207 if artifact.is_none() {
16208 fallback.get_or_insert(AnyDeserializerState::Annotation(None));
16209 *self.state = AnyDeserializerState::Done__;
16210 return Ok(ElementHandlerOutput::from_event(event, allow_any));
16211 }
16212 if let Some(fallback) = fallback.take() {
16213 self.finish_state(reader, fallback)?;
16214 }
16215 Ok(match artifact {
16216 DeserializerArtifact::None => unreachable!(),
16217 DeserializerArtifact::Data(data) => {
16218 self.store_annotation(data)?;
16219 *self.state = AnyDeserializerState::Done__;
16220 ElementHandlerOutput::from_event(event, allow_any)
16221 }
16222 DeserializerArtifact::Deserializer(deserializer) => {
16223 let ret = ElementHandlerOutput::from_event(event, allow_any);
16224 match &ret {
16225 ElementHandlerOutput::Continue { .. } => {
16226 fallback.get_or_insert(AnyDeserializerState::Annotation(Some(
16227 deserializer,
16228 )));
16229 *self.state = AnyDeserializerState::Done__;
16230 }
16231 ElementHandlerOutput::Break { .. } => {
16232 *self.state = AnyDeserializerState::Annotation(Some(deserializer));
16233 }
16234 }
16235 ret
16236 }
16237 })
16238 }
16239 }
16240 impl<'de> Deserializer<'de, super::Any> for Box<AnyDeserializer> {
16241 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Any>
16242 where
16243 R: DeserializeReader,
16244 {
16245 reader.init_deserializer_from_start_event(event, AnyDeserializer::from_bytes_start)
16246 }
16247 fn next<R>(mut self, reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Any>
16248 where
16249 R: DeserializeReader,
16250 {
16251 use AnyDeserializerState as S;
16252 let mut event = event;
16253 let mut fallback = None;
16254 let mut allow_any_element = false;
16255 let (event, allow_any) = loop {
16256 let state = replace(&mut *self.state, S::Unknown__);
16257 event = match (state, event) {
16258 (S::Annotation(Some(deserializer)), event) => {
16259 let output = deserializer.next(reader, event)?;
16260 match self.handle_annotation(reader, output, &mut fallback)? {
16261 ElementHandlerOutput::Continue { event, allow_any } => {
16262 allow_any_element = allow_any_element || allow_any;
16263 event
16264 }
16265 ElementHandlerOutput::Break { event, allow_any } => {
16266 break (event, allow_any)
16267 }
16268 }
16269 }
16270 (_, Event::End(_)) => {
16271 if let Some(fallback) = fallback.take() {
16272 self.finish_state(reader, fallback)?;
16273 }
16274 return Ok(DeserializerOutput {
16275 artifact: DeserializerArtifact::Data(self.finish(reader)?),
16276 event: DeserializerEvent::None,
16277 allow_any: false,
16278 });
16279 }
16280 (S::Init__, event) => {
16281 fallback.get_or_insert(S::Init__);
16282 *self.state = AnyDeserializerState::Annotation(None);
16283 event
16284 }
16285 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
16286 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
16287 let output =
16288 <super::Annotation as WithDeserializer>::Deserializer::init(
16289 reader, event,
16290 )?;
16291 match self.handle_annotation(reader, output, &mut fallback)? {
16292 ElementHandlerOutput::Continue { event, allow_any } => {
16293 allow_any_element = allow_any_element || allow_any;
16294 event
16295 }
16296 ElementHandlerOutput::Break { event, allow_any } => {
16297 break (event, allow_any)
16298 }
16299 }
16300 } else {
16301 *self.state = S::Done__;
16302 allow_any_element = true;
16303 fallback.get_or_insert(S::Annotation(None));
16304 event
16305 }
16306 }
16307 (S::Done__, event) => {
16308 fallback.get_or_insert(S::Done__);
16309 break (DeserializerEvent::Continue(event), allow_any_element);
16310 }
16311 (S::Unknown__, _) => unreachable!(),
16312 (state, event) => {
16313 *self.state = state;
16314 break (DeserializerEvent::Break(event), false);
16315 }
16316 }
16317 };
16318 if let Some(fallback) = fallback {
16319 *self.state = fallback;
16320 }
16321 Ok(DeserializerOutput {
16322 artifact: DeserializerArtifact::Deserializer(self),
16323 event,
16324 allow_any,
16325 })
16326 }
16327 fn finish<R>(mut self, reader: &R) -> Result<super::Any, Error>
16328 where
16329 R: DeserializeReader,
16330 {
16331 let state = replace(&mut *self.state, AnyDeserializerState::Unknown__);
16332 self.finish_state(reader, state)?;
16333 Ok(super::Any {
16334 id: self.id,
16335 namespace: self.namespace,
16336 not_namespace: self.not_namespace,
16337 process_contents: self.process_contents,
16338 not_q_name: self.not_q_name,
16339 min_occurs: self.min_occurs,
16340 max_occurs: self.max_occurs,
16341 annotation: self.annotation,
16342 })
16343 }
16344 }
16345 #[derive(Debug)]
16346 pub struct AltTypeDeserializer {
16347 id: Option<String>,
16348 test: Option<String>,
16349 type_: Option<super::QName>,
16350 xpath_default_namespace: Option<super::XpathDefaultNamespaceType>,
16351 content: Vec<super::AltTypeContent>,
16352 state: Box<AltTypeDeserializerState>,
16353 }
16354 #[derive(Debug)]
16355 enum AltTypeDeserializerState {
16356 Init__,
16357 Next__,
16358 Content__(<super::AltTypeContent as WithDeserializer>::Deserializer),
16359 Unknown__,
16360 }
16361 impl AltTypeDeserializer {
16362 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
16363 where
16364 R: DeserializeReader,
16365 {
16366 let mut id: Option<String> = None;
16367 let mut test: Option<String> = None;
16368 let mut type_: Option<super::QName> = None;
16369 let mut xpath_default_namespace: Option<super::XpathDefaultNamespaceType> = None;
16370 for attrib in filter_xmlns_attributes(bytes_start) {
16371 let attrib = attrib?;
16372 if matches!(
16373 reader.resolve_local_name(attrib.key, &super::NS_XS),
16374 Some(b"id")
16375 ) {
16376 reader.read_attrib(&mut id, b"id", &attrib.value)?;
16377 } else if matches!(
16378 reader.resolve_local_name(attrib.key, &super::NS_XS),
16379 Some(b"test")
16380 ) {
16381 reader.read_attrib(&mut test, b"test", &attrib.value)?;
16382 } else if matches!(
16383 reader.resolve_local_name(attrib.key, &super::NS_XS),
16384 Some(b"type")
16385 ) {
16386 reader.read_attrib(&mut type_, b"type", &attrib.value)?;
16387 } else if matches!(
16388 reader.resolve_local_name(attrib.key, &super::NS_XS),
16389 Some(b"xpathDefaultNamespace")
16390 ) {
16391 reader.read_attrib(
16392 &mut xpath_default_namespace,
16393 b"xpathDefaultNamespace",
16394 &attrib.value,
16395 )?;
16396 }
16397 }
16398 Ok(Box::new(Self {
16399 id: id,
16400 test: test,
16401 type_: type_,
16402 xpath_default_namespace: xpath_default_namespace,
16403 content: Vec::new(),
16404 state: Box::new(AltTypeDeserializerState::Init__),
16405 }))
16406 }
16407 fn finish_state<R>(
16408 &mut self,
16409 reader: &R,
16410 state: AltTypeDeserializerState,
16411 ) -> Result<(), Error>
16412 where
16413 R: DeserializeReader,
16414 {
16415 if let AltTypeDeserializerState::Content__(deserializer) = state {
16416 self.store_content(deserializer.finish(reader)?)?;
16417 }
16418 Ok(())
16419 }
16420 fn store_content(&mut self, value: super::AltTypeContent) -> Result<(), Error> {
16421 self.content.push(value);
16422 Ok(())
16423 }
16424 fn handle_content<'de, R>(
16425 &mut self,
16426 reader: &R,
16427 output: DeserializerOutput<'de, super::AltTypeContent>,
16428 fallback: &mut Option<AltTypeDeserializerState>,
16429 ) -> Result<ElementHandlerOutput<'de>, Error>
16430 where
16431 R: DeserializeReader,
16432 {
16433 let DeserializerOutput {
16434 artifact,
16435 event,
16436 allow_any,
16437 } = output;
16438 if artifact.is_none() {
16439 *self.state = fallback.take().unwrap_or(AltTypeDeserializerState::Next__);
16440 return Ok(ElementHandlerOutput::break_(event, allow_any));
16441 }
16442 if let Some(fallback) = fallback.take() {
16443 self.finish_state(reader, fallback)?;
16444 }
16445 Ok(match artifact {
16446 DeserializerArtifact::None => unreachable!(),
16447 DeserializerArtifact::Data(data) => {
16448 self.store_content(data)?;
16449 *self.state = AltTypeDeserializerState::Next__;
16450 ElementHandlerOutput::from_event(event, allow_any)
16451 }
16452 DeserializerArtifact::Deserializer(deserializer) => {
16453 let can_have_more = self.content.len().saturating_add(1) < 3usize;
16454 let ret = if can_have_more {
16455 ElementHandlerOutput::from_event(event, allow_any)
16456 } else {
16457 ElementHandlerOutput::from_event_end(event, allow_any)
16458 };
16459 match (can_have_more, &ret) {
16460 (true, ElementHandlerOutput::Continue { .. }) => {
16461 fallback
16462 .get_or_insert(AltTypeDeserializerState::Content__(deserializer));
16463 *self.state = AltTypeDeserializerState::Next__;
16464 }
16465 (false, _) | (_, ElementHandlerOutput::Break { .. }) => {
16466 *self.state = AltTypeDeserializerState::Content__(deserializer);
16467 }
16468 }
16469 ret
16470 }
16471 })
16472 }
16473 }
16474 impl<'de> Deserializer<'de, super::AltType> for Box<AltTypeDeserializer> {
16475 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::AltType>
16476 where
16477 R: DeserializeReader,
16478 {
16479 reader.init_deserializer_from_start_event(event, AltTypeDeserializer::from_bytes_start)
16480 }
16481 fn next<R>(
16482 mut self,
16483 reader: &R,
16484 event: Event<'de>,
16485 ) -> DeserializerResult<'de, super::AltType>
16486 where
16487 R: DeserializeReader,
16488 {
16489 use AltTypeDeserializerState as S;
16490 let mut event = event;
16491 let mut fallback = None;
16492 let (event, allow_any) = loop {
16493 let state = replace(&mut *self.state, S::Unknown__);
16494 event = match (state, event) {
16495 (S::Content__(deserializer), event) => {
16496 let output = deserializer.next(reader, event)?;
16497 match self.handle_content(reader, output, &mut fallback)? {
16498 ElementHandlerOutput::Break { event, allow_any } => {
16499 break (event, allow_any)
16500 }
16501 ElementHandlerOutput::Continue { event, .. } => event,
16502 }
16503 }
16504 (_, Event::End(_)) => {
16505 return Ok(DeserializerOutput {
16506 artifact: DeserializerArtifact::Data(self.finish(reader)?),
16507 event: DeserializerEvent::None,
16508 allow_any: false,
16509 });
16510 }
16511 (state @ (S::Init__ | S::Next__), event) => {
16512 fallback.get_or_insert(state);
16513 let output =
16514 <super::AltTypeContent as WithDeserializer>::Deserializer::init(
16515 reader, event,
16516 )?;
16517 match self.handle_content(reader, output, &mut fallback)? {
16518 ElementHandlerOutput::Break { event, allow_any } => {
16519 break (event, allow_any)
16520 }
16521 ElementHandlerOutput::Continue { event, .. } => event,
16522 }
16523 }
16524 (S::Unknown__, _) => unreachable!(),
16525 }
16526 };
16527 let artifact = DeserializerArtifact::Deserializer(self);
16528 Ok(DeserializerOutput {
16529 artifact,
16530 event,
16531 allow_any,
16532 })
16533 }
16534 fn finish<R>(mut self, reader: &R) -> Result<super::AltType, Error>
16535 where
16536 R: DeserializeReader,
16537 {
16538 let state = replace(&mut *self.state, AltTypeDeserializerState::Unknown__);
16539 self.finish_state(reader, state)?;
16540 Ok(super::AltType {
16541 id: self.id,
16542 test: self.test,
16543 type_: self.type_,
16544 xpath_default_namespace: self.xpath_default_namespace,
16545 content: self.content,
16546 })
16547 }
16548 }
16549 #[derive(Debug)]
16550 pub struct AltTypeContentDeserializer {
16551 state: Box<AltTypeContentDeserializerState>,
16552 }
16553 #[derive(Debug)]
16554 pub enum AltTypeContentDeserializerState {
16555 Init__,
16556 Annotation(
16557 Option<super::Annotation>,
16558 Option<<super::Annotation as WithDeserializer>::Deserializer>,
16559 ),
16560 SimpleType(
16561 Option<super::SimpleBaseType>,
16562 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
16563 ),
16564 ComplexType(
16565 Option<super::ComplexBaseType>,
16566 Option<<super::ComplexBaseType as WithDeserializer>::Deserializer>,
16567 ),
16568 Done__(super::AltTypeContent),
16569 Unknown__,
16570 }
16571 impl AltTypeContentDeserializer {
16572 fn find_suitable<'de, R>(
16573 &mut self,
16574 reader: &R,
16575 event: Event<'de>,
16576 fallback: &mut Option<AltTypeContentDeserializerState>,
16577 ) -> Result<ElementHandlerOutput<'de>, Error>
16578 where
16579 R: DeserializeReader,
16580 {
16581 let (Event::Start(x) | Event::Empty(x)) = &event else {
16582 *self.state = fallback
16583 .take()
16584 .unwrap_or(AltTypeContentDeserializerState::Init__);
16585 return Ok(ElementHandlerOutput::return_to_parent(event, false));
16586 };
16587 if matches!(
16588 reader.resolve_local_name(x.name(), &super::NS_XS),
16589 Some(b"annotation")
16590 ) {
16591 let output =
16592 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
16593 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
16594 }
16595 if matches!(
16596 reader.resolve_local_name(x.name(), &super::NS_XS),
16597 Some(b"simpleType")
16598 ) {
16599 let output =
16600 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(reader, event)?;
16601 return self.handle_simple_type(reader, Default::default(), output, &mut *fallback);
16602 }
16603 if matches!(
16604 reader.resolve_local_name(x.name(), &super::NS_XS),
16605 Some(b"complexType")
16606 ) {
16607 let output = <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
16608 reader, event,
16609 )?;
16610 return self.handle_complex_type(
16611 reader,
16612 Default::default(),
16613 output,
16614 &mut *fallback,
16615 );
16616 }
16617 *self.state = fallback
16618 .take()
16619 .unwrap_or(AltTypeContentDeserializerState::Init__);
16620 Ok(ElementHandlerOutput::return_to_parent(event, false))
16621 }
16622 fn finish_state<R>(
16623 reader: &R,
16624 state: AltTypeContentDeserializerState,
16625 ) -> Result<super::AltTypeContent, Error>
16626 where
16627 R: DeserializeReader,
16628 {
16629 use AltTypeContentDeserializerState as S;
16630 match state {
16631 S::Init__ => Err(ErrorKind::MissingContent.into()),
16632 S::Annotation(mut values, deserializer) => {
16633 if let Some(deserializer) = deserializer {
16634 let value = deserializer.finish(reader)?;
16635 AltTypeContentDeserializer::store_annotation(&mut values, value)?;
16636 }
16637 Ok(super::AltTypeContent::Annotation(values.ok_or_else(
16638 || ErrorKind::MissingElement("annotation".into()),
16639 )?))
16640 }
16641 S::SimpleType(mut values, deserializer) => {
16642 if let Some(deserializer) = deserializer {
16643 let value = deserializer.finish(reader)?;
16644 AltTypeContentDeserializer::store_simple_type(&mut values, value)?;
16645 }
16646 Ok(super::AltTypeContent::SimpleType(values.ok_or_else(
16647 || ErrorKind::MissingElement("simpleType".into()),
16648 )?))
16649 }
16650 S::ComplexType(mut values, deserializer) => {
16651 if let Some(deserializer) = deserializer {
16652 let value = deserializer.finish(reader)?;
16653 AltTypeContentDeserializer::store_complex_type(&mut values, value)?;
16654 }
16655 Ok(super::AltTypeContent::ComplexType(values.ok_or_else(
16656 || ErrorKind::MissingElement("complexType".into()),
16657 )?))
16658 }
16659 S::Done__(data) => Ok(data),
16660 S::Unknown__ => unreachable!(),
16661 }
16662 }
16663 fn store_annotation(
16664 values: &mut Option<super::Annotation>,
16665 value: super::Annotation,
16666 ) -> Result<(), Error> {
16667 if values.is_some() {
16668 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
16669 b"annotation",
16670 )))?;
16671 }
16672 *values = Some(value);
16673 Ok(())
16674 }
16675 fn store_simple_type(
16676 values: &mut Option<super::SimpleBaseType>,
16677 value: super::SimpleBaseType,
16678 ) -> Result<(), Error> {
16679 if values.is_some() {
16680 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
16681 b"simpleType",
16682 )))?;
16683 }
16684 *values = Some(value);
16685 Ok(())
16686 }
16687 fn store_complex_type(
16688 values: &mut Option<super::ComplexBaseType>,
16689 value: super::ComplexBaseType,
16690 ) -> Result<(), Error> {
16691 if values.is_some() {
16692 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
16693 b"complexType",
16694 )))?;
16695 }
16696 *values = Some(value);
16697 Ok(())
16698 }
16699 fn handle_annotation<'de, R>(
16700 &mut self,
16701 reader: &R,
16702 mut values: Option<super::Annotation>,
16703 output: DeserializerOutput<'de, super::Annotation>,
16704 fallback: &mut Option<AltTypeContentDeserializerState>,
16705 ) -> Result<ElementHandlerOutput<'de>, Error>
16706 where
16707 R: DeserializeReader,
16708 {
16709 let DeserializerOutput {
16710 artifact,
16711 event,
16712 allow_any,
16713 } = output;
16714 if artifact.is_none() {
16715 *self.state = match fallback.take() {
16716 None => AltTypeContentDeserializerState::Init__,
16717 Some(AltTypeContentDeserializerState::Annotation(_, Some(deserializer))) => {
16718 AltTypeContentDeserializerState::Annotation(values, Some(deserializer))
16719 }
16720 _ => unreachable!(),
16721 };
16722 return Ok(ElementHandlerOutput::break_(event, allow_any));
16723 }
16724 match fallback.take() {
16725 None => (),
16726 Some(AltTypeContentDeserializerState::Annotation(_, Some(deserializer))) => {
16727 let data = deserializer.finish(reader)?;
16728 AltTypeContentDeserializer::store_annotation(&mut values, data)?;
16729 }
16730 Some(_) => unreachable!(),
16731 }
16732 Ok(match artifact {
16733 DeserializerArtifact::None => unreachable!(),
16734 DeserializerArtifact::Data(data) => {
16735 AltTypeContentDeserializer::store_annotation(&mut values, data)?;
16736 let data = AltTypeContentDeserializer::finish_state(
16737 reader,
16738 AltTypeContentDeserializerState::Annotation(values, None),
16739 )?;
16740 *self.state = AltTypeContentDeserializerState::Done__(data);
16741 ElementHandlerOutput::Break { event, allow_any }
16742 }
16743 DeserializerArtifact::Deserializer(deserializer) => {
16744 *self.state =
16745 AltTypeContentDeserializerState::Annotation(values, Some(deserializer));
16746 ElementHandlerOutput::from_event_end(event, allow_any)
16747 }
16748 })
16749 }
16750 fn handle_simple_type<'de, R>(
16751 &mut self,
16752 reader: &R,
16753 mut values: Option<super::SimpleBaseType>,
16754 output: DeserializerOutput<'de, super::SimpleBaseType>,
16755 fallback: &mut Option<AltTypeContentDeserializerState>,
16756 ) -> Result<ElementHandlerOutput<'de>, Error>
16757 where
16758 R: DeserializeReader,
16759 {
16760 let DeserializerOutput {
16761 artifact,
16762 event,
16763 allow_any,
16764 } = output;
16765 if artifact.is_none() {
16766 *self.state = match fallback.take() {
16767 None => AltTypeContentDeserializerState::Init__,
16768 Some(AltTypeContentDeserializerState::SimpleType(_, Some(deserializer))) => {
16769 AltTypeContentDeserializerState::SimpleType(values, Some(deserializer))
16770 }
16771 _ => unreachable!(),
16772 };
16773 return Ok(ElementHandlerOutput::break_(event, allow_any));
16774 }
16775 match fallback.take() {
16776 None => (),
16777 Some(AltTypeContentDeserializerState::SimpleType(_, Some(deserializer))) => {
16778 let data = deserializer.finish(reader)?;
16779 AltTypeContentDeserializer::store_simple_type(&mut values, data)?;
16780 }
16781 Some(_) => unreachable!(),
16782 }
16783 Ok(match artifact {
16784 DeserializerArtifact::None => unreachable!(),
16785 DeserializerArtifact::Data(data) => {
16786 AltTypeContentDeserializer::store_simple_type(&mut values, data)?;
16787 let data = AltTypeContentDeserializer::finish_state(
16788 reader,
16789 AltTypeContentDeserializerState::SimpleType(values, None),
16790 )?;
16791 *self.state = AltTypeContentDeserializerState::Done__(data);
16792 ElementHandlerOutput::Break { event, allow_any }
16793 }
16794 DeserializerArtifact::Deserializer(deserializer) => {
16795 *self.state =
16796 AltTypeContentDeserializerState::SimpleType(values, Some(deserializer));
16797 ElementHandlerOutput::from_event_end(event, allow_any)
16798 }
16799 })
16800 }
16801 fn handle_complex_type<'de, R>(
16802 &mut self,
16803 reader: &R,
16804 mut values: Option<super::ComplexBaseType>,
16805 output: DeserializerOutput<'de, super::ComplexBaseType>,
16806 fallback: &mut Option<AltTypeContentDeserializerState>,
16807 ) -> Result<ElementHandlerOutput<'de>, Error>
16808 where
16809 R: DeserializeReader,
16810 {
16811 let DeserializerOutput {
16812 artifact,
16813 event,
16814 allow_any,
16815 } = output;
16816 if artifact.is_none() {
16817 *self.state = match fallback.take() {
16818 None => AltTypeContentDeserializerState::Init__,
16819 Some(AltTypeContentDeserializerState::ComplexType(_, Some(deserializer))) => {
16820 AltTypeContentDeserializerState::ComplexType(values, Some(deserializer))
16821 }
16822 _ => unreachable!(),
16823 };
16824 return Ok(ElementHandlerOutput::break_(event, allow_any));
16825 }
16826 match fallback.take() {
16827 None => (),
16828 Some(AltTypeContentDeserializerState::ComplexType(_, Some(deserializer))) => {
16829 let data = deserializer.finish(reader)?;
16830 AltTypeContentDeserializer::store_complex_type(&mut values, data)?;
16831 }
16832 Some(_) => unreachable!(),
16833 }
16834 Ok(match artifact {
16835 DeserializerArtifact::None => unreachable!(),
16836 DeserializerArtifact::Data(data) => {
16837 AltTypeContentDeserializer::store_complex_type(&mut values, data)?;
16838 let data = AltTypeContentDeserializer::finish_state(
16839 reader,
16840 AltTypeContentDeserializerState::ComplexType(values, None),
16841 )?;
16842 *self.state = AltTypeContentDeserializerState::Done__(data);
16843 ElementHandlerOutput::Break { event, allow_any }
16844 }
16845 DeserializerArtifact::Deserializer(deserializer) => {
16846 *self.state =
16847 AltTypeContentDeserializerState::ComplexType(values, Some(deserializer));
16848 ElementHandlerOutput::from_event_end(event, allow_any)
16849 }
16850 })
16851 }
16852 }
16853 impl<'de> Deserializer<'de, super::AltTypeContent> for Box<AltTypeContentDeserializer> {
16854 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::AltTypeContent>
16855 where
16856 R: DeserializeReader,
16857 {
16858 let deserializer = Box::new(AltTypeContentDeserializer {
16859 state: Box::new(AltTypeContentDeserializerState::Init__),
16860 });
16861 let mut output = deserializer.next(reader, event)?;
16862 output.artifact = match output.artifact {
16863 DeserializerArtifact::Deserializer(x)
16864 if matches!(&*x.state, AltTypeContentDeserializerState::Init__) =>
16865 {
16866 DeserializerArtifact::None
16867 }
16868 artifact => artifact,
16869 };
16870 Ok(output)
16871 }
16872 fn next<R>(
16873 mut self,
16874 reader: &R,
16875 event: Event<'de>,
16876 ) -> DeserializerResult<'de, super::AltTypeContent>
16877 where
16878 R: DeserializeReader,
16879 {
16880 use AltTypeContentDeserializerState as S;
16881 let mut event = event;
16882 let mut fallback = None;
16883 let (event, allow_any) = loop {
16884 let state = replace(&mut *self.state, S::Unknown__);
16885 event = match (state, event) {
16886 (S::Annotation(values, Some(deserializer)), event) => {
16887 let output = deserializer.next(reader, event)?;
16888 match self.handle_annotation(reader, values, output, &mut fallback)? {
16889 ElementHandlerOutput::Break { event, allow_any } => {
16890 break (event, allow_any)
16891 }
16892 ElementHandlerOutput::Continue { event, .. } => event,
16893 }
16894 }
16895 (S::SimpleType(values, Some(deserializer)), event) => {
16896 let output = deserializer.next(reader, event)?;
16897 match self.handle_simple_type(reader, values, output, &mut fallback)? {
16898 ElementHandlerOutput::Break { event, allow_any } => {
16899 break (event, allow_any)
16900 }
16901 ElementHandlerOutput::Continue { event, .. } => event,
16902 }
16903 }
16904 (S::ComplexType(values, Some(deserializer)), event) => {
16905 let output = deserializer.next(reader, event)?;
16906 match self.handle_complex_type(reader, values, output, &mut fallback)? {
16907 ElementHandlerOutput::Break { event, allow_any } => {
16908 break (event, allow_any)
16909 }
16910 ElementHandlerOutput::Continue { event, .. } => event,
16911 }
16912 }
16913 (state, event @ Event::End(_)) => {
16914 return Ok(DeserializerOutput {
16915 artifact: DeserializerArtifact::Data(
16916 AltTypeContentDeserializer::finish_state(reader, state)?,
16917 ),
16918 event: DeserializerEvent::Continue(event),
16919 allow_any: false,
16920 });
16921 }
16922 (S::Init__, event) => match self.find_suitable(reader, event, &mut fallback)? {
16923 ElementHandlerOutput::Break { event, allow_any } => {
16924 break (event, allow_any)
16925 }
16926 ElementHandlerOutput::Continue { event, .. } => event,
16927 },
16928 (S::Annotation(values, None), event) => {
16929 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
16930 reader, event,
16931 )?;
16932 match self.handle_annotation(reader, values, output, &mut fallback)? {
16933 ElementHandlerOutput::Break { event, allow_any } => {
16934 break (event, allow_any)
16935 }
16936 ElementHandlerOutput::Continue { event, .. } => event,
16937 }
16938 }
16939 (S::SimpleType(values, None), event) => {
16940 let output =
16941 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
16942 reader, event,
16943 )?;
16944 match self.handle_simple_type(reader, values, output, &mut fallback)? {
16945 ElementHandlerOutput::Break { event, allow_any } => {
16946 break (event, allow_any)
16947 }
16948 ElementHandlerOutput::Continue { event, .. } => event,
16949 }
16950 }
16951 (S::ComplexType(values, None), event) => {
16952 let output =
16953 <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
16954 reader, event,
16955 )?;
16956 match self.handle_complex_type(reader, values, output, &mut fallback)? {
16957 ElementHandlerOutput::Break { event, allow_any } => {
16958 break (event, allow_any)
16959 }
16960 ElementHandlerOutput::Continue { event, .. } => event,
16961 }
16962 }
16963 (s @ S::Done__(_), event) => {
16964 *self.state = s;
16965 break (DeserializerEvent::Continue(event), false);
16966 }
16967 (S::Unknown__, _) => unreachable!(),
16968 }
16969 };
16970 let artifact = if matches!(&*self.state, S::Done__(_)) {
16971 DeserializerArtifact::Data(self.finish(reader)?)
16972 } else {
16973 DeserializerArtifact::Deserializer(self)
16974 };
16975 Ok(DeserializerOutput {
16976 artifact,
16977 event,
16978 allow_any,
16979 })
16980 }
16981 fn finish<R>(self, reader: &R) -> Result<super::AltTypeContent, Error>
16982 where
16983 R: DeserializeReader,
16984 {
16985 AltTypeContentDeserializer::finish_state(reader, *self.state)
16986 }
16987 }
16988 #[derive(Debug)]
16989 pub struct KeybaseTypeDeserializer {
16990 id: Option<String>,
16991 name: Option<String>,
16992 ref_: Option<super::QName>,
16993 content: Option<super::KeybaseTypeContent>,
16994 state: Box<KeybaseTypeDeserializerState>,
16995 }
16996 #[derive(Debug)]
16997 enum KeybaseTypeDeserializerState {
16998 Init__,
16999 Next__,
17000 Content__(<super::KeybaseTypeContent as WithDeserializer>::Deserializer),
17001 Unknown__,
17002 }
17003 impl KeybaseTypeDeserializer {
17004 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
17005 where
17006 R: DeserializeReader,
17007 {
17008 let mut id: Option<String> = None;
17009 let mut name: Option<String> = None;
17010 let mut ref_: Option<super::QName> = None;
17011 for attrib in filter_xmlns_attributes(bytes_start) {
17012 let attrib = attrib?;
17013 if matches!(
17014 reader.resolve_local_name(attrib.key, &super::NS_XS),
17015 Some(b"id")
17016 ) {
17017 reader.read_attrib(&mut id, b"id", &attrib.value)?;
17018 } else if matches!(
17019 reader.resolve_local_name(attrib.key, &super::NS_XS),
17020 Some(b"name")
17021 ) {
17022 reader.read_attrib(&mut name, b"name", &attrib.value)?;
17023 } else if matches!(
17024 reader.resolve_local_name(attrib.key, &super::NS_XS),
17025 Some(b"ref")
17026 ) {
17027 reader.read_attrib(&mut ref_, b"ref", &attrib.value)?;
17028 }
17029 }
17030 Ok(Box::new(Self {
17031 id: id,
17032 name: name,
17033 ref_: ref_,
17034 content: None,
17035 state: Box::new(KeybaseTypeDeserializerState::Init__),
17036 }))
17037 }
17038 fn finish_state<R>(
17039 &mut self,
17040 reader: &R,
17041 state: KeybaseTypeDeserializerState,
17042 ) -> Result<(), Error>
17043 where
17044 R: DeserializeReader,
17045 {
17046 if let KeybaseTypeDeserializerState::Content__(deserializer) = state {
17047 self.store_content(deserializer.finish(reader)?)?;
17048 }
17049 Ok(())
17050 }
17051 fn store_content(&mut self, value: super::KeybaseTypeContent) -> Result<(), Error> {
17052 if self.content.is_some() {
17053 Err(ErrorKind::DuplicateContent)?;
17054 }
17055 self.content = Some(value);
17056 Ok(())
17057 }
17058 fn handle_content<'de, R>(
17059 &mut self,
17060 reader: &R,
17061 output: DeserializerOutput<'de, super::KeybaseTypeContent>,
17062 fallback: &mut Option<KeybaseTypeDeserializerState>,
17063 ) -> Result<ElementHandlerOutput<'de>, Error>
17064 where
17065 R: DeserializeReader,
17066 {
17067 let DeserializerOutput {
17068 artifact,
17069 event,
17070 allow_any,
17071 } = output;
17072 if artifact.is_none() {
17073 *self.state = fallback
17074 .take()
17075 .unwrap_or(KeybaseTypeDeserializerState::Next__);
17076 return Ok(ElementHandlerOutput::break_(event, allow_any));
17077 }
17078 if let Some(fallback) = fallback.take() {
17079 self.finish_state(reader, fallback)?;
17080 }
17081 Ok(match artifact {
17082 DeserializerArtifact::None => unreachable!(),
17083 DeserializerArtifact::Data(data) => {
17084 self.store_content(data)?;
17085 *self.state = KeybaseTypeDeserializerState::Next__;
17086 ElementHandlerOutput::from_event(event, allow_any)
17087 }
17088 DeserializerArtifact::Deserializer(deserializer) => {
17089 *self.state = KeybaseTypeDeserializerState::Content__(deserializer);
17090 ElementHandlerOutput::from_event_end(event, allow_any)
17091 }
17092 })
17093 }
17094 }
17095 impl<'de> Deserializer<'de, super::KeybaseType> for Box<KeybaseTypeDeserializer> {
17096 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::KeybaseType>
17097 where
17098 R: DeserializeReader,
17099 {
17100 reader.init_deserializer_from_start_event(
17101 event,
17102 KeybaseTypeDeserializer::from_bytes_start,
17103 )
17104 }
17105 fn next<R>(
17106 mut self,
17107 reader: &R,
17108 event: Event<'de>,
17109 ) -> DeserializerResult<'de, super::KeybaseType>
17110 where
17111 R: DeserializeReader,
17112 {
17113 use KeybaseTypeDeserializerState as S;
17114 let mut event = event;
17115 let mut fallback = None;
17116 let (event, allow_any) = loop {
17117 let state = replace(&mut *self.state, S::Unknown__);
17118 event = match (state, event) {
17119 (S::Content__(deserializer), event) => {
17120 let output = deserializer.next(reader, event)?;
17121 match self.handle_content(reader, output, &mut fallback)? {
17122 ElementHandlerOutput::Break { event, allow_any } => {
17123 break (event, allow_any)
17124 }
17125 ElementHandlerOutput::Continue { event, .. } => event,
17126 }
17127 }
17128 (_, Event::End(_)) => {
17129 return Ok(DeserializerOutput {
17130 artifact: DeserializerArtifact::Data(self.finish(reader)?),
17131 event: DeserializerEvent::None,
17132 allow_any: false,
17133 });
17134 }
17135 (state @ (S::Init__ | S::Next__), event) => {
17136 fallback.get_or_insert(state);
17137 let output =
17138 <super::KeybaseTypeContent as WithDeserializer>::Deserializer::init(
17139 reader, event,
17140 )?;
17141 match self.handle_content(reader, output, &mut fallback)? {
17142 ElementHandlerOutput::Break { event, allow_any } => {
17143 break (event, allow_any)
17144 }
17145 ElementHandlerOutput::Continue { event, .. } => event,
17146 }
17147 }
17148 (S::Unknown__, _) => unreachable!(),
17149 }
17150 };
17151 let artifact = DeserializerArtifact::Deserializer(self);
17152 Ok(DeserializerOutput {
17153 artifact,
17154 event,
17155 allow_any,
17156 })
17157 }
17158 fn finish<R>(mut self, reader: &R) -> Result<super::KeybaseType, Error>
17159 where
17160 R: DeserializeReader,
17161 {
17162 let state = replace(&mut *self.state, KeybaseTypeDeserializerState::Unknown__);
17163 self.finish_state(reader, state)?;
17164 Ok(super::KeybaseType {
17165 id: self.id,
17166 name: self.name,
17167 ref_: self.ref_,
17168 content: self.content,
17169 })
17170 }
17171 }
17172 #[derive(Debug)]
17173 pub struct KeybaseTypeContentDeserializer {
17174 annotation: Option<super::Annotation>,
17175 selector: Option<super::Field>,
17176 field: Vec<super::Field>,
17177 state: Box<KeybaseTypeContentDeserializerState>,
17178 }
17179 #[derive(Debug)]
17180 enum KeybaseTypeContentDeserializerState {
17181 Init__,
17182 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
17183 Selector(Option<<super::Field as WithDeserializer>::Deserializer>),
17184 Field(Option<<super::Field as WithDeserializer>::Deserializer>),
17185 Done__,
17186 Unknown__,
17187 }
17188 impl KeybaseTypeContentDeserializer {
17189 fn finish_state<R>(
17190 &mut self,
17191 reader: &R,
17192 state: KeybaseTypeContentDeserializerState,
17193 ) -> Result<(), Error>
17194 where
17195 R: DeserializeReader,
17196 {
17197 use KeybaseTypeContentDeserializerState as S;
17198 match state {
17199 S::Annotation(Some(deserializer)) => {
17200 self.store_annotation(deserializer.finish(reader)?)?
17201 }
17202 S::Selector(Some(deserializer)) => {
17203 self.store_selector(deserializer.finish(reader)?)?
17204 }
17205 S::Field(Some(deserializer)) => self.store_field(deserializer.finish(reader)?)?,
17206 _ => (),
17207 }
17208 Ok(())
17209 }
17210 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
17211 if self.annotation.is_some() {
17212 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17213 b"annotation",
17214 )))?;
17215 }
17216 self.annotation = Some(value);
17217 Ok(())
17218 }
17219 fn store_selector(&mut self, value: super::Field) -> Result<(), Error> {
17220 if self.selector.is_some() {
17221 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17222 b"selector",
17223 )))?;
17224 }
17225 self.selector = Some(value);
17226 Ok(())
17227 }
17228 fn store_field(&mut self, value: super::Field) -> Result<(), Error> {
17229 self.field.push(value);
17230 Ok(())
17231 }
17232 fn handle_annotation<'de, R>(
17233 &mut self,
17234 reader: &R,
17235 output: DeserializerOutput<'de, super::Annotation>,
17236 fallback: &mut Option<KeybaseTypeContentDeserializerState>,
17237 ) -> Result<ElementHandlerOutput<'de>, Error>
17238 where
17239 R: DeserializeReader,
17240 {
17241 let DeserializerOutput {
17242 artifact,
17243 event,
17244 allow_any,
17245 } = output;
17246 if artifact.is_none() {
17247 fallback.get_or_insert(KeybaseTypeContentDeserializerState::Annotation(None));
17248 *self.state = KeybaseTypeContentDeserializerState::Selector(None);
17249 return Ok(ElementHandlerOutput::from_event(event, allow_any));
17250 }
17251 if let Some(fallback) = fallback.take() {
17252 self.finish_state(reader, fallback)?;
17253 }
17254 Ok(match artifact {
17255 DeserializerArtifact::None => unreachable!(),
17256 DeserializerArtifact::Data(data) => {
17257 self.store_annotation(data)?;
17258 *self.state = KeybaseTypeContentDeserializerState::Selector(None);
17259 ElementHandlerOutput::from_event(event, allow_any)
17260 }
17261 DeserializerArtifact::Deserializer(deserializer) => {
17262 let ret = ElementHandlerOutput::from_event(event, allow_any);
17263 match &ret {
17264 ElementHandlerOutput::Continue { .. } => {
17265 fallback.get_or_insert(
17266 KeybaseTypeContentDeserializerState::Annotation(Some(deserializer)),
17267 );
17268 *self.state = KeybaseTypeContentDeserializerState::Selector(None);
17269 }
17270 ElementHandlerOutput::Break { .. } => {
17271 *self.state =
17272 KeybaseTypeContentDeserializerState::Annotation(Some(deserializer));
17273 }
17274 }
17275 ret
17276 }
17277 })
17278 }
17279 fn handle_selector<'de, R>(
17280 &mut self,
17281 reader: &R,
17282 output: DeserializerOutput<'de, super::Field>,
17283 fallback: &mut Option<KeybaseTypeContentDeserializerState>,
17284 ) -> Result<ElementHandlerOutput<'de>, Error>
17285 where
17286 R: DeserializeReader,
17287 {
17288 let DeserializerOutput {
17289 artifact,
17290 event,
17291 allow_any,
17292 } = output;
17293 if artifact.is_none() {
17294 if self.selector.is_some() {
17295 fallback.get_or_insert(KeybaseTypeContentDeserializerState::Selector(None));
17296 *self.state = KeybaseTypeContentDeserializerState::Field(None);
17297 return Ok(ElementHandlerOutput::from_event(event, allow_any));
17298 } else {
17299 *self.state = KeybaseTypeContentDeserializerState::Selector(None);
17300 return Ok(ElementHandlerOutput::break_(event, allow_any));
17301 }
17302 }
17303 if let Some(fallback) = fallback.take() {
17304 self.finish_state(reader, fallback)?;
17305 }
17306 Ok(match artifact {
17307 DeserializerArtifact::None => unreachable!(),
17308 DeserializerArtifact::Data(data) => {
17309 self.store_selector(data)?;
17310 *self.state = KeybaseTypeContentDeserializerState::Field(None);
17311 ElementHandlerOutput::from_event(event, allow_any)
17312 }
17313 DeserializerArtifact::Deserializer(deserializer) => {
17314 let ret = ElementHandlerOutput::from_event(event, allow_any);
17315 match &ret {
17316 ElementHandlerOutput::Continue { .. } => {
17317 fallback.get_or_insert(KeybaseTypeContentDeserializerState::Selector(
17318 Some(deserializer),
17319 ));
17320 *self.state = KeybaseTypeContentDeserializerState::Field(None);
17321 }
17322 ElementHandlerOutput::Break { .. } => {
17323 *self.state =
17324 KeybaseTypeContentDeserializerState::Selector(Some(deserializer));
17325 }
17326 }
17327 ret
17328 }
17329 })
17330 }
17331 fn handle_field<'de, R>(
17332 &mut self,
17333 reader: &R,
17334 output: DeserializerOutput<'de, super::Field>,
17335 fallback: &mut Option<KeybaseTypeContentDeserializerState>,
17336 ) -> Result<ElementHandlerOutput<'de>, Error>
17337 where
17338 R: DeserializeReader,
17339 {
17340 let DeserializerOutput {
17341 artifact,
17342 event,
17343 allow_any,
17344 } = output;
17345 if artifact.is_none() {
17346 if self.field.len() < 1usize {
17347 *self.state = KeybaseTypeContentDeserializerState::Field(None);
17348 return Ok(ElementHandlerOutput::break_(event, allow_any));
17349 } else {
17350 fallback.get_or_insert(KeybaseTypeContentDeserializerState::Field(None));
17351 *self.state = KeybaseTypeContentDeserializerState::Done__;
17352 return Ok(ElementHandlerOutput::from_event(event, allow_any));
17353 }
17354 }
17355 if let Some(fallback) = fallback.take() {
17356 self.finish_state(reader, fallback)?;
17357 }
17358 Ok(match artifact {
17359 DeserializerArtifact::None => unreachable!(),
17360 DeserializerArtifact::Data(data) => {
17361 self.store_field(data)?;
17362 *self.state = KeybaseTypeContentDeserializerState::Field(None);
17363 ElementHandlerOutput::from_event(event, allow_any)
17364 }
17365 DeserializerArtifact::Deserializer(deserializer) => {
17366 let ret = ElementHandlerOutput::from_event(event, allow_any);
17367 match &ret {
17368 ElementHandlerOutput::Continue { .. } => {
17369 fallback.get_or_insert(KeybaseTypeContentDeserializerState::Field(
17370 Some(deserializer),
17371 ));
17372 if self.field.len().saturating_add(1) < 1usize {
17373 *self.state = KeybaseTypeContentDeserializerState::Field(None);
17374 } else {
17375 *self.state = KeybaseTypeContentDeserializerState::Done__;
17376 }
17377 }
17378 ElementHandlerOutput::Break { .. } => {
17379 *self.state =
17380 KeybaseTypeContentDeserializerState::Field(Some(deserializer));
17381 }
17382 }
17383 ret
17384 }
17385 })
17386 }
17387 }
17388 impl<'de> Deserializer<'de, super::KeybaseTypeContent> for Box<KeybaseTypeContentDeserializer> {
17389 fn init<R>(
17390 reader: &R,
17391 event: Event<'de>,
17392 ) -> DeserializerResult<'de, super::KeybaseTypeContent>
17393 where
17394 R: DeserializeReader,
17395 {
17396 let deserializer = Box::new(KeybaseTypeContentDeserializer {
17397 annotation: None,
17398 selector: None,
17399 field: Vec::new(),
17400 state: Box::new(KeybaseTypeContentDeserializerState::Init__),
17401 });
17402 let mut output = deserializer.next(reader, event)?;
17403 output.artifact = match output.artifact {
17404 DeserializerArtifact::Deserializer(x)
17405 if matches!(&*x.state, KeybaseTypeContentDeserializerState::Init__) =>
17406 {
17407 DeserializerArtifact::None
17408 }
17409 artifact => artifact,
17410 };
17411 Ok(output)
17412 }
17413 fn next<R>(
17414 mut self,
17415 reader: &R,
17416 event: Event<'de>,
17417 ) -> DeserializerResult<'de, super::KeybaseTypeContent>
17418 where
17419 R: DeserializeReader,
17420 {
17421 use KeybaseTypeContentDeserializerState as S;
17422 let mut event = event;
17423 let mut fallback = None;
17424 let mut allow_any_element = false;
17425 let (event, allow_any) = loop {
17426 let state = replace(&mut *self.state, S::Unknown__);
17427 event = match (state, event) {
17428 (S::Annotation(Some(deserializer)), event) => {
17429 let output = deserializer.next(reader, event)?;
17430 match self.handle_annotation(reader, output, &mut fallback)? {
17431 ElementHandlerOutput::Continue { event, allow_any } => {
17432 allow_any_element = allow_any_element || allow_any;
17433 event
17434 }
17435 ElementHandlerOutput::Break { event, allow_any } => {
17436 break (event, allow_any)
17437 }
17438 }
17439 }
17440 (S::Selector(Some(deserializer)), event) => {
17441 let output = deserializer.next(reader, event)?;
17442 match self.handle_selector(reader, output, &mut fallback)? {
17443 ElementHandlerOutput::Continue { event, allow_any } => {
17444 allow_any_element = allow_any_element || allow_any;
17445 event
17446 }
17447 ElementHandlerOutput::Break { event, allow_any } => {
17448 break (event, allow_any)
17449 }
17450 }
17451 }
17452 (S::Field(Some(deserializer)), event) => {
17453 let output = deserializer.next(reader, event)?;
17454 match self.handle_field(reader, output, &mut fallback)? {
17455 ElementHandlerOutput::Continue { event, allow_any } => {
17456 allow_any_element = allow_any_element || allow_any;
17457 event
17458 }
17459 ElementHandlerOutput::Break { event, allow_any } => {
17460 break (event, allow_any)
17461 }
17462 }
17463 }
17464 (_, event @ Event::End(_)) => {
17465 if let Some(fallback) = fallback.take() {
17466 self.finish_state(reader, fallback)?;
17467 }
17468 return Ok(DeserializerOutput {
17469 artifact: DeserializerArtifact::Data(self.finish(reader)?),
17470 event: DeserializerEvent::Continue(event),
17471 allow_any: false,
17472 });
17473 }
17474 (S::Init__, event) => {
17475 fallback.get_or_insert(S::Init__);
17476 *self.state = KeybaseTypeContentDeserializerState::Annotation(None);
17477 event
17478 }
17479 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
17480 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
17481 let output =
17482 <super::Annotation as WithDeserializer>::Deserializer::init(
17483 reader, event,
17484 )?;
17485 match self.handle_annotation(reader, output, &mut fallback)? {
17486 ElementHandlerOutput::Continue { event, allow_any } => {
17487 allow_any_element = allow_any_element || allow_any;
17488 event
17489 }
17490 ElementHandlerOutput::Break { event, allow_any } => {
17491 break (event, allow_any)
17492 }
17493 }
17494 } else {
17495 *self.state = S::Selector(None);
17496 allow_any_element = true;
17497 fallback.get_or_insert(S::Annotation(None));
17498 event
17499 }
17500 }
17501 (S::Selector(None), event @ (Event::Start(_) | Event::Empty(_))) => {
17502 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"selector") {
17503 let output = <super::Field as WithDeserializer>::Deserializer::init(
17504 reader, event,
17505 )?;
17506 match self.handle_selector(reader, output, &mut fallback)? {
17507 ElementHandlerOutput::Continue { event, allow_any } => {
17508 allow_any_element = allow_any_element || allow_any;
17509 event
17510 }
17511 ElementHandlerOutput::Break { event, allow_any } => {
17512 break (event, allow_any)
17513 }
17514 }
17515 } else {
17516 *self.state = S::Field(None);
17517 allow_any_element = true;
17518 fallback.get_or_insert(S::Selector(None));
17519 event
17520 }
17521 }
17522 (S::Field(None), event @ (Event::Start(_) | Event::Empty(_))) => {
17523 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"field") {
17524 let output = <super::Field as WithDeserializer>::Deserializer::init(
17525 reader, event,
17526 )?;
17527 match self.handle_field(reader, output, &mut fallback)? {
17528 ElementHandlerOutput::Continue { event, allow_any } => {
17529 allow_any_element = allow_any_element || allow_any;
17530 event
17531 }
17532 ElementHandlerOutput::Break { event, allow_any } => {
17533 break (event, allow_any)
17534 }
17535 }
17536 } else {
17537 *self.state = S::Done__;
17538 allow_any_element = true;
17539 fallback.get_or_insert(S::Field(None));
17540 event
17541 }
17542 }
17543 (S::Done__, event) => {
17544 fallback.get_or_insert(S::Done__);
17545 break (DeserializerEvent::Continue(event), allow_any_element);
17546 }
17547 (S::Unknown__, _) => unreachable!(),
17548 (state, event) => {
17549 *self.state = state;
17550 break (DeserializerEvent::Break(event), false);
17551 }
17552 }
17553 };
17554 if let Some(fallback) = fallback {
17555 *self.state = fallback;
17556 }
17557 Ok(DeserializerOutput {
17558 artifact: DeserializerArtifact::Deserializer(self),
17559 event,
17560 allow_any,
17561 })
17562 }
17563 fn finish<R>(mut self, reader: &R) -> Result<super::KeybaseTypeContent, Error>
17564 where
17565 R: DeserializeReader,
17566 {
17567 let state = replace(
17568 &mut *self.state,
17569 KeybaseTypeContentDeserializerState::Unknown__,
17570 );
17571 self.finish_state(reader, state)?;
17572 Ok(super::KeybaseTypeContent {
17573 annotation: self.annotation,
17574 selector: self
17575 .selector
17576 .ok_or_else(|| ErrorKind::MissingElement("selector".into()))?,
17577 field: self.field,
17578 })
17579 }
17580 }
17581 #[derive(Debug)]
17582 pub struct KeyrefDeserializer {
17583 id: Option<String>,
17584 name: Option<String>,
17585 ref_: Option<super::QName>,
17586 refer: Option<super::QName>,
17587 content: Option<super::KeyrefContent>,
17588 state: Box<KeyrefDeserializerState>,
17589 }
17590 #[derive(Debug)]
17591 enum KeyrefDeserializerState {
17592 Init__,
17593 Next__,
17594 Content__(<super::KeyrefContent as WithDeserializer>::Deserializer),
17595 Unknown__,
17596 }
17597 impl KeyrefDeserializer {
17598 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
17599 where
17600 R: DeserializeReader,
17601 {
17602 let mut id: Option<String> = None;
17603 let mut name: Option<String> = None;
17604 let mut ref_: Option<super::QName> = None;
17605 let mut refer: Option<super::QName> = None;
17606 for attrib in filter_xmlns_attributes(bytes_start) {
17607 let attrib = attrib?;
17608 if matches!(
17609 reader.resolve_local_name(attrib.key, &super::NS_XS),
17610 Some(b"id")
17611 ) {
17612 reader.read_attrib(&mut id, b"id", &attrib.value)?;
17613 } else if matches!(
17614 reader.resolve_local_name(attrib.key, &super::NS_XS),
17615 Some(b"name")
17616 ) {
17617 reader.read_attrib(&mut name, b"name", &attrib.value)?;
17618 } else if matches!(
17619 reader.resolve_local_name(attrib.key, &super::NS_XS),
17620 Some(b"ref")
17621 ) {
17622 reader.read_attrib(&mut ref_, b"ref", &attrib.value)?;
17623 } else if matches!(
17624 reader.resolve_local_name(attrib.key, &super::NS_XS),
17625 Some(b"refer")
17626 ) {
17627 reader.read_attrib(&mut refer, b"refer", &attrib.value)?;
17628 }
17629 }
17630 Ok(Box::new(Self {
17631 id: id,
17632 name: name,
17633 ref_: ref_,
17634 refer: refer,
17635 content: None,
17636 state: Box::new(KeyrefDeserializerState::Init__),
17637 }))
17638 }
17639 fn finish_state<R>(
17640 &mut self,
17641 reader: &R,
17642 state: KeyrefDeserializerState,
17643 ) -> Result<(), Error>
17644 where
17645 R: DeserializeReader,
17646 {
17647 if let KeyrefDeserializerState::Content__(deserializer) = state {
17648 self.store_content(deserializer.finish(reader)?)?;
17649 }
17650 Ok(())
17651 }
17652 fn store_content(&mut self, value: super::KeyrefContent) -> Result<(), Error> {
17653 if self.content.is_some() {
17654 Err(ErrorKind::DuplicateContent)?;
17655 }
17656 self.content = Some(value);
17657 Ok(())
17658 }
17659 fn handle_content<'de, R>(
17660 &mut self,
17661 reader: &R,
17662 output: DeserializerOutput<'de, super::KeyrefContent>,
17663 fallback: &mut Option<KeyrefDeserializerState>,
17664 ) -> Result<ElementHandlerOutput<'de>, Error>
17665 where
17666 R: DeserializeReader,
17667 {
17668 let DeserializerOutput {
17669 artifact,
17670 event,
17671 allow_any,
17672 } = output;
17673 if artifact.is_none() {
17674 *self.state = fallback.take().unwrap_or(KeyrefDeserializerState::Next__);
17675 return Ok(ElementHandlerOutput::break_(event, allow_any));
17676 }
17677 if let Some(fallback) = fallback.take() {
17678 self.finish_state(reader, fallback)?;
17679 }
17680 Ok(match artifact {
17681 DeserializerArtifact::None => unreachable!(),
17682 DeserializerArtifact::Data(data) => {
17683 self.store_content(data)?;
17684 *self.state = KeyrefDeserializerState::Next__;
17685 ElementHandlerOutput::from_event(event, allow_any)
17686 }
17687 DeserializerArtifact::Deserializer(deserializer) => {
17688 *self.state = KeyrefDeserializerState::Content__(deserializer);
17689 ElementHandlerOutput::from_event_end(event, allow_any)
17690 }
17691 })
17692 }
17693 }
17694 impl<'de> Deserializer<'de, super::Keyref> for Box<KeyrefDeserializer> {
17695 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Keyref>
17696 where
17697 R: DeserializeReader,
17698 {
17699 reader.init_deserializer_from_start_event(event, KeyrefDeserializer::from_bytes_start)
17700 }
17701 fn next<R>(
17702 mut self,
17703 reader: &R,
17704 event: Event<'de>,
17705 ) -> DeserializerResult<'de, super::Keyref>
17706 where
17707 R: DeserializeReader,
17708 {
17709 use KeyrefDeserializerState as S;
17710 let mut event = event;
17711 let mut fallback = None;
17712 let (event, allow_any) = loop {
17713 let state = replace(&mut *self.state, S::Unknown__);
17714 event = match (state, event) {
17715 (S::Content__(deserializer), event) => {
17716 let output = deserializer.next(reader, event)?;
17717 match self.handle_content(reader, output, &mut fallback)? {
17718 ElementHandlerOutput::Break { event, allow_any } => {
17719 break (event, allow_any)
17720 }
17721 ElementHandlerOutput::Continue { event, .. } => event,
17722 }
17723 }
17724 (_, Event::End(_)) => {
17725 return Ok(DeserializerOutput {
17726 artifact: DeserializerArtifact::Data(self.finish(reader)?),
17727 event: DeserializerEvent::None,
17728 allow_any: false,
17729 });
17730 }
17731 (state @ (S::Init__ | S::Next__), event) => {
17732 fallback.get_or_insert(state);
17733 let output =
17734 <super::KeyrefContent as WithDeserializer>::Deserializer::init(
17735 reader, event,
17736 )?;
17737 match self.handle_content(reader, output, &mut fallback)? {
17738 ElementHandlerOutput::Break { event, allow_any } => {
17739 break (event, allow_any)
17740 }
17741 ElementHandlerOutput::Continue { event, .. } => event,
17742 }
17743 }
17744 (S::Unknown__, _) => unreachable!(),
17745 }
17746 };
17747 let artifact = DeserializerArtifact::Deserializer(self);
17748 Ok(DeserializerOutput {
17749 artifact,
17750 event,
17751 allow_any,
17752 })
17753 }
17754 fn finish<R>(mut self, reader: &R) -> Result<super::Keyref, Error>
17755 where
17756 R: DeserializeReader,
17757 {
17758 let state = replace(&mut *self.state, KeyrefDeserializerState::Unknown__);
17759 self.finish_state(reader, state)?;
17760 Ok(super::Keyref {
17761 id: self.id,
17762 name: self.name,
17763 ref_: self.ref_,
17764 refer: self.refer,
17765 content: self.content,
17766 })
17767 }
17768 }
17769 #[derive(Debug)]
17770 pub struct KeyrefContentDeserializer {
17771 annotation: Option<super::Annotation>,
17772 selector: Option<super::Field>,
17773 field: Vec<super::Field>,
17774 state: Box<KeyrefContentDeserializerState>,
17775 }
17776 #[derive(Debug)]
17777 enum KeyrefContentDeserializerState {
17778 Init__,
17779 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
17780 Selector(Option<<super::Field as WithDeserializer>::Deserializer>),
17781 Field(Option<<super::Field as WithDeserializer>::Deserializer>),
17782 Done__,
17783 Unknown__,
17784 }
17785 impl KeyrefContentDeserializer {
17786 fn finish_state<R>(
17787 &mut self,
17788 reader: &R,
17789 state: KeyrefContentDeserializerState,
17790 ) -> Result<(), Error>
17791 where
17792 R: DeserializeReader,
17793 {
17794 use KeyrefContentDeserializerState as S;
17795 match state {
17796 S::Annotation(Some(deserializer)) => {
17797 self.store_annotation(deserializer.finish(reader)?)?
17798 }
17799 S::Selector(Some(deserializer)) => {
17800 self.store_selector(deserializer.finish(reader)?)?
17801 }
17802 S::Field(Some(deserializer)) => self.store_field(deserializer.finish(reader)?)?,
17803 _ => (),
17804 }
17805 Ok(())
17806 }
17807 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
17808 if self.annotation.is_some() {
17809 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17810 b"annotation",
17811 )))?;
17812 }
17813 self.annotation = Some(value);
17814 Ok(())
17815 }
17816 fn store_selector(&mut self, value: super::Field) -> Result<(), Error> {
17817 if self.selector.is_some() {
17818 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17819 b"selector",
17820 )))?;
17821 }
17822 self.selector = Some(value);
17823 Ok(())
17824 }
17825 fn store_field(&mut self, value: super::Field) -> Result<(), Error> {
17826 self.field.push(value);
17827 Ok(())
17828 }
17829 fn handle_annotation<'de, R>(
17830 &mut self,
17831 reader: &R,
17832 output: DeserializerOutput<'de, super::Annotation>,
17833 fallback: &mut Option<KeyrefContentDeserializerState>,
17834 ) -> Result<ElementHandlerOutput<'de>, Error>
17835 where
17836 R: DeserializeReader,
17837 {
17838 let DeserializerOutput {
17839 artifact,
17840 event,
17841 allow_any,
17842 } = output;
17843 if artifact.is_none() {
17844 fallback.get_or_insert(KeyrefContentDeserializerState::Annotation(None));
17845 *self.state = KeyrefContentDeserializerState::Selector(None);
17846 return Ok(ElementHandlerOutput::from_event(event, allow_any));
17847 }
17848 if let Some(fallback) = fallback.take() {
17849 self.finish_state(reader, fallback)?;
17850 }
17851 Ok(match artifact {
17852 DeserializerArtifact::None => unreachable!(),
17853 DeserializerArtifact::Data(data) => {
17854 self.store_annotation(data)?;
17855 *self.state = KeyrefContentDeserializerState::Selector(None);
17856 ElementHandlerOutput::from_event(event, allow_any)
17857 }
17858 DeserializerArtifact::Deserializer(deserializer) => {
17859 let ret = ElementHandlerOutput::from_event(event, allow_any);
17860 match &ret {
17861 ElementHandlerOutput::Continue { .. } => {
17862 fallback.get_or_insert(KeyrefContentDeserializerState::Annotation(
17863 Some(deserializer),
17864 ));
17865 *self.state = KeyrefContentDeserializerState::Selector(None);
17866 }
17867 ElementHandlerOutput::Break { .. } => {
17868 *self.state =
17869 KeyrefContentDeserializerState::Annotation(Some(deserializer));
17870 }
17871 }
17872 ret
17873 }
17874 })
17875 }
17876 fn handle_selector<'de, R>(
17877 &mut self,
17878 reader: &R,
17879 output: DeserializerOutput<'de, super::Field>,
17880 fallback: &mut Option<KeyrefContentDeserializerState>,
17881 ) -> Result<ElementHandlerOutput<'de>, Error>
17882 where
17883 R: DeserializeReader,
17884 {
17885 let DeserializerOutput {
17886 artifact,
17887 event,
17888 allow_any,
17889 } = output;
17890 if artifact.is_none() {
17891 if self.selector.is_some() {
17892 fallback.get_or_insert(KeyrefContentDeserializerState::Selector(None));
17893 *self.state = KeyrefContentDeserializerState::Field(None);
17894 return Ok(ElementHandlerOutput::from_event(event, allow_any));
17895 } else {
17896 *self.state = KeyrefContentDeserializerState::Selector(None);
17897 return Ok(ElementHandlerOutput::break_(event, allow_any));
17898 }
17899 }
17900 if let Some(fallback) = fallback.take() {
17901 self.finish_state(reader, fallback)?;
17902 }
17903 Ok(match artifact {
17904 DeserializerArtifact::None => unreachable!(),
17905 DeserializerArtifact::Data(data) => {
17906 self.store_selector(data)?;
17907 *self.state = KeyrefContentDeserializerState::Field(None);
17908 ElementHandlerOutput::from_event(event, allow_any)
17909 }
17910 DeserializerArtifact::Deserializer(deserializer) => {
17911 let ret = ElementHandlerOutput::from_event(event, allow_any);
17912 match &ret {
17913 ElementHandlerOutput::Continue { .. } => {
17914 fallback.get_or_insert(KeyrefContentDeserializerState::Selector(Some(
17915 deserializer,
17916 )));
17917 *self.state = KeyrefContentDeserializerState::Field(None);
17918 }
17919 ElementHandlerOutput::Break { .. } => {
17920 *self.state =
17921 KeyrefContentDeserializerState::Selector(Some(deserializer));
17922 }
17923 }
17924 ret
17925 }
17926 })
17927 }
17928 fn handle_field<'de, R>(
17929 &mut self,
17930 reader: &R,
17931 output: DeserializerOutput<'de, super::Field>,
17932 fallback: &mut Option<KeyrefContentDeserializerState>,
17933 ) -> Result<ElementHandlerOutput<'de>, Error>
17934 where
17935 R: DeserializeReader,
17936 {
17937 let DeserializerOutput {
17938 artifact,
17939 event,
17940 allow_any,
17941 } = output;
17942 if artifact.is_none() {
17943 if self.field.len() < 1usize {
17944 *self.state = KeyrefContentDeserializerState::Field(None);
17945 return Ok(ElementHandlerOutput::break_(event, allow_any));
17946 } else {
17947 fallback.get_or_insert(KeyrefContentDeserializerState::Field(None));
17948 *self.state = KeyrefContentDeserializerState::Done__;
17949 return Ok(ElementHandlerOutput::from_event(event, allow_any));
17950 }
17951 }
17952 if let Some(fallback) = fallback.take() {
17953 self.finish_state(reader, fallback)?;
17954 }
17955 Ok(match artifact {
17956 DeserializerArtifact::None => unreachable!(),
17957 DeserializerArtifact::Data(data) => {
17958 self.store_field(data)?;
17959 *self.state = KeyrefContentDeserializerState::Field(None);
17960 ElementHandlerOutput::from_event(event, allow_any)
17961 }
17962 DeserializerArtifact::Deserializer(deserializer) => {
17963 let ret = ElementHandlerOutput::from_event(event, allow_any);
17964 match &ret {
17965 ElementHandlerOutput::Continue { .. } => {
17966 fallback.get_or_insert(KeyrefContentDeserializerState::Field(Some(
17967 deserializer,
17968 )));
17969 if self.field.len().saturating_add(1) < 1usize {
17970 *self.state = KeyrefContentDeserializerState::Field(None);
17971 } else {
17972 *self.state = KeyrefContentDeserializerState::Done__;
17973 }
17974 }
17975 ElementHandlerOutput::Break { .. } => {
17976 *self.state = KeyrefContentDeserializerState::Field(Some(deserializer));
17977 }
17978 }
17979 ret
17980 }
17981 })
17982 }
17983 }
17984 impl<'de> Deserializer<'de, super::KeyrefContent> for Box<KeyrefContentDeserializer> {
17985 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::KeyrefContent>
17986 where
17987 R: DeserializeReader,
17988 {
17989 let deserializer = Box::new(KeyrefContentDeserializer {
17990 annotation: None,
17991 selector: None,
17992 field: Vec::new(),
17993 state: Box::new(KeyrefContentDeserializerState::Init__),
17994 });
17995 let mut output = deserializer.next(reader, event)?;
17996 output.artifact = match output.artifact {
17997 DeserializerArtifact::Deserializer(x)
17998 if matches!(&*x.state, KeyrefContentDeserializerState::Init__) =>
17999 {
18000 DeserializerArtifact::None
18001 }
18002 artifact => artifact,
18003 };
18004 Ok(output)
18005 }
18006 fn next<R>(
18007 mut self,
18008 reader: &R,
18009 event: Event<'de>,
18010 ) -> DeserializerResult<'de, super::KeyrefContent>
18011 where
18012 R: DeserializeReader,
18013 {
18014 use KeyrefContentDeserializerState as S;
18015 let mut event = event;
18016 let mut fallback = None;
18017 let mut allow_any_element = false;
18018 let (event, allow_any) = loop {
18019 let state = replace(&mut *self.state, S::Unknown__);
18020 event = match (state, event) {
18021 (S::Annotation(Some(deserializer)), event) => {
18022 let output = deserializer.next(reader, event)?;
18023 match self.handle_annotation(reader, output, &mut fallback)? {
18024 ElementHandlerOutput::Continue { event, allow_any } => {
18025 allow_any_element = allow_any_element || allow_any;
18026 event
18027 }
18028 ElementHandlerOutput::Break { event, allow_any } => {
18029 break (event, allow_any)
18030 }
18031 }
18032 }
18033 (S::Selector(Some(deserializer)), event) => {
18034 let output = deserializer.next(reader, event)?;
18035 match self.handle_selector(reader, output, &mut fallback)? {
18036 ElementHandlerOutput::Continue { event, allow_any } => {
18037 allow_any_element = allow_any_element || allow_any;
18038 event
18039 }
18040 ElementHandlerOutput::Break { event, allow_any } => {
18041 break (event, allow_any)
18042 }
18043 }
18044 }
18045 (S::Field(Some(deserializer)), event) => {
18046 let output = deserializer.next(reader, event)?;
18047 match self.handle_field(reader, output, &mut fallback)? {
18048 ElementHandlerOutput::Continue { event, allow_any } => {
18049 allow_any_element = allow_any_element || allow_any;
18050 event
18051 }
18052 ElementHandlerOutput::Break { event, allow_any } => {
18053 break (event, allow_any)
18054 }
18055 }
18056 }
18057 (_, event @ Event::End(_)) => {
18058 if let Some(fallback) = fallback.take() {
18059 self.finish_state(reader, fallback)?;
18060 }
18061 return Ok(DeserializerOutput {
18062 artifact: DeserializerArtifact::Data(self.finish(reader)?),
18063 event: DeserializerEvent::Continue(event),
18064 allow_any: false,
18065 });
18066 }
18067 (S::Init__, event) => {
18068 fallback.get_or_insert(S::Init__);
18069 *self.state = KeyrefContentDeserializerState::Annotation(None);
18070 event
18071 }
18072 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
18073 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
18074 let output =
18075 <super::Annotation as WithDeserializer>::Deserializer::init(
18076 reader, event,
18077 )?;
18078 match self.handle_annotation(reader, output, &mut fallback)? {
18079 ElementHandlerOutput::Continue { event, allow_any } => {
18080 allow_any_element = allow_any_element || allow_any;
18081 event
18082 }
18083 ElementHandlerOutput::Break { event, allow_any } => {
18084 break (event, allow_any)
18085 }
18086 }
18087 } else {
18088 *self.state = S::Selector(None);
18089 allow_any_element = true;
18090 fallback.get_or_insert(S::Annotation(None));
18091 event
18092 }
18093 }
18094 (S::Selector(None), event @ (Event::Start(_) | Event::Empty(_))) => {
18095 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"selector") {
18096 let output = <super::Field as WithDeserializer>::Deserializer::init(
18097 reader, event,
18098 )?;
18099 match self.handle_selector(reader, output, &mut fallback)? {
18100 ElementHandlerOutput::Continue { event, allow_any } => {
18101 allow_any_element = allow_any_element || allow_any;
18102 event
18103 }
18104 ElementHandlerOutput::Break { event, allow_any } => {
18105 break (event, allow_any)
18106 }
18107 }
18108 } else {
18109 *self.state = S::Field(None);
18110 allow_any_element = true;
18111 fallback.get_or_insert(S::Selector(None));
18112 event
18113 }
18114 }
18115 (S::Field(None), event @ (Event::Start(_) | Event::Empty(_))) => {
18116 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"field") {
18117 let output = <super::Field as WithDeserializer>::Deserializer::init(
18118 reader, event,
18119 )?;
18120 match self.handle_field(reader, output, &mut fallback)? {
18121 ElementHandlerOutput::Continue { event, allow_any } => {
18122 allow_any_element = allow_any_element || allow_any;
18123 event
18124 }
18125 ElementHandlerOutput::Break { event, allow_any } => {
18126 break (event, allow_any)
18127 }
18128 }
18129 } else {
18130 *self.state = S::Done__;
18131 allow_any_element = true;
18132 fallback.get_or_insert(S::Field(None));
18133 event
18134 }
18135 }
18136 (S::Done__, event) => {
18137 fallback.get_or_insert(S::Done__);
18138 break (DeserializerEvent::Continue(event), allow_any_element);
18139 }
18140 (S::Unknown__, _) => unreachable!(),
18141 (state, event) => {
18142 *self.state = state;
18143 break (DeserializerEvent::Break(event), false);
18144 }
18145 }
18146 };
18147 if let Some(fallback) = fallback {
18148 *self.state = fallback;
18149 }
18150 Ok(DeserializerOutput {
18151 artifact: DeserializerArtifact::Deserializer(self),
18152 event,
18153 allow_any,
18154 })
18155 }
18156 fn finish<R>(mut self, reader: &R) -> Result<super::KeyrefContent, Error>
18157 where
18158 R: DeserializeReader,
18159 {
18160 let state = replace(&mut *self.state, KeyrefContentDeserializerState::Unknown__);
18161 self.finish_state(reader, state)?;
18162 Ok(super::KeyrefContent {
18163 annotation: self.annotation,
18164 selector: self
18165 .selector
18166 .ok_or_else(|| ErrorKind::MissingElement("selector".into()))?,
18167 field: self.field,
18168 })
18169 }
18170 }
18171 #[derive(Debug)]
18172 pub struct FacetDeserializer {
18173 state: Box<FacetDeserializerState>,
18174 }
18175 #[derive(Debug)]
18176 pub enum FacetDeserializerState {
18177 Init__,
18178 MinExclusive(
18179 Option<super::FacetType>,
18180 Option<<super::FacetType as WithDeserializer>::Deserializer>,
18181 ),
18182 MinInclusive(
18183 Option<super::FacetType>,
18184 Option<<super::FacetType as WithDeserializer>::Deserializer>,
18185 ),
18186 MaxExclusive(
18187 Option<super::FacetType>,
18188 Option<<super::FacetType as WithDeserializer>::Deserializer>,
18189 ),
18190 MaxInclusive(
18191 Option<super::FacetType>,
18192 Option<<super::FacetType as WithDeserializer>::Deserializer>,
18193 ),
18194 TotalDigits(
18195 Option<super::FacetType>,
18196 Option<<super::FacetType as WithDeserializer>::Deserializer>,
18197 ),
18198 FractionDigits(
18199 Option<super::FacetType>,
18200 Option<<super::FacetType as WithDeserializer>::Deserializer>,
18201 ),
18202 Length(
18203 Option<super::FacetType>,
18204 Option<<super::FacetType as WithDeserializer>::Deserializer>,
18205 ),
18206 MinLength(
18207 Option<super::FacetType>,
18208 Option<<super::FacetType as WithDeserializer>::Deserializer>,
18209 ),
18210 MaxLength(
18211 Option<super::FacetType>,
18212 Option<<super::FacetType as WithDeserializer>::Deserializer>,
18213 ),
18214 Enumeration(
18215 Option<super::FacetType>,
18216 Option<<super::FacetType as WithDeserializer>::Deserializer>,
18217 ),
18218 WhiteSpace(
18219 Option<super::FacetType>,
18220 Option<<super::FacetType as WithDeserializer>::Deserializer>,
18221 ),
18222 Pattern(
18223 Option<super::FacetType>,
18224 Option<<super::FacetType as WithDeserializer>::Deserializer>,
18225 ),
18226 Assertion(
18227 Option<super::AssertionType>,
18228 Option<<super::AssertionType as WithDeserializer>::Deserializer>,
18229 ),
18230 ExplicitTimezone(
18231 Option<super::FacetType>,
18232 Option<<super::FacetType as WithDeserializer>::Deserializer>,
18233 ),
18234 Done__(super::Facet),
18235 Unknown__,
18236 }
18237 impl FacetDeserializer {
18238 fn find_suitable<'de, R>(
18239 &mut self,
18240 reader: &R,
18241 event: Event<'de>,
18242 fallback: &mut Option<FacetDeserializerState>,
18243 ) -> Result<ElementHandlerOutput<'de>, Error>
18244 where
18245 R: DeserializeReader,
18246 {
18247 let (Event::Start(x) | Event::Empty(x)) = &event else {
18248 *self.state = fallback.take().unwrap_or(FacetDeserializerState::Init__);
18249 return Ok(ElementHandlerOutput::return_to_parent(event, false));
18250 };
18251 if matches!(
18252 reader.resolve_local_name(x.name(), &super::NS_XS),
18253 Some(b"minExclusive")
18254 ) {
18255 let output =
18256 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
18257 return self.handle_min_exclusive(
18258 reader,
18259 Default::default(),
18260 output,
18261 &mut *fallback,
18262 );
18263 }
18264 if matches!(
18265 reader.resolve_local_name(x.name(), &super::NS_XS),
18266 Some(b"minInclusive")
18267 ) {
18268 let output =
18269 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
18270 return self.handle_min_inclusive(
18271 reader,
18272 Default::default(),
18273 output,
18274 &mut *fallback,
18275 );
18276 }
18277 if matches!(
18278 reader.resolve_local_name(x.name(), &super::NS_XS),
18279 Some(b"maxExclusive")
18280 ) {
18281 let output =
18282 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
18283 return self.handle_max_exclusive(
18284 reader,
18285 Default::default(),
18286 output,
18287 &mut *fallback,
18288 );
18289 }
18290 if matches!(
18291 reader.resolve_local_name(x.name(), &super::NS_XS),
18292 Some(b"maxInclusive")
18293 ) {
18294 let output =
18295 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
18296 return self.handle_max_inclusive(
18297 reader,
18298 Default::default(),
18299 output,
18300 &mut *fallback,
18301 );
18302 }
18303 if matches!(
18304 reader.resolve_local_name(x.name(), &super::NS_XS),
18305 Some(b"totalDigits")
18306 ) {
18307 let output =
18308 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
18309 return self.handle_total_digits(
18310 reader,
18311 Default::default(),
18312 output,
18313 &mut *fallback,
18314 );
18315 }
18316 if matches!(
18317 reader.resolve_local_name(x.name(), &super::NS_XS),
18318 Some(b"fractionDigits")
18319 ) {
18320 let output =
18321 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
18322 return self.handle_fraction_digits(
18323 reader,
18324 Default::default(),
18325 output,
18326 &mut *fallback,
18327 );
18328 }
18329 if matches!(
18330 reader.resolve_local_name(x.name(), &super::NS_XS),
18331 Some(b"length")
18332 ) {
18333 let output =
18334 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
18335 return self.handle_length(reader, Default::default(), output, &mut *fallback);
18336 }
18337 if matches!(
18338 reader.resolve_local_name(x.name(), &super::NS_XS),
18339 Some(b"minLength")
18340 ) {
18341 let output =
18342 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
18343 return self.handle_min_length(reader, Default::default(), output, &mut *fallback);
18344 }
18345 if matches!(
18346 reader.resolve_local_name(x.name(), &super::NS_XS),
18347 Some(b"maxLength")
18348 ) {
18349 let output =
18350 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
18351 return self.handle_max_length(reader, Default::default(), output, &mut *fallback);
18352 }
18353 if matches!(
18354 reader.resolve_local_name(x.name(), &super::NS_XS),
18355 Some(b"enumeration")
18356 ) {
18357 let output =
18358 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
18359 return self.handle_enumeration(reader, Default::default(), output, &mut *fallback);
18360 }
18361 if matches!(
18362 reader.resolve_local_name(x.name(), &super::NS_XS),
18363 Some(b"whiteSpace")
18364 ) {
18365 let output =
18366 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
18367 return self.handle_white_space(reader, Default::default(), output, &mut *fallback);
18368 }
18369 if matches!(
18370 reader.resolve_local_name(x.name(), &super::NS_XS),
18371 Some(b"pattern")
18372 ) {
18373 let output =
18374 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
18375 return self.handle_pattern(reader, Default::default(), output, &mut *fallback);
18376 }
18377 if matches!(
18378 reader.resolve_local_name(x.name(), &super::NS_XS),
18379 Some(b"assertion")
18380 ) {
18381 let output =
18382 <super::AssertionType as WithDeserializer>::Deserializer::init(reader, event)?;
18383 return self.handle_assertion(reader, Default::default(), output, &mut *fallback);
18384 }
18385 if matches!(
18386 reader.resolve_local_name(x.name(), &super::NS_XS),
18387 Some(b"explicitTimezone")
18388 ) {
18389 let output =
18390 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
18391 return self.handle_explicit_timezone(
18392 reader,
18393 Default::default(),
18394 output,
18395 &mut *fallback,
18396 );
18397 }
18398 *self.state = fallback.take().unwrap_or(FacetDeserializerState::Init__);
18399 Ok(ElementHandlerOutput::return_to_parent(event, false))
18400 }
18401 fn finish_state<R>(reader: &R, state: FacetDeserializerState) -> Result<super::Facet, Error>
18402 where
18403 R: DeserializeReader,
18404 {
18405 use FacetDeserializerState as S;
18406 match state {
18407 S::Init__ => Err(ErrorKind::MissingContent.into()),
18408 S::MinExclusive(mut values, deserializer) => {
18409 if let Some(deserializer) = deserializer {
18410 let value = deserializer.finish(reader)?;
18411 FacetDeserializer::store_min_exclusive(&mut values, value)?;
18412 }
18413 Ok(super::Facet::MinExclusive(values.ok_or_else(|| {
18414 ErrorKind::MissingElement("minExclusive".into())
18415 })?))
18416 }
18417 S::MinInclusive(mut values, deserializer) => {
18418 if let Some(deserializer) = deserializer {
18419 let value = deserializer.finish(reader)?;
18420 FacetDeserializer::store_min_inclusive(&mut values, value)?;
18421 }
18422 Ok(super::Facet::MinInclusive(values.ok_or_else(|| {
18423 ErrorKind::MissingElement("minInclusive".into())
18424 })?))
18425 }
18426 S::MaxExclusive(mut values, deserializer) => {
18427 if let Some(deserializer) = deserializer {
18428 let value = deserializer.finish(reader)?;
18429 FacetDeserializer::store_max_exclusive(&mut values, value)?;
18430 }
18431 Ok(super::Facet::MaxExclusive(values.ok_or_else(|| {
18432 ErrorKind::MissingElement("maxExclusive".into())
18433 })?))
18434 }
18435 S::MaxInclusive(mut values, deserializer) => {
18436 if let Some(deserializer) = deserializer {
18437 let value = deserializer.finish(reader)?;
18438 FacetDeserializer::store_max_inclusive(&mut values, value)?;
18439 }
18440 Ok(super::Facet::MaxInclusive(values.ok_or_else(|| {
18441 ErrorKind::MissingElement("maxInclusive".into())
18442 })?))
18443 }
18444 S::TotalDigits(mut values, deserializer) => {
18445 if let Some(deserializer) = deserializer {
18446 let value = deserializer.finish(reader)?;
18447 FacetDeserializer::store_total_digits(&mut values, value)?;
18448 }
18449 Ok(super::Facet::TotalDigits(values.ok_or_else(|| {
18450 ErrorKind::MissingElement("totalDigits".into())
18451 })?))
18452 }
18453 S::FractionDigits(mut values, deserializer) => {
18454 if let Some(deserializer) = deserializer {
18455 let value = deserializer.finish(reader)?;
18456 FacetDeserializer::store_fraction_digits(&mut values, value)?;
18457 }
18458 Ok(super::Facet::FractionDigits(values.ok_or_else(|| {
18459 ErrorKind::MissingElement("fractionDigits".into())
18460 })?))
18461 }
18462 S::Length(mut values, deserializer) => {
18463 if let Some(deserializer) = deserializer {
18464 let value = deserializer.finish(reader)?;
18465 FacetDeserializer::store_length(&mut values, value)?;
18466 }
18467 Ok(super::Facet::Length(values.ok_or_else(|| {
18468 ErrorKind::MissingElement("length".into())
18469 })?))
18470 }
18471 S::MinLength(mut values, deserializer) => {
18472 if let Some(deserializer) = deserializer {
18473 let value = deserializer.finish(reader)?;
18474 FacetDeserializer::store_min_length(&mut values, value)?;
18475 }
18476 Ok(super::Facet::MinLength(values.ok_or_else(|| {
18477 ErrorKind::MissingElement("minLength".into())
18478 })?))
18479 }
18480 S::MaxLength(mut values, deserializer) => {
18481 if let Some(deserializer) = deserializer {
18482 let value = deserializer.finish(reader)?;
18483 FacetDeserializer::store_max_length(&mut values, value)?;
18484 }
18485 Ok(super::Facet::MaxLength(values.ok_or_else(|| {
18486 ErrorKind::MissingElement("maxLength".into())
18487 })?))
18488 }
18489 S::Enumeration(mut values, deserializer) => {
18490 if let Some(deserializer) = deserializer {
18491 let value = deserializer.finish(reader)?;
18492 FacetDeserializer::store_enumeration(&mut values, value)?;
18493 }
18494 Ok(super::Facet::Enumeration(values.ok_or_else(|| {
18495 ErrorKind::MissingElement("enumeration".into())
18496 })?))
18497 }
18498 S::WhiteSpace(mut values, deserializer) => {
18499 if let Some(deserializer) = deserializer {
18500 let value = deserializer.finish(reader)?;
18501 FacetDeserializer::store_white_space(&mut values, value)?;
18502 }
18503 Ok(super::Facet::WhiteSpace(values.ok_or_else(|| {
18504 ErrorKind::MissingElement("whiteSpace".into())
18505 })?))
18506 }
18507 S::Pattern(mut values, deserializer) => {
18508 if let Some(deserializer) = deserializer {
18509 let value = deserializer.finish(reader)?;
18510 FacetDeserializer::store_pattern(&mut values, value)?;
18511 }
18512 Ok(super::Facet::Pattern(values.ok_or_else(|| {
18513 ErrorKind::MissingElement("pattern".into())
18514 })?))
18515 }
18516 S::Assertion(mut values, deserializer) => {
18517 if let Some(deserializer) = deserializer {
18518 let value = deserializer.finish(reader)?;
18519 FacetDeserializer::store_assertion(&mut values, value)?;
18520 }
18521 Ok(super::Facet::Assertion(values.ok_or_else(|| {
18522 ErrorKind::MissingElement("assertion".into())
18523 })?))
18524 }
18525 S::ExplicitTimezone(mut values, deserializer) => {
18526 if let Some(deserializer) = deserializer {
18527 let value = deserializer.finish(reader)?;
18528 FacetDeserializer::store_explicit_timezone(&mut values, value)?;
18529 }
18530 Ok(super::Facet::ExplicitTimezone(values.ok_or_else(|| {
18531 ErrorKind::MissingElement("explicitTimezone".into())
18532 })?))
18533 }
18534 S::Done__(data) => Ok(data),
18535 S::Unknown__ => unreachable!(),
18536 }
18537 }
18538 fn store_min_exclusive(
18539 values: &mut Option<super::FacetType>,
18540 value: super::FacetType,
18541 ) -> Result<(), Error> {
18542 if values.is_some() {
18543 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18544 b"minExclusive",
18545 )))?;
18546 }
18547 *values = Some(value);
18548 Ok(())
18549 }
18550 fn store_min_inclusive(
18551 values: &mut Option<super::FacetType>,
18552 value: super::FacetType,
18553 ) -> Result<(), Error> {
18554 if values.is_some() {
18555 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18556 b"minInclusive",
18557 )))?;
18558 }
18559 *values = Some(value);
18560 Ok(())
18561 }
18562 fn store_max_exclusive(
18563 values: &mut Option<super::FacetType>,
18564 value: super::FacetType,
18565 ) -> Result<(), Error> {
18566 if values.is_some() {
18567 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18568 b"maxExclusive",
18569 )))?;
18570 }
18571 *values = Some(value);
18572 Ok(())
18573 }
18574 fn store_max_inclusive(
18575 values: &mut Option<super::FacetType>,
18576 value: super::FacetType,
18577 ) -> Result<(), Error> {
18578 if values.is_some() {
18579 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18580 b"maxInclusive",
18581 )))?;
18582 }
18583 *values = Some(value);
18584 Ok(())
18585 }
18586 fn store_total_digits(
18587 values: &mut Option<super::FacetType>,
18588 value: super::FacetType,
18589 ) -> Result<(), Error> {
18590 if values.is_some() {
18591 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18592 b"totalDigits",
18593 )))?;
18594 }
18595 *values = Some(value);
18596 Ok(())
18597 }
18598 fn store_fraction_digits(
18599 values: &mut Option<super::FacetType>,
18600 value: super::FacetType,
18601 ) -> Result<(), Error> {
18602 if values.is_some() {
18603 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18604 b"fractionDigits",
18605 )))?;
18606 }
18607 *values = Some(value);
18608 Ok(())
18609 }
18610 fn store_length(
18611 values: &mut Option<super::FacetType>,
18612 value: super::FacetType,
18613 ) -> Result<(), Error> {
18614 if values.is_some() {
18615 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18616 b"length",
18617 )))?;
18618 }
18619 *values = Some(value);
18620 Ok(())
18621 }
18622 fn store_min_length(
18623 values: &mut Option<super::FacetType>,
18624 value: super::FacetType,
18625 ) -> Result<(), Error> {
18626 if values.is_some() {
18627 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18628 b"minLength",
18629 )))?;
18630 }
18631 *values = Some(value);
18632 Ok(())
18633 }
18634 fn store_max_length(
18635 values: &mut Option<super::FacetType>,
18636 value: super::FacetType,
18637 ) -> Result<(), Error> {
18638 if values.is_some() {
18639 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18640 b"maxLength",
18641 )))?;
18642 }
18643 *values = Some(value);
18644 Ok(())
18645 }
18646 fn store_enumeration(
18647 values: &mut Option<super::FacetType>,
18648 value: super::FacetType,
18649 ) -> Result<(), Error> {
18650 if values.is_some() {
18651 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18652 b"enumeration",
18653 )))?;
18654 }
18655 *values = Some(value);
18656 Ok(())
18657 }
18658 fn store_white_space(
18659 values: &mut Option<super::FacetType>,
18660 value: super::FacetType,
18661 ) -> Result<(), Error> {
18662 if values.is_some() {
18663 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18664 b"whiteSpace",
18665 )))?;
18666 }
18667 *values = Some(value);
18668 Ok(())
18669 }
18670 fn store_pattern(
18671 values: &mut Option<super::FacetType>,
18672 value: super::FacetType,
18673 ) -> Result<(), Error> {
18674 if values.is_some() {
18675 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18676 b"pattern",
18677 )))?;
18678 }
18679 *values = Some(value);
18680 Ok(())
18681 }
18682 fn store_assertion(
18683 values: &mut Option<super::AssertionType>,
18684 value: super::AssertionType,
18685 ) -> Result<(), Error> {
18686 if values.is_some() {
18687 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18688 b"assertion",
18689 )))?;
18690 }
18691 *values = Some(value);
18692 Ok(())
18693 }
18694 fn store_explicit_timezone(
18695 values: &mut Option<super::FacetType>,
18696 value: super::FacetType,
18697 ) -> Result<(), Error> {
18698 if values.is_some() {
18699 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
18700 b"explicitTimezone",
18701 )))?;
18702 }
18703 *values = Some(value);
18704 Ok(())
18705 }
18706 fn handle_min_exclusive<'de, R>(
18707 &mut self,
18708 reader: &R,
18709 mut values: Option<super::FacetType>,
18710 output: DeserializerOutput<'de, super::FacetType>,
18711 fallback: &mut Option<FacetDeserializerState>,
18712 ) -> Result<ElementHandlerOutput<'de>, Error>
18713 where
18714 R: DeserializeReader,
18715 {
18716 let DeserializerOutput {
18717 artifact,
18718 event,
18719 allow_any,
18720 } = output;
18721 if artifact.is_none() {
18722 *self.state = match fallback.take() {
18723 None => FacetDeserializerState::Init__,
18724 Some(FacetDeserializerState::MinExclusive(_, Some(deserializer))) => {
18725 FacetDeserializerState::MinExclusive(values, Some(deserializer))
18726 }
18727 _ => unreachable!(),
18728 };
18729 return Ok(ElementHandlerOutput::break_(event, allow_any));
18730 }
18731 match fallback.take() {
18732 None => (),
18733 Some(FacetDeserializerState::MinExclusive(_, Some(deserializer))) => {
18734 let data = deserializer.finish(reader)?;
18735 FacetDeserializer::store_min_exclusive(&mut values, data)?;
18736 }
18737 Some(_) => unreachable!(),
18738 }
18739 Ok(match artifact {
18740 DeserializerArtifact::None => unreachable!(),
18741 DeserializerArtifact::Data(data) => {
18742 FacetDeserializer::store_min_exclusive(&mut values, data)?;
18743 let data = FacetDeserializer::finish_state(
18744 reader,
18745 FacetDeserializerState::MinExclusive(values, None),
18746 )?;
18747 *self.state = FacetDeserializerState::Done__(data);
18748 ElementHandlerOutput::Break { event, allow_any }
18749 }
18750 DeserializerArtifact::Deserializer(deserializer) => {
18751 *self.state = FacetDeserializerState::MinExclusive(values, Some(deserializer));
18752 ElementHandlerOutput::from_event_end(event, allow_any)
18753 }
18754 })
18755 }
18756 fn handle_min_inclusive<'de, R>(
18757 &mut self,
18758 reader: &R,
18759 mut values: Option<super::FacetType>,
18760 output: DeserializerOutput<'de, super::FacetType>,
18761 fallback: &mut Option<FacetDeserializerState>,
18762 ) -> Result<ElementHandlerOutput<'de>, Error>
18763 where
18764 R: DeserializeReader,
18765 {
18766 let DeserializerOutput {
18767 artifact,
18768 event,
18769 allow_any,
18770 } = output;
18771 if artifact.is_none() {
18772 *self.state = match fallback.take() {
18773 None => FacetDeserializerState::Init__,
18774 Some(FacetDeserializerState::MinInclusive(_, Some(deserializer))) => {
18775 FacetDeserializerState::MinInclusive(values, Some(deserializer))
18776 }
18777 _ => unreachable!(),
18778 };
18779 return Ok(ElementHandlerOutput::break_(event, allow_any));
18780 }
18781 match fallback.take() {
18782 None => (),
18783 Some(FacetDeserializerState::MinInclusive(_, Some(deserializer))) => {
18784 let data = deserializer.finish(reader)?;
18785 FacetDeserializer::store_min_inclusive(&mut values, data)?;
18786 }
18787 Some(_) => unreachable!(),
18788 }
18789 Ok(match artifact {
18790 DeserializerArtifact::None => unreachable!(),
18791 DeserializerArtifact::Data(data) => {
18792 FacetDeserializer::store_min_inclusive(&mut values, data)?;
18793 let data = FacetDeserializer::finish_state(
18794 reader,
18795 FacetDeserializerState::MinInclusive(values, None),
18796 )?;
18797 *self.state = FacetDeserializerState::Done__(data);
18798 ElementHandlerOutput::Break { event, allow_any }
18799 }
18800 DeserializerArtifact::Deserializer(deserializer) => {
18801 *self.state = FacetDeserializerState::MinInclusive(values, Some(deserializer));
18802 ElementHandlerOutput::from_event_end(event, allow_any)
18803 }
18804 })
18805 }
18806 fn handle_max_exclusive<'de, R>(
18807 &mut self,
18808 reader: &R,
18809 mut values: Option<super::FacetType>,
18810 output: DeserializerOutput<'de, super::FacetType>,
18811 fallback: &mut Option<FacetDeserializerState>,
18812 ) -> Result<ElementHandlerOutput<'de>, Error>
18813 where
18814 R: DeserializeReader,
18815 {
18816 let DeserializerOutput {
18817 artifact,
18818 event,
18819 allow_any,
18820 } = output;
18821 if artifact.is_none() {
18822 *self.state = match fallback.take() {
18823 None => FacetDeserializerState::Init__,
18824 Some(FacetDeserializerState::MaxExclusive(_, Some(deserializer))) => {
18825 FacetDeserializerState::MaxExclusive(values, Some(deserializer))
18826 }
18827 _ => unreachable!(),
18828 };
18829 return Ok(ElementHandlerOutput::break_(event, allow_any));
18830 }
18831 match fallback.take() {
18832 None => (),
18833 Some(FacetDeserializerState::MaxExclusive(_, Some(deserializer))) => {
18834 let data = deserializer.finish(reader)?;
18835 FacetDeserializer::store_max_exclusive(&mut values, data)?;
18836 }
18837 Some(_) => unreachable!(),
18838 }
18839 Ok(match artifact {
18840 DeserializerArtifact::None => unreachable!(),
18841 DeserializerArtifact::Data(data) => {
18842 FacetDeserializer::store_max_exclusive(&mut values, data)?;
18843 let data = FacetDeserializer::finish_state(
18844 reader,
18845 FacetDeserializerState::MaxExclusive(values, None),
18846 )?;
18847 *self.state = FacetDeserializerState::Done__(data);
18848 ElementHandlerOutput::Break { event, allow_any }
18849 }
18850 DeserializerArtifact::Deserializer(deserializer) => {
18851 *self.state = FacetDeserializerState::MaxExclusive(values, Some(deserializer));
18852 ElementHandlerOutput::from_event_end(event, allow_any)
18853 }
18854 })
18855 }
18856 fn handle_max_inclusive<'de, R>(
18857 &mut self,
18858 reader: &R,
18859 mut values: Option<super::FacetType>,
18860 output: DeserializerOutput<'de, super::FacetType>,
18861 fallback: &mut Option<FacetDeserializerState>,
18862 ) -> Result<ElementHandlerOutput<'de>, Error>
18863 where
18864 R: DeserializeReader,
18865 {
18866 let DeserializerOutput {
18867 artifact,
18868 event,
18869 allow_any,
18870 } = output;
18871 if artifact.is_none() {
18872 *self.state = match fallback.take() {
18873 None => FacetDeserializerState::Init__,
18874 Some(FacetDeserializerState::MaxInclusive(_, Some(deserializer))) => {
18875 FacetDeserializerState::MaxInclusive(values, Some(deserializer))
18876 }
18877 _ => unreachable!(),
18878 };
18879 return Ok(ElementHandlerOutput::break_(event, allow_any));
18880 }
18881 match fallback.take() {
18882 None => (),
18883 Some(FacetDeserializerState::MaxInclusive(_, Some(deserializer))) => {
18884 let data = deserializer.finish(reader)?;
18885 FacetDeserializer::store_max_inclusive(&mut values, data)?;
18886 }
18887 Some(_) => unreachable!(),
18888 }
18889 Ok(match artifact {
18890 DeserializerArtifact::None => unreachable!(),
18891 DeserializerArtifact::Data(data) => {
18892 FacetDeserializer::store_max_inclusive(&mut values, data)?;
18893 let data = FacetDeserializer::finish_state(
18894 reader,
18895 FacetDeserializerState::MaxInclusive(values, None),
18896 )?;
18897 *self.state = FacetDeserializerState::Done__(data);
18898 ElementHandlerOutput::Break { event, allow_any }
18899 }
18900 DeserializerArtifact::Deserializer(deserializer) => {
18901 *self.state = FacetDeserializerState::MaxInclusive(values, Some(deserializer));
18902 ElementHandlerOutput::from_event_end(event, allow_any)
18903 }
18904 })
18905 }
18906 fn handle_total_digits<'de, R>(
18907 &mut self,
18908 reader: &R,
18909 mut values: Option<super::FacetType>,
18910 output: DeserializerOutput<'de, super::FacetType>,
18911 fallback: &mut Option<FacetDeserializerState>,
18912 ) -> Result<ElementHandlerOutput<'de>, Error>
18913 where
18914 R: DeserializeReader,
18915 {
18916 let DeserializerOutput {
18917 artifact,
18918 event,
18919 allow_any,
18920 } = output;
18921 if artifact.is_none() {
18922 *self.state = match fallback.take() {
18923 None => FacetDeserializerState::Init__,
18924 Some(FacetDeserializerState::TotalDigits(_, Some(deserializer))) => {
18925 FacetDeserializerState::TotalDigits(values, Some(deserializer))
18926 }
18927 _ => unreachable!(),
18928 };
18929 return Ok(ElementHandlerOutput::break_(event, allow_any));
18930 }
18931 match fallback.take() {
18932 None => (),
18933 Some(FacetDeserializerState::TotalDigits(_, Some(deserializer))) => {
18934 let data = deserializer.finish(reader)?;
18935 FacetDeserializer::store_total_digits(&mut values, data)?;
18936 }
18937 Some(_) => unreachable!(),
18938 }
18939 Ok(match artifact {
18940 DeserializerArtifact::None => unreachable!(),
18941 DeserializerArtifact::Data(data) => {
18942 FacetDeserializer::store_total_digits(&mut values, data)?;
18943 let data = FacetDeserializer::finish_state(
18944 reader,
18945 FacetDeserializerState::TotalDigits(values, None),
18946 )?;
18947 *self.state = FacetDeserializerState::Done__(data);
18948 ElementHandlerOutput::Break { event, allow_any }
18949 }
18950 DeserializerArtifact::Deserializer(deserializer) => {
18951 *self.state = FacetDeserializerState::TotalDigits(values, Some(deserializer));
18952 ElementHandlerOutput::from_event_end(event, allow_any)
18953 }
18954 })
18955 }
18956 fn handle_fraction_digits<'de, R>(
18957 &mut self,
18958 reader: &R,
18959 mut values: Option<super::FacetType>,
18960 output: DeserializerOutput<'de, super::FacetType>,
18961 fallback: &mut Option<FacetDeserializerState>,
18962 ) -> Result<ElementHandlerOutput<'de>, Error>
18963 where
18964 R: DeserializeReader,
18965 {
18966 let DeserializerOutput {
18967 artifact,
18968 event,
18969 allow_any,
18970 } = output;
18971 if artifact.is_none() {
18972 *self.state = match fallback.take() {
18973 None => FacetDeserializerState::Init__,
18974 Some(FacetDeserializerState::FractionDigits(_, Some(deserializer))) => {
18975 FacetDeserializerState::FractionDigits(values, Some(deserializer))
18976 }
18977 _ => unreachable!(),
18978 };
18979 return Ok(ElementHandlerOutput::break_(event, allow_any));
18980 }
18981 match fallback.take() {
18982 None => (),
18983 Some(FacetDeserializerState::FractionDigits(_, Some(deserializer))) => {
18984 let data = deserializer.finish(reader)?;
18985 FacetDeserializer::store_fraction_digits(&mut values, data)?;
18986 }
18987 Some(_) => unreachable!(),
18988 }
18989 Ok(match artifact {
18990 DeserializerArtifact::None => unreachable!(),
18991 DeserializerArtifact::Data(data) => {
18992 FacetDeserializer::store_fraction_digits(&mut values, data)?;
18993 let data = FacetDeserializer::finish_state(
18994 reader,
18995 FacetDeserializerState::FractionDigits(values, None),
18996 )?;
18997 *self.state = FacetDeserializerState::Done__(data);
18998 ElementHandlerOutput::Break { event, allow_any }
18999 }
19000 DeserializerArtifact::Deserializer(deserializer) => {
19001 *self.state =
19002 FacetDeserializerState::FractionDigits(values, Some(deserializer));
19003 ElementHandlerOutput::from_event_end(event, allow_any)
19004 }
19005 })
19006 }
19007 fn handle_length<'de, R>(
19008 &mut self,
19009 reader: &R,
19010 mut values: Option<super::FacetType>,
19011 output: DeserializerOutput<'de, super::FacetType>,
19012 fallback: &mut Option<FacetDeserializerState>,
19013 ) -> Result<ElementHandlerOutput<'de>, Error>
19014 where
19015 R: DeserializeReader,
19016 {
19017 let DeserializerOutput {
19018 artifact,
19019 event,
19020 allow_any,
19021 } = output;
19022 if artifact.is_none() {
19023 *self.state = match fallback.take() {
19024 None => FacetDeserializerState::Init__,
19025 Some(FacetDeserializerState::Length(_, Some(deserializer))) => {
19026 FacetDeserializerState::Length(values, Some(deserializer))
19027 }
19028 _ => unreachable!(),
19029 };
19030 return Ok(ElementHandlerOutput::break_(event, allow_any));
19031 }
19032 match fallback.take() {
19033 None => (),
19034 Some(FacetDeserializerState::Length(_, Some(deserializer))) => {
19035 let data = deserializer.finish(reader)?;
19036 FacetDeserializer::store_length(&mut values, data)?;
19037 }
19038 Some(_) => unreachable!(),
19039 }
19040 Ok(match artifact {
19041 DeserializerArtifact::None => unreachable!(),
19042 DeserializerArtifact::Data(data) => {
19043 FacetDeserializer::store_length(&mut values, data)?;
19044 let data = FacetDeserializer::finish_state(
19045 reader,
19046 FacetDeserializerState::Length(values, None),
19047 )?;
19048 *self.state = FacetDeserializerState::Done__(data);
19049 ElementHandlerOutput::Break { event, allow_any }
19050 }
19051 DeserializerArtifact::Deserializer(deserializer) => {
19052 *self.state = FacetDeserializerState::Length(values, Some(deserializer));
19053 ElementHandlerOutput::from_event_end(event, allow_any)
19054 }
19055 })
19056 }
19057 fn handle_min_length<'de, R>(
19058 &mut self,
19059 reader: &R,
19060 mut values: Option<super::FacetType>,
19061 output: DeserializerOutput<'de, super::FacetType>,
19062 fallback: &mut Option<FacetDeserializerState>,
19063 ) -> Result<ElementHandlerOutput<'de>, Error>
19064 where
19065 R: DeserializeReader,
19066 {
19067 let DeserializerOutput {
19068 artifact,
19069 event,
19070 allow_any,
19071 } = output;
19072 if artifact.is_none() {
19073 *self.state = match fallback.take() {
19074 None => FacetDeserializerState::Init__,
19075 Some(FacetDeserializerState::MinLength(_, Some(deserializer))) => {
19076 FacetDeserializerState::MinLength(values, Some(deserializer))
19077 }
19078 _ => unreachable!(),
19079 };
19080 return Ok(ElementHandlerOutput::break_(event, allow_any));
19081 }
19082 match fallback.take() {
19083 None => (),
19084 Some(FacetDeserializerState::MinLength(_, Some(deserializer))) => {
19085 let data = deserializer.finish(reader)?;
19086 FacetDeserializer::store_min_length(&mut values, data)?;
19087 }
19088 Some(_) => unreachable!(),
19089 }
19090 Ok(match artifact {
19091 DeserializerArtifact::None => unreachable!(),
19092 DeserializerArtifact::Data(data) => {
19093 FacetDeserializer::store_min_length(&mut values, data)?;
19094 let data = FacetDeserializer::finish_state(
19095 reader,
19096 FacetDeserializerState::MinLength(values, None),
19097 )?;
19098 *self.state = FacetDeserializerState::Done__(data);
19099 ElementHandlerOutput::Break { event, allow_any }
19100 }
19101 DeserializerArtifact::Deserializer(deserializer) => {
19102 *self.state = FacetDeserializerState::MinLength(values, Some(deserializer));
19103 ElementHandlerOutput::from_event_end(event, allow_any)
19104 }
19105 })
19106 }
19107 fn handle_max_length<'de, R>(
19108 &mut self,
19109 reader: &R,
19110 mut values: Option<super::FacetType>,
19111 output: DeserializerOutput<'de, super::FacetType>,
19112 fallback: &mut Option<FacetDeserializerState>,
19113 ) -> Result<ElementHandlerOutput<'de>, Error>
19114 where
19115 R: DeserializeReader,
19116 {
19117 let DeserializerOutput {
19118 artifact,
19119 event,
19120 allow_any,
19121 } = output;
19122 if artifact.is_none() {
19123 *self.state = match fallback.take() {
19124 None => FacetDeserializerState::Init__,
19125 Some(FacetDeserializerState::MaxLength(_, Some(deserializer))) => {
19126 FacetDeserializerState::MaxLength(values, Some(deserializer))
19127 }
19128 _ => unreachable!(),
19129 };
19130 return Ok(ElementHandlerOutput::break_(event, allow_any));
19131 }
19132 match fallback.take() {
19133 None => (),
19134 Some(FacetDeserializerState::MaxLength(_, Some(deserializer))) => {
19135 let data = deserializer.finish(reader)?;
19136 FacetDeserializer::store_max_length(&mut values, data)?;
19137 }
19138 Some(_) => unreachable!(),
19139 }
19140 Ok(match artifact {
19141 DeserializerArtifact::None => unreachable!(),
19142 DeserializerArtifact::Data(data) => {
19143 FacetDeserializer::store_max_length(&mut values, data)?;
19144 let data = FacetDeserializer::finish_state(
19145 reader,
19146 FacetDeserializerState::MaxLength(values, None),
19147 )?;
19148 *self.state = FacetDeserializerState::Done__(data);
19149 ElementHandlerOutput::Break { event, allow_any }
19150 }
19151 DeserializerArtifact::Deserializer(deserializer) => {
19152 *self.state = FacetDeserializerState::MaxLength(values, Some(deserializer));
19153 ElementHandlerOutput::from_event_end(event, allow_any)
19154 }
19155 })
19156 }
19157 fn handle_enumeration<'de, R>(
19158 &mut self,
19159 reader: &R,
19160 mut values: Option<super::FacetType>,
19161 output: DeserializerOutput<'de, super::FacetType>,
19162 fallback: &mut Option<FacetDeserializerState>,
19163 ) -> Result<ElementHandlerOutput<'de>, Error>
19164 where
19165 R: DeserializeReader,
19166 {
19167 let DeserializerOutput {
19168 artifact,
19169 event,
19170 allow_any,
19171 } = output;
19172 if artifact.is_none() {
19173 *self.state = match fallback.take() {
19174 None => FacetDeserializerState::Init__,
19175 Some(FacetDeserializerState::Enumeration(_, Some(deserializer))) => {
19176 FacetDeserializerState::Enumeration(values, Some(deserializer))
19177 }
19178 _ => unreachable!(),
19179 };
19180 return Ok(ElementHandlerOutput::break_(event, allow_any));
19181 }
19182 match fallback.take() {
19183 None => (),
19184 Some(FacetDeserializerState::Enumeration(_, Some(deserializer))) => {
19185 let data = deserializer.finish(reader)?;
19186 FacetDeserializer::store_enumeration(&mut values, data)?;
19187 }
19188 Some(_) => unreachable!(),
19189 }
19190 Ok(match artifact {
19191 DeserializerArtifact::None => unreachable!(),
19192 DeserializerArtifact::Data(data) => {
19193 FacetDeserializer::store_enumeration(&mut values, data)?;
19194 let data = FacetDeserializer::finish_state(
19195 reader,
19196 FacetDeserializerState::Enumeration(values, None),
19197 )?;
19198 *self.state = FacetDeserializerState::Done__(data);
19199 ElementHandlerOutput::Break { event, allow_any }
19200 }
19201 DeserializerArtifact::Deserializer(deserializer) => {
19202 *self.state = FacetDeserializerState::Enumeration(values, Some(deserializer));
19203 ElementHandlerOutput::from_event_end(event, allow_any)
19204 }
19205 })
19206 }
19207 fn handle_white_space<'de, R>(
19208 &mut self,
19209 reader: &R,
19210 mut values: Option<super::FacetType>,
19211 output: DeserializerOutput<'de, super::FacetType>,
19212 fallback: &mut Option<FacetDeserializerState>,
19213 ) -> Result<ElementHandlerOutput<'de>, Error>
19214 where
19215 R: DeserializeReader,
19216 {
19217 let DeserializerOutput {
19218 artifact,
19219 event,
19220 allow_any,
19221 } = output;
19222 if artifact.is_none() {
19223 *self.state = match fallback.take() {
19224 None => FacetDeserializerState::Init__,
19225 Some(FacetDeserializerState::WhiteSpace(_, Some(deserializer))) => {
19226 FacetDeserializerState::WhiteSpace(values, Some(deserializer))
19227 }
19228 _ => unreachable!(),
19229 };
19230 return Ok(ElementHandlerOutput::break_(event, allow_any));
19231 }
19232 match fallback.take() {
19233 None => (),
19234 Some(FacetDeserializerState::WhiteSpace(_, Some(deserializer))) => {
19235 let data = deserializer.finish(reader)?;
19236 FacetDeserializer::store_white_space(&mut values, data)?;
19237 }
19238 Some(_) => unreachable!(),
19239 }
19240 Ok(match artifact {
19241 DeserializerArtifact::None => unreachable!(),
19242 DeserializerArtifact::Data(data) => {
19243 FacetDeserializer::store_white_space(&mut values, data)?;
19244 let data = FacetDeserializer::finish_state(
19245 reader,
19246 FacetDeserializerState::WhiteSpace(values, None),
19247 )?;
19248 *self.state = FacetDeserializerState::Done__(data);
19249 ElementHandlerOutput::Break { event, allow_any }
19250 }
19251 DeserializerArtifact::Deserializer(deserializer) => {
19252 *self.state = FacetDeserializerState::WhiteSpace(values, Some(deserializer));
19253 ElementHandlerOutput::from_event_end(event, allow_any)
19254 }
19255 })
19256 }
19257 fn handle_pattern<'de, R>(
19258 &mut self,
19259 reader: &R,
19260 mut values: Option<super::FacetType>,
19261 output: DeserializerOutput<'de, super::FacetType>,
19262 fallback: &mut Option<FacetDeserializerState>,
19263 ) -> Result<ElementHandlerOutput<'de>, Error>
19264 where
19265 R: DeserializeReader,
19266 {
19267 let DeserializerOutput {
19268 artifact,
19269 event,
19270 allow_any,
19271 } = output;
19272 if artifact.is_none() {
19273 *self.state = match fallback.take() {
19274 None => FacetDeserializerState::Init__,
19275 Some(FacetDeserializerState::Pattern(_, Some(deserializer))) => {
19276 FacetDeserializerState::Pattern(values, Some(deserializer))
19277 }
19278 _ => unreachable!(),
19279 };
19280 return Ok(ElementHandlerOutput::break_(event, allow_any));
19281 }
19282 match fallback.take() {
19283 None => (),
19284 Some(FacetDeserializerState::Pattern(_, Some(deserializer))) => {
19285 let data = deserializer.finish(reader)?;
19286 FacetDeserializer::store_pattern(&mut values, data)?;
19287 }
19288 Some(_) => unreachable!(),
19289 }
19290 Ok(match artifact {
19291 DeserializerArtifact::None => unreachable!(),
19292 DeserializerArtifact::Data(data) => {
19293 FacetDeserializer::store_pattern(&mut values, data)?;
19294 let data = FacetDeserializer::finish_state(
19295 reader,
19296 FacetDeserializerState::Pattern(values, None),
19297 )?;
19298 *self.state = FacetDeserializerState::Done__(data);
19299 ElementHandlerOutput::Break { event, allow_any }
19300 }
19301 DeserializerArtifact::Deserializer(deserializer) => {
19302 *self.state = FacetDeserializerState::Pattern(values, Some(deserializer));
19303 ElementHandlerOutput::from_event_end(event, allow_any)
19304 }
19305 })
19306 }
19307 fn handle_assertion<'de, R>(
19308 &mut self,
19309 reader: &R,
19310 mut values: Option<super::AssertionType>,
19311 output: DeserializerOutput<'de, super::AssertionType>,
19312 fallback: &mut Option<FacetDeserializerState>,
19313 ) -> Result<ElementHandlerOutput<'de>, Error>
19314 where
19315 R: DeserializeReader,
19316 {
19317 let DeserializerOutput {
19318 artifact,
19319 event,
19320 allow_any,
19321 } = output;
19322 if artifact.is_none() {
19323 *self.state = match fallback.take() {
19324 None => FacetDeserializerState::Init__,
19325 Some(FacetDeserializerState::Assertion(_, Some(deserializer))) => {
19326 FacetDeserializerState::Assertion(values, Some(deserializer))
19327 }
19328 _ => unreachable!(),
19329 };
19330 return Ok(ElementHandlerOutput::break_(event, allow_any));
19331 }
19332 match fallback.take() {
19333 None => (),
19334 Some(FacetDeserializerState::Assertion(_, Some(deserializer))) => {
19335 let data = deserializer.finish(reader)?;
19336 FacetDeserializer::store_assertion(&mut values, data)?;
19337 }
19338 Some(_) => unreachable!(),
19339 }
19340 Ok(match artifact {
19341 DeserializerArtifact::None => unreachable!(),
19342 DeserializerArtifact::Data(data) => {
19343 FacetDeserializer::store_assertion(&mut values, data)?;
19344 let data = FacetDeserializer::finish_state(
19345 reader,
19346 FacetDeserializerState::Assertion(values, None),
19347 )?;
19348 *self.state = FacetDeserializerState::Done__(data);
19349 ElementHandlerOutput::Break { event, allow_any }
19350 }
19351 DeserializerArtifact::Deserializer(deserializer) => {
19352 *self.state = FacetDeserializerState::Assertion(values, Some(deserializer));
19353 ElementHandlerOutput::from_event_end(event, allow_any)
19354 }
19355 })
19356 }
19357 fn handle_explicit_timezone<'de, R>(
19358 &mut self,
19359 reader: &R,
19360 mut values: Option<super::FacetType>,
19361 output: DeserializerOutput<'de, super::FacetType>,
19362 fallback: &mut Option<FacetDeserializerState>,
19363 ) -> Result<ElementHandlerOutput<'de>, Error>
19364 where
19365 R: DeserializeReader,
19366 {
19367 let DeserializerOutput {
19368 artifact,
19369 event,
19370 allow_any,
19371 } = output;
19372 if artifact.is_none() {
19373 *self.state = match fallback.take() {
19374 None => FacetDeserializerState::Init__,
19375 Some(FacetDeserializerState::ExplicitTimezone(_, Some(deserializer))) => {
19376 FacetDeserializerState::ExplicitTimezone(values, Some(deserializer))
19377 }
19378 _ => unreachable!(),
19379 };
19380 return Ok(ElementHandlerOutput::break_(event, allow_any));
19381 }
19382 match fallback.take() {
19383 None => (),
19384 Some(FacetDeserializerState::ExplicitTimezone(_, Some(deserializer))) => {
19385 let data = deserializer.finish(reader)?;
19386 FacetDeserializer::store_explicit_timezone(&mut values, data)?;
19387 }
19388 Some(_) => unreachable!(),
19389 }
19390 Ok(match artifact {
19391 DeserializerArtifact::None => unreachable!(),
19392 DeserializerArtifact::Data(data) => {
19393 FacetDeserializer::store_explicit_timezone(&mut values, data)?;
19394 let data = FacetDeserializer::finish_state(
19395 reader,
19396 FacetDeserializerState::ExplicitTimezone(values, None),
19397 )?;
19398 *self.state = FacetDeserializerState::Done__(data);
19399 ElementHandlerOutput::Break { event, allow_any }
19400 }
19401 DeserializerArtifact::Deserializer(deserializer) => {
19402 *self.state =
19403 FacetDeserializerState::ExplicitTimezone(values, Some(deserializer));
19404 ElementHandlerOutput::from_event_end(event, allow_any)
19405 }
19406 })
19407 }
19408 }
19409 impl<'de> Deserializer<'de, super::Facet> for Box<FacetDeserializer> {
19410 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Facet>
19411 where
19412 R: DeserializeReader,
19413 {
19414 let deserializer = Box::new(FacetDeserializer {
19415 state: Box::new(FacetDeserializerState::Init__),
19416 });
19417 let mut output = deserializer.next(reader, event)?;
19418 output.artifact = match output.artifact {
19419 DeserializerArtifact::Deserializer(x)
19420 if matches!(&*x.state, FacetDeserializerState::Init__) =>
19421 {
19422 DeserializerArtifact::None
19423 }
19424 artifact => artifact,
19425 };
19426 Ok(output)
19427 }
19428 fn next<R>(mut self, reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Facet>
19429 where
19430 R: DeserializeReader,
19431 {
19432 use FacetDeserializerState as S;
19433 let mut event = event;
19434 let mut fallback = None;
19435 let (event, allow_any) = loop {
19436 let state = replace(&mut *self.state, S::Unknown__);
19437 event = match (state, event) {
19438 (S::MinExclusive(values, Some(deserializer)), event) => {
19439 let output = deserializer.next(reader, event)?;
19440 match self.handle_min_exclusive(reader, values, output, &mut fallback)? {
19441 ElementHandlerOutput::Break { event, allow_any } => {
19442 break (event, allow_any)
19443 }
19444 ElementHandlerOutput::Continue { event, .. } => event,
19445 }
19446 }
19447 (S::MinInclusive(values, Some(deserializer)), event) => {
19448 let output = deserializer.next(reader, event)?;
19449 match self.handle_min_inclusive(reader, values, output, &mut fallback)? {
19450 ElementHandlerOutput::Break { event, allow_any } => {
19451 break (event, allow_any)
19452 }
19453 ElementHandlerOutput::Continue { event, .. } => event,
19454 }
19455 }
19456 (S::MaxExclusive(values, Some(deserializer)), event) => {
19457 let output = deserializer.next(reader, event)?;
19458 match self.handle_max_exclusive(reader, values, output, &mut fallback)? {
19459 ElementHandlerOutput::Break { event, allow_any } => {
19460 break (event, allow_any)
19461 }
19462 ElementHandlerOutput::Continue { event, .. } => event,
19463 }
19464 }
19465 (S::MaxInclusive(values, Some(deserializer)), event) => {
19466 let output = deserializer.next(reader, event)?;
19467 match self.handle_max_inclusive(reader, values, output, &mut fallback)? {
19468 ElementHandlerOutput::Break { event, allow_any } => {
19469 break (event, allow_any)
19470 }
19471 ElementHandlerOutput::Continue { event, .. } => event,
19472 }
19473 }
19474 (S::TotalDigits(values, Some(deserializer)), event) => {
19475 let output = deserializer.next(reader, event)?;
19476 match self.handle_total_digits(reader, values, output, &mut fallback)? {
19477 ElementHandlerOutput::Break { event, allow_any } => {
19478 break (event, allow_any)
19479 }
19480 ElementHandlerOutput::Continue { event, .. } => event,
19481 }
19482 }
19483 (S::FractionDigits(values, Some(deserializer)), event) => {
19484 let output = deserializer.next(reader, event)?;
19485 match self.handle_fraction_digits(reader, 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::Length(values, Some(deserializer)), event) => {
19493 let output = deserializer.next(reader, event)?;
19494 match self.handle_length(reader, values, output, &mut fallback)? {
19495 ElementHandlerOutput::Break { event, allow_any } => {
19496 break (event, allow_any)
19497 }
19498 ElementHandlerOutput::Continue { event, .. } => event,
19499 }
19500 }
19501 (S::MinLength(values, Some(deserializer)), event) => {
19502 let output = deserializer.next(reader, event)?;
19503 match self.handle_min_length(reader, values, output, &mut fallback)? {
19504 ElementHandlerOutput::Break { event, allow_any } => {
19505 break (event, allow_any)
19506 }
19507 ElementHandlerOutput::Continue { event, .. } => event,
19508 }
19509 }
19510 (S::MaxLength(values, Some(deserializer)), event) => {
19511 let output = deserializer.next(reader, event)?;
19512 match self.handle_max_length(reader, values, output, &mut fallback)? {
19513 ElementHandlerOutput::Break { event, allow_any } => {
19514 break (event, allow_any)
19515 }
19516 ElementHandlerOutput::Continue { event, .. } => event,
19517 }
19518 }
19519 (S::Enumeration(values, Some(deserializer)), event) => {
19520 let output = deserializer.next(reader, event)?;
19521 match self.handle_enumeration(reader, values, output, &mut fallback)? {
19522 ElementHandlerOutput::Break { event, allow_any } => {
19523 break (event, allow_any)
19524 }
19525 ElementHandlerOutput::Continue { event, .. } => event,
19526 }
19527 }
19528 (S::WhiteSpace(values, Some(deserializer)), event) => {
19529 let output = deserializer.next(reader, event)?;
19530 match self.handle_white_space(reader, values, output, &mut fallback)? {
19531 ElementHandlerOutput::Break { event, allow_any } => {
19532 break (event, allow_any)
19533 }
19534 ElementHandlerOutput::Continue { event, .. } => event,
19535 }
19536 }
19537 (S::Pattern(values, Some(deserializer)), event) => {
19538 let output = deserializer.next(reader, event)?;
19539 match self.handle_pattern(reader, values, output, &mut fallback)? {
19540 ElementHandlerOutput::Break { event, allow_any } => {
19541 break (event, allow_any)
19542 }
19543 ElementHandlerOutput::Continue { event, .. } => event,
19544 }
19545 }
19546 (S::Assertion(values, Some(deserializer)), event) => {
19547 let output = deserializer.next(reader, event)?;
19548 match self.handle_assertion(reader, values, output, &mut fallback)? {
19549 ElementHandlerOutput::Break { event, allow_any } => {
19550 break (event, allow_any)
19551 }
19552 ElementHandlerOutput::Continue { event, .. } => event,
19553 }
19554 }
19555 (S::ExplicitTimezone(values, Some(deserializer)), event) => {
19556 let output = deserializer.next(reader, event)?;
19557 match self.handle_explicit_timezone(
19558 reader,
19559 values,
19560 output,
19561 &mut fallback,
19562 )? {
19563 ElementHandlerOutput::Break { event, allow_any } => {
19564 break (event, allow_any)
19565 }
19566 ElementHandlerOutput::Continue { event, .. } => event,
19567 }
19568 }
19569 (state, event @ Event::End(_)) => {
19570 return Ok(DeserializerOutput {
19571 artifact: DeserializerArtifact::Data(FacetDeserializer::finish_state(
19572 reader, state,
19573 )?),
19574 event: DeserializerEvent::Continue(event),
19575 allow_any: false,
19576 });
19577 }
19578 (S::Init__, event) => match self.find_suitable(reader, event, &mut fallback)? {
19579 ElementHandlerOutput::Break { event, allow_any } => {
19580 break (event, allow_any)
19581 }
19582 ElementHandlerOutput::Continue { event, .. } => event,
19583 },
19584 (S::MinExclusive(values, None), event) => {
19585 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
19586 reader, event,
19587 )?;
19588 match self.handle_min_exclusive(reader, values, output, &mut fallback)? {
19589 ElementHandlerOutput::Break { event, allow_any } => {
19590 break (event, allow_any)
19591 }
19592 ElementHandlerOutput::Continue { event, .. } => event,
19593 }
19594 }
19595 (S::MinInclusive(values, None), event) => {
19596 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
19597 reader, event,
19598 )?;
19599 match self.handle_min_inclusive(reader, values, output, &mut fallback)? {
19600 ElementHandlerOutput::Break { event, allow_any } => {
19601 break (event, allow_any)
19602 }
19603 ElementHandlerOutput::Continue { event, .. } => event,
19604 }
19605 }
19606 (S::MaxExclusive(values, None), event) => {
19607 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
19608 reader, event,
19609 )?;
19610 match self.handle_max_exclusive(reader, values, output, &mut fallback)? {
19611 ElementHandlerOutput::Break { event, allow_any } => {
19612 break (event, allow_any)
19613 }
19614 ElementHandlerOutput::Continue { event, .. } => event,
19615 }
19616 }
19617 (S::MaxInclusive(values, None), event) => {
19618 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
19619 reader, event,
19620 )?;
19621 match self.handle_max_inclusive(reader, values, output, &mut fallback)? {
19622 ElementHandlerOutput::Break { event, allow_any } => {
19623 break (event, allow_any)
19624 }
19625 ElementHandlerOutput::Continue { event, .. } => event,
19626 }
19627 }
19628 (S::TotalDigits(values, None), event) => {
19629 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
19630 reader, event,
19631 )?;
19632 match self.handle_total_digits(reader, values, output, &mut fallback)? {
19633 ElementHandlerOutput::Break { event, allow_any } => {
19634 break (event, allow_any)
19635 }
19636 ElementHandlerOutput::Continue { event, .. } => event,
19637 }
19638 }
19639 (S::FractionDigits(values, None), event) => {
19640 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
19641 reader, event,
19642 )?;
19643 match self.handle_fraction_digits(reader, values, output, &mut fallback)? {
19644 ElementHandlerOutput::Break { event, allow_any } => {
19645 break (event, allow_any)
19646 }
19647 ElementHandlerOutput::Continue { event, .. } => event,
19648 }
19649 }
19650 (S::Length(values, None), event) => {
19651 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
19652 reader, event,
19653 )?;
19654 match self.handle_length(reader, values, output, &mut fallback)? {
19655 ElementHandlerOutput::Break { event, allow_any } => {
19656 break (event, allow_any)
19657 }
19658 ElementHandlerOutput::Continue { event, .. } => event,
19659 }
19660 }
19661 (S::MinLength(values, None), event) => {
19662 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
19663 reader, event,
19664 )?;
19665 match self.handle_min_length(reader, values, output, &mut fallback)? {
19666 ElementHandlerOutput::Break { event, allow_any } => {
19667 break (event, allow_any)
19668 }
19669 ElementHandlerOutput::Continue { event, .. } => event,
19670 }
19671 }
19672 (S::MaxLength(values, None), event) => {
19673 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
19674 reader, event,
19675 )?;
19676 match self.handle_max_length(reader, values, output, &mut fallback)? {
19677 ElementHandlerOutput::Break { event, allow_any } => {
19678 break (event, allow_any)
19679 }
19680 ElementHandlerOutput::Continue { event, .. } => event,
19681 }
19682 }
19683 (S::Enumeration(values, None), event) => {
19684 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
19685 reader, event,
19686 )?;
19687 match self.handle_enumeration(reader, values, output, &mut fallback)? {
19688 ElementHandlerOutput::Break { event, allow_any } => {
19689 break (event, allow_any)
19690 }
19691 ElementHandlerOutput::Continue { event, .. } => event,
19692 }
19693 }
19694 (S::WhiteSpace(values, None), event) => {
19695 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
19696 reader, event,
19697 )?;
19698 match self.handle_white_space(reader, values, output, &mut fallback)? {
19699 ElementHandlerOutput::Break { event, allow_any } => {
19700 break (event, allow_any)
19701 }
19702 ElementHandlerOutput::Continue { event, .. } => event,
19703 }
19704 }
19705 (S::Pattern(values, None), event) => {
19706 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
19707 reader, event,
19708 )?;
19709 match self.handle_pattern(reader, values, output, &mut fallback)? {
19710 ElementHandlerOutput::Break { event, allow_any } => {
19711 break (event, allow_any)
19712 }
19713 ElementHandlerOutput::Continue { event, .. } => event,
19714 }
19715 }
19716 (S::Assertion(values, None), event) => {
19717 let output =
19718 <super::AssertionType as WithDeserializer>::Deserializer::init(
19719 reader, event,
19720 )?;
19721 match self.handle_assertion(reader, values, output, &mut fallback)? {
19722 ElementHandlerOutput::Break { event, allow_any } => {
19723 break (event, allow_any)
19724 }
19725 ElementHandlerOutput::Continue { event, .. } => event,
19726 }
19727 }
19728 (S::ExplicitTimezone(values, None), event) => {
19729 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
19730 reader, event,
19731 )?;
19732 match self.handle_explicit_timezone(
19733 reader,
19734 values,
19735 output,
19736 &mut fallback,
19737 )? {
19738 ElementHandlerOutput::Break { event, allow_any } => {
19739 break (event, allow_any)
19740 }
19741 ElementHandlerOutput::Continue { event, .. } => event,
19742 }
19743 }
19744 (s @ S::Done__(_), event) => {
19745 *self.state = s;
19746 break (DeserializerEvent::Continue(event), false);
19747 }
19748 (S::Unknown__, _) => unreachable!(),
19749 }
19750 };
19751 let artifact = if matches!(&*self.state, S::Done__(_)) {
19752 DeserializerArtifact::Data(self.finish(reader)?)
19753 } else {
19754 DeserializerArtifact::Deserializer(self)
19755 };
19756 Ok(DeserializerOutput {
19757 artifact,
19758 event,
19759 allow_any,
19760 })
19761 }
19762 fn finish<R>(self, reader: &R) -> Result<super::Facet, Error>
19763 where
19764 R: DeserializeReader,
19765 {
19766 FacetDeserializer::finish_state(reader, *self.state)
19767 }
19768 }
19769 #[derive(Debug)]
19770 pub struct RestrictionTypeDeserializer {
19771 id: Option<String>,
19772 base: super::QName,
19773 content: Vec<super::RestrictionTypeContent>,
19774 state: Box<RestrictionTypeDeserializerState>,
19775 }
19776 #[derive(Debug)]
19777 enum RestrictionTypeDeserializerState {
19778 Init__,
19779 Next__,
19780 Content__(<super::RestrictionTypeContent as WithDeserializer>::Deserializer),
19781 Unknown__,
19782 }
19783 impl RestrictionTypeDeserializer {
19784 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
19785 where
19786 R: DeserializeReader,
19787 {
19788 let mut id: Option<String> = None;
19789 let mut base: Option<super::QName> = None;
19790 for attrib in filter_xmlns_attributes(bytes_start) {
19791 let attrib = attrib?;
19792 if matches!(
19793 reader.resolve_local_name(attrib.key, &super::NS_XS),
19794 Some(b"id")
19795 ) {
19796 reader.read_attrib(&mut id, b"id", &attrib.value)?;
19797 } else if matches!(
19798 reader.resolve_local_name(attrib.key, &super::NS_XS),
19799 Some(b"base")
19800 ) {
19801 reader.read_attrib(&mut base, b"base", &attrib.value)?;
19802 }
19803 }
19804 Ok(Box::new(Self {
19805 id: id,
19806 base: base
19807 .ok_or_else(|| reader.map_error(ErrorKind::MissingAttribute("base".into())))?,
19808 content: Vec::new(),
19809 state: Box::new(RestrictionTypeDeserializerState::Init__),
19810 }))
19811 }
19812 fn finish_state<R>(
19813 &mut self,
19814 reader: &R,
19815 state: RestrictionTypeDeserializerState,
19816 ) -> Result<(), Error>
19817 where
19818 R: DeserializeReader,
19819 {
19820 if let RestrictionTypeDeserializerState::Content__(deserializer) = state {
19821 self.store_content(deserializer.finish(reader)?)?;
19822 }
19823 Ok(())
19824 }
19825 fn store_content(&mut self, value: super::RestrictionTypeContent) -> Result<(), Error> {
19826 self.content.push(value);
19827 Ok(())
19828 }
19829 fn handle_content<'de, R>(
19830 &mut self,
19831 reader: &R,
19832 output: DeserializerOutput<'de, super::RestrictionTypeContent>,
19833 fallback: &mut Option<RestrictionTypeDeserializerState>,
19834 ) -> Result<ElementHandlerOutput<'de>, Error>
19835 where
19836 R: DeserializeReader,
19837 {
19838 let DeserializerOutput {
19839 artifact,
19840 event,
19841 allow_any,
19842 } = output;
19843 if artifact.is_none() {
19844 *self.state = fallback
19845 .take()
19846 .unwrap_or(RestrictionTypeDeserializerState::Next__);
19847 return Ok(ElementHandlerOutput::break_(event, allow_any));
19848 }
19849 if let Some(fallback) = fallback.take() {
19850 self.finish_state(reader, fallback)?;
19851 }
19852 Ok(match artifact {
19853 DeserializerArtifact::None => unreachable!(),
19854 DeserializerArtifact::Data(data) => {
19855 self.store_content(data)?;
19856 *self.state = RestrictionTypeDeserializerState::Next__;
19857 ElementHandlerOutput::from_event(event, allow_any)
19858 }
19859 DeserializerArtifact::Deserializer(deserializer) => {
19860 let ret = ElementHandlerOutput::from_event(event, allow_any);
19861 match &ret {
19862 ElementHandlerOutput::Break { .. } => {
19863 *self.state = RestrictionTypeDeserializerState::Content__(deserializer);
19864 }
19865 ElementHandlerOutput::Continue { .. } => {
19866 fallback.get_or_insert(RestrictionTypeDeserializerState::Content__(
19867 deserializer,
19868 ));
19869 *self.state = RestrictionTypeDeserializerState::Next__;
19870 }
19871 }
19872 ret
19873 }
19874 })
19875 }
19876 }
19877 impl<'de> Deserializer<'de, super::RestrictionType> for Box<RestrictionTypeDeserializer> {
19878 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::RestrictionType>
19879 where
19880 R: DeserializeReader,
19881 {
19882 reader.init_deserializer_from_start_event(
19883 event,
19884 RestrictionTypeDeserializer::from_bytes_start,
19885 )
19886 }
19887 fn next<R>(
19888 mut self,
19889 reader: &R,
19890 event: Event<'de>,
19891 ) -> DeserializerResult<'de, super::RestrictionType>
19892 where
19893 R: DeserializeReader,
19894 {
19895 use RestrictionTypeDeserializerState as S;
19896 let mut event = event;
19897 let mut fallback = None;
19898 let (event, allow_any) = loop {
19899 let state = replace(&mut *self.state, S::Unknown__);
19900 event = match (state, event) {
19901 (S::Content__(deserializer), event) => {
19902 let output = deserializer.next(reader, event)?;
19903 match self.handle_content(reader, output, &mut fallback)? {
19904 ElementHandlerOutput::Break { event, allow_any } => {
19905 break (event, allow_any)
19906 }
19907 ElementHandlerOutput::Continue { event, .. } => event,
19908 }
19909 }
19910 (_, Event::End(_)) => {
19911 return Ok(DeserializerOutput {
19912 artifact: DeserializerArtifact::Data(self.finish(reader)?),
19913 event: DeserializerEvent::None,
19914 allow_any: false,
19915 });
19916 }
19917 (state @ (S::Init__ | S::Next__), event) => {
19918 fallback.get_or_insert(state);
19919 let output = < super :: RestrictionTypeContent as WithDeserializer > :: Deserializer :: init (reader , event) ? ;
19920 match self.handle_content(reader, output, &mut fallback)? {
19921 ElementHandlerOutput::Break { event, allow_any } => {
19922 break (event, allow_any)
19923 }
19924 ElementHandlerOutput::Continue { event, .. } => event,
19925 }
19926 }
19927 (S::Unknown__, _) => unreachable!(),
19928 }
19929 };
19930 let artifact = DeserializerArtifact::Deserializer(self);
19931 Ok(DeserializerOutput {
19932 artifact,
19933 event,
19934 allow_any,
19935 })
19936 }
19937 fn finish<R>(mut self, reader: &R) -> Result<super::RestrictionType, Error>
19938 where
19939 R: DeserializeReader,
19940 {
19941 let state = replace(
19942 &mut *self.state,
19943 RestrictionTypeDeserializerState::Unknown__,
19944 );
19945 self.finish_state(reader, state)?;
19946 Ok(super::RestrictionType {
19947 id: self.id,
19948 base: self.base,
19949 content: self.content,
19950 })
19951 }
19952 }
19953 #[derive(Debug)]
19954 pub struct RestrictionTypeContentDeserializer {
19955 state: Box<RestrictionTypeContentDeserializerState>,
19956 }
19957 #[derive(Debug)]
19958 pub enum RestrictionTypeContentDeserializerState {
19959 Init__,
19960 Annotation(
19961 Option<super::Annotation>,
19962 Option<<super::Annotation as WithDeserializer>::Deserializer>,
19963 ),
19964 OpenContent(
19965 Option<super::OpenContent>,
19966 Option<<super::OpenContent as WithDeserializer>::Deserializer>,
19967 ),
19968 Group(
19969 Option<super::GroupType>,
19970 Option<<super::GroupType as WithDeserializer>::Deserializer>,
19971 ),
19972 All(
19973 Option<super::GroupType>,
19974 Option<<super::GroupType as WithDeserializer>::Deserializer>,
19975 ),
19976 Choice(
19977 Option<super::GroupType>,
19978 Option<<super::GroupType as WithDeserializer>::Deserializer>,
19979 ),
19980 Sequence(
19981 Option<super::GroupType>,
19982 Option<<super::GroupType as WithDeserializer>::Deserializer>,
19983 ),
19984 SimpleType(
19985 Option<super::SimpleBaseType>,
19986 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
19987 ),
19988 Facet(
19989 Option<super::Facet>,
19990 Option<<super::Facet as WithDeserializer>::Deserializer>,
19991 ),
19992 Attribute(
19993 Option<super::AttributeType>,
19994 Option<<super::AttributeType as WithDeserializer>::Deserializer>,
19995 ),
19996 AttributeGroup(
19997 Option<super::AttributeGroupType>,
19998 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
19999 ),
20000 AnyAttribute(
20001 Option<super::AnyAttribute>,
20002 Option<<super::AnyAttribute as WithDeserializer>::Deserializer>,
20003 ),
20004 Assert(
20005 Option<super::AssertionType>,
20006 Option<<super::AssertionType as WithDeserializer>::Deserializer>,
20007 ),
20008 Done__(super::RestrictionTypeContent),
20009 Unknown__,
20010 }
20011 impl RestrictionTypeContentDeserializer {
20012 fn find_suitable<'de, R>(
20013 &mut self,
20014 reader: &R,
20015 event: Event<'de>,
20016 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20017 ) -> Result<ElementHandlerOutput<'de>, Error>
20018 where
20019 R: DeserializeReader,
20020 {
20021 let (Event::Start(x) | Event::Empty(x)) = &event else {
20022 *self.state = fallback
20023 .take()
20024 .unwrap_or(RestrictionTypeContentDeserializerState::Init__);
20025 return Ok(ElementHandlerOutput::return_to_parent(event, true));
20026 };
20027 if matches!(
20028 reader.resolve_local_name(x.name(), &super::NS_XS),
20029 Some(b"annotation")
20030 ) {
20031 let output =
20032 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
20033 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
20034 }
20035 if matches!(
20036 reader.resolve_local_name(x.name(), &super::NS_XS),
20037 Some(b"openContent")
20038 ) {
20039 let output =
20040 <super::OpenContent as WithDeserializer>::Deserializer::init(reader, event)?;
20041 return self.handle_open_content(
20042 reader,
20043 Default::default(),
20044 output,
20045 &mut *fallback,
20046 );
20047 }
20048 if matches!(
20049 reader.resolve_local_name(x.name(), &super::NS_XS),
20050 Some(b"group")
20051 ) {
20052 let output =
20053 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
20054 return self.handle_group(reader, Default::default(), output, &mut *fallback);
20055 }
20056 if matches!(
20057 reader.resolve_local_name(x.name(), &super::NS_XS),
20058 Some(b"all")
20059 ) {
20060 let output =
20061 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
20062 return self.handle_all(reader, Default::default(), output, &mut *fallback);
20063 }
20064 if matches!(
20065 reader.resolve_local_name(x.name(), &super::NS_XS),
20066 Some(b"choice")
20067 ) {
20068 let output =
20069 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
20070 return self.handle_choice(reader, Default::default(), output, &mut *fallback);
20071 }
20072 if matches!(
20073 reader.resolve_local_name(x.name(), &super::NS_XS),
20074 Some(b"sequence")
20075 ) {
20076 let output =
20077 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
20078 return self.handle_sequence(reader, Default::default(), output, &mut *fallback);
20079 }
20080 if matches!(
20081 reader.resolve_local_name(x.name(), &super::NS_XS),
20082 Some(b"simpleType")
20083 ) {
20084 let output =
20085 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(reader, event)?;
20086 return self.handle_simple_type(reader, Default::default(), output, &mut *fallback);
20087 }
20088 if matches!(
20089 reader.resolve_local_name(x.name(), &super::NS_XS),
20090 Some(b"attribute")
20091 ) {
20092 let output =
20093 <super::AttributeType as WithDeserializer>::Deserializer::init(reader, event)?;
20094 return self.handle_attribute(reader, Default::default(), output, &mut *fallback);
20095 }
20096 if matches!(
20097 reader.resolve_local_name(x.name(), &super::NS_XS),
20098 Some(b"attributeGroup")
20099 ) {
20100 let output = <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
20101 reader, event,
20102 )?;
20103 return self.handle_attribute_group(
20104 reader,
20105 Default::default(),
20106 output,
20107 &mut *fallback,
20108 );
20109 }
20110 if matches!(
20111 reader.resolve_local_name(x.name(), &super::NS_XS),
20112 Some(b"anyAttribute")
20113 ) {
20114 let output =
20115 <super::AnyAttribute as WithDeserializer>::Deserializer::init(reader, event)?;
20116 return self.handle_any_attribute(
20117 reader,
20118 Default::default(),
20119 output,
20120 &mut *fallback,
20121 );
20122 }
20123 if matches!(
20124 reader.resolve_local_name(x.name(), &super::NS_XS),
20125 Some(b"assert")
20126 ) {
20127 let output =
20128 <super::AssertionType as WithDeserializer>::Deserializer::init(reader, event)?;
20129 return self.handle_assert(reader, Default::default(), output, &mut *fallback);
20130 }
20131 let event = {
20132 let output = <super::Facet as WithDeserializer>::Deserializer::init(reader, event)?;
20133 match self.handle_facet(reader, Default::default(), output, &mut *fallback)? {
20134 ElementHandlerOutput::Continue { event, .. } => event,
20135 output => {
20136 return Ok(output);
20137 }
20138 }
20139 };
20140 *self.state = fallback
20141 .take()
20142 .unwrap_or(RestrictionTypeContentDeserializerState::Init__);
20143 Ok(ElementHandlerOutput::return_to_parent(event, true))
20144 }
20145 fn finish_state<R>(
20146 reader: &R,
20147 state: RestrictionTypeContentDeserializerState,
20148 ) -> Result<super::RestrictionTypeContent, Error>
20149 where
20150 R: DeserializeReader,
20151 {
20152 use RestrictionTypeContentDeserializerState as S;
20153 match state {
20154 S::Init__ => Err(ErrorKind::MissingContent.into()),
20155 S::Annotation(mut values, deserializer) => {
20156 if let Some(deserializer) = deserializer {
20157 let value = deserializer.finish(reader)?;
20158 RestrictionTypeContentDeserializer::store_annotation(&mut values, value)?;
20159 }
20160 Ok(super::RestrictionTypeContent::Annotation(
20161 values.ok_or_else(|| ErrorKind::MissingElement("annotation".into()))?,
20162 ))
20163 }
20164 S::OpenContent(mut values, deserializer) => {
20165 if let Some(deserializer) = deserializer {
20166 let value = deserializer.finish(reader)?;
20167 RestrictionTypeContentDeserializer::store_open_content(&mut values, value)?;
20168 }
20169 Ok(super::RestrictionTypeContent::OpenContent(
20170 values.ok_or_else(|| ErrorKind::MissingElement("openContent".into()))?,
20171 ))
20172 }
20173 S::Group(mut values, deserializer) => {
20174 if let Some(deserializer) = deserializer {
20175 let value = deserializer.finish(reader)?;
20176 RestrictionTypeContentDeserializer::store_group(&mut values, value)?;
20177 }
20178 Ok(super::RestrictionTypeContent::Group(values.ok_or_else(
20179 || ErrorKind::MissingElement("group".into()),
20180 )?))
20181 }
20182 S::All(mut values, deserializer) => {
20183 if let Some(deserializer) = deserializer {
20184 let value = deserializer.finish(reader)?;
20185 RestrictionTypeContentDeserializer::store_all(&mut values, value)?;
20186 }
20187 Ok(super::RestrictionTypeContent::All(
20188 values.ok_or_else(|| ErrorKind::MissingElement("all".into()))?,
20189 ))
20190 }
20191 S::Choice(mut values, deserializer) => {
20192 if let Some(deserializer) = deserializer {
20193 let value = deserializer.finish(reader)?;
20194 RestrictionTypeContentDeserializer::store_choice(&mut values, value)?;
20195 }
20196 Ok(super::RestrictionTypeContent::Choice(values.ok_or_else(
20197 || ErrorKind::MissingElement("choice".into()),
20198 )?))
20199 }
20200 S::Sequence(mut values, deserializer) => {
20201 if let Some(deserializer) = deserializer {
20202 let value = deserializer.finish(reader)?;
20203 RestrictionTypeContentDeserializer::store_sequence(&mut values, value)?;
20204 }
20205 Ok(super::RestrictionTypeContent::Sequence(values.ok_or_else(
20206 || ErrorKind::MissingElement("sequence".into()),
20207 )?))
20208 }
20209 S::SimpleType(mut values, deserializer) => {
20210 if let Some(deserializer) = deserializer {
20211 let value = deserializer.finish(reader)?;
20212 RestrictionTypeContentDeserializer::store_simple_type(&mut values, value)?;
20213 }
20214 Ok(super::RestrictionTypeContent::SimpleType(
20215 values.ok_or_else(|| ErrorKind::MissingElement("simpleType".into()))?,
20216 ))
20217 }
20218 S::Facet(mut values, deserializer) => {
20219 if let Some(deserializer) = deserializer {
20220 let value = deserializer.finish(reader)?;
20221 RestrictionTypeContentDeserializer::store_facet(&mut values, value)?;
20222 }
20223 Ok(super::RestrictionTypeContent::Facet(values.ok_or_else(
20224 || ErrorKind::MissingElement("facet".into()),
20225 )?))
20226 }
20227 S::Attribute(mut values, deserializer) => {
20228 if let Some(deserializer) = deserializer {
20229 let value = deserializer.finish(reader)?;
20230 RestrictionTypeContentDeserializer::store_attribute(&mut values, value)?;
20231 }
20232 Ok(super::RestrictionTypeContent::Attribute(
20233 values.ok_or_else(|| ErrorKind::MissingElement("attribute".into()))?,
20234 ))
20235 }
20236 S::AttributeGroup(mut values, deserializer) => {
20237 if let Some(deserializer) = deserializer {
20238 let value = deserializer.finish(reader)?;
20239 RestrictionTypeContentDeserializer::store_attribute_group(
20240 &mut values,
20241 value,
20242 )?;
20243 }
20244 Ok(super::RestrictionTypeContent::AttributeGroup(
20245 values.ok_or_else(|| ErrorKind::MissingElement("attributeGroup".into()))?,
20246 ))
20247 }
20248 S::AnyAttribute(mut values, deserializer) => {
20249 if let Some(deserializer) = deserializer {
20250 let value = deserializer.finish(reader)?;
20251 RestrictionTypeContentDeserializer::store_any_attribute(
20252 &mut values,
20253 value,
20254 )?;
20255 }
20256 Ok(super::RestrictionTypeContent::AnyAttribute(
20257 values.ok_or_else(|| ErrorKind::MissingElement("anyAttribute".into()))?,
20258 ))
20259 }
20260 S::Assert(mut values, deserializer) => {
20261 if let Some(deserializer) = deserializer {
20262 let value = deserializer.finish(reader)?;
20263 RestrictionTypeContentDeserializer::store_assert(&mut values, value)?;
20264 }
20265 Ok(super::RestrictionTypeContent::Assert(values.ok_or_else(
20266 || ErrorKind::MissingElement("assert".into()),
20267 )?))
20268 }
20269 S::Done__(data) => Ok(data),
20270 S::Unknown__ => unreachable!(),
20271 }
20272 }
20273 fn store_annotation(
20274 values: &mut Option<super::Annotation>,
20275 value: super::Annotation,
20276 ) -> Result<(), Error> {
20277 if values.is_some() {
20278 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20279 b"annotation",
20280 )))?;
20281 }
20282 *values = Some(value);
20283 Ok(())
20284 }
20285 fn store_open_content(
20286 values: &mut Option<super::OpenContent>,
20287 value: super::OpenContent,
20288 ) -> Result<(), Error> {
20289 if values.is_some() {
20290 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20291 b"openContent",
20292 )))?;
20293 }
20294 *values = Some(value);
20295 Ok(())
20296 }
20297 fn store_group(
20298 values: &mut Option<super::GroupType>,
20299 value: super::GroupType,
20300 ) -> Result<(), Error> {
20301 if values.is_some() {
20302 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20303 b"group",
20304 )))?;
20305 }
20306 *values = Some(value);
20307 Ok(())
20308 }
20309 fn store_all(
20310 values: &mut Option<super::GroupType>,
20311 value: super::GroupType,
20312 ) -> Result<(), Error> {
20313 if values.is_some() {
20314 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"all")))?;
20315 }
20316 *values = Some(value);
20317 Ok(())
20318 }
20319 fn store_choice(
20320 values: &mut Option<super::GroupType>,
20321 value: super::GroupType,
20322 ) -> Result<(), Error> {
20323 if values.is_some() {
20324 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20325 b"choice",
20326 )))?;
20327 }
20328 *values = Some(value);
20329 Ok(())
20330 }
20331 fn store_sequence(
20332 values: &mut Option<super::GroupType>,
20333 value: super::GroupType,
20334 ) -> Result<(), Error> {
20335 if values.is_some() {
20336 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20337 b"sequence",
20338 )))?;
20339 }
20340 *values = Some(value);
20341 Ok(())
20342 }
20343 fn store_simple_type(
20344 values: &mut Option<super::SimpleBaseType>,
20345 value: super::SimpleBaseType,
20346 ) -> Result<(), Error> {
20347 if values.is_some() {
20348 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20349 b"simpleType",
20350 )))?;
20351 }
20352 *values = Some(value);
20353 Ok(())
20354 }
20355 fn store_facet(
20356 values: &mut Option<super::Facet>,
20357 value: super::Facet,
20358 ) -> Result<(), Error> {
20359 if values.is_some() {
20360 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20361 b"facet",
20362 )))?;
20363 }
20364 *values = Some(value);
20365 Ok(())
20366 }
20367 fn store_attribute(
20368 values: &mut Option<super::AttributeType>,
20369 value: super::AttributeType,
20370 ) -> Result<(), Error> {
20371 if values.is_some() {
20372 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20373 b"attribute",
20374 )))?;
20375 }
20376 *values = Some(value);
20377 Ok(())
20378 }
20379 fn store_attribute_group(
20380 values: &mut Option<super::AttributeGroupType>,
20381 value: super::AttributeGroupType,
20382 ) -> Result<(), Error> {
20383 if values.is_some() {
20384 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20385 b"attributeGroup",
20386 )))?;
20387 }
20388 *values = Some(value);
20389 Ok(())
20390 }
20391 fn store_any_attribute(
20392 values: &mut Option<super::AnyAttribute>,
20393 value: super::AnyAttribute,
20394 ) -> Result<(), Error> {
20395 if values.is_some() {
20396 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20397 b"anyAttribute",
20398 )))?;
20399 }
20400 *values = Some(value);
20401 Ok(())
20402 }
20403 fn store_assert(
20404 values: &mut Option<super::AssertionType>,
20405 value: super::AssertionType,
20406 ) -> Result<(), Error> {
20407 if values.is_some() {
20408 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20409 b"assert",
20410 )))?;
20411 }
20412 *values = Some(value);
20413 Ok(())
20414 }
20415 fn handle_annotation<'de, R>(
20416 &mut self,
20417 reader: &R,
20418 mut values: Option<super::Annotation>,
20419 output: DeserializerOutput<'de, super::Annotation>,
20420 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20421 ) -> Result<ElementHandlerOutput<'de>, Error>
20422 where
20423 R: DeserializeReader,
20424 {
20425 let DeserializerOutput {
20426 artifact,
20427 event,
20428 allow_any,
20429 } = output;
20430 if artifact.is_none() {
20431 *self.state = match fallback.take() {
20432 None => RestrictionTypeContentDeserializerState::Init__,
20433 Some(RestrictionTypeContentDeserializerState::Annotation(
20434 _,
20435 Some(deserializer),
20436 )) => RestrictionTypeContentDeserializerState::Annotation(
20437 values,
20438 Some(deserializer),
20439 ),
20440 _ => unreachable!(),
20441 };
20442 return Ok(ElementHandlerOutput::break_(event, allow_any));
20443 }
20444 match fallback.take() {
20445 None => (),
20446 Some(RestrictionTypeContentDeserializerState::Annotation(
20447 _,
20448 Some(deserializer),
20449 )) => {
20450 let data = deserializer.finish(reader)?;
20451 RestrictionTypeContentDeserializer::store_annotation(&mut values, data)?;
20452 }
20453 Some(_) => unreachable!(),
20454 }
20455 Ok(match artifact {
20456 DeserializerArtifact::None => unreachable!(),
20457 DeserializerArtifact::Data(data) => {
20458 RestrictionTypeContentDeserializer::store_annotation(&mut values, data)?;
20459 let data = RestrictionTypeContentDeserializer::finish_state(
20460 reader,
20461 RestrictionTypeContentDeserializerState::Annotation(values, None),
20462 )?;
20463 *self.state = RestrictionTypeContentDeserializerState::Done__(data);
20464 ElementHandlerOutput::Break { event, allow_any }
20465 }
20466 DeserializerArtifact::Deserializer(deserializer) => {
20467 *self.state = RestrictionTypeContentDeserializerState::Annotation(
20468 values,
20469 Some(deserializer),
20470 );
20471 ElementHandlerOutput::from_event_end(event, allow_any)
20472 }
20473 })
20474 }
20475 fn handle_open_content<'de, R>(
20476 &mut self,
20477 reader: &R,
20478 mut values: Option<super::OpenContent>,
20479 output: DeserializerOutput<'de, super::OpenContent>,
20480 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20481 ) -> Result<ElementHandlerOutput<'de>, Error>
20482 where
20483 R: DeserializeReader,
20484 {
20485 let DeserializerOutput {
20486 artifact,
20487 event,
20488 allow_any,
20489 } = output;
20490 if artifact.is_none() {
20491 *self.state = match fallback.take() {
20492 None => RestrictionTypeContentDeserializerState::Init__,
20493 Some(RestrictionTypeContentDeserializerState::OpenContent(
20494 _,
20495 Some(deserializer),
20496 )) => RestrictionTypeContentDeserializerState::OpenContent(
20497 values,
20498 Some(deserializer),
20499 ),
20500 _ => unreachable!(),
20501 };
20502 return Ok(ElementHandlerOutput::break_(event, allow_any));
20503 }
20504 match fallback.take() {
20505 None => (),
20506 Some(RestrictionTypeContentDeserializerState::OpenContent(
20507 _,
20508 Some(deserializer),
20509 )) => {
20510 let data = deserializer.finish(reader)?;
20511 RestrictionTypeContentDeserializer::store_open_content(&mut values, data)?;
20512 }
20513 Some(_) => unreachable!(),
20514 }
20515 Ok(match artifact {
20516 DeserializerArtifact::None => unreachable!(),
20517 DeserializerArtifact::Data(data) => {
20518 RestrictionTypeContentDeserializer::store_open_content(&mut values, data)?;
20519 let data = RestrictionTypeContentDeserializer::finish_state(
20520 reader,
20521 RestrictionTypeContentDeserializerState::OpenContent(values, None),
20522 )?;
20523 *self.state = RestrictionTypeContentDeserializerState::Done__(data);
20524 ElementHandlerOutput::Break { event, allow_any }
20525 }
20526 DeserializerArtifact::Deserializer(deserializer) => {
20527 *self.state = RestrictionTypeContentDeserializerState::OpenContent(
20528 values,
20529 Some(deserializer),
20530 );
20531 ElementHandlerOutput::from_event_end(event, allow_any)
20532 }
20533 })
20534 }
20535 fn handle_group<'de, R>(
20536 &mut self,
20537 reader: &R,
20538 mut values: Option<super::GroupType>,
20539 output: DeserializerOutput<'de, super::GroupType>,
20540 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20541 ) -> Result<ElementHandlerOutput<'de>, Error>
20542 where
20543 R: DeserializeReader,
20544 {
20545 let DeserializerOutput {
20546 artifact,
20547 event,
20548 allow_any,
20549 } = output;
20550 if artifact.is_none() {
20551 *self.state = match fallback.take() {
20552 None => RestrictionTypeContentDeserializerState::Init__,
20553 Some(RestrictionTypeContentDeserializerState::Group(_, Some(deserializer))) => {
20554 RestrictionTypeContentDeserializerState::Group(values, Some(deserializer))
20555 }
20556 _ => unreachable!(),
20557 };
20558 return Ok(ElementHandlerOutput::break_(event, allow_any));
20559 }
20560 match fallback.take() {
20561 None => (),
20562 Some(RestrictionTypeContentDeserializerState::Group(_, Some(deserializer))) => {
20563 let data = deserializer.finish(reader)?;
20564 RestrictionTypeContentDeserializer::store_group(&mut values, data)?;
20565 }
20566 Some(_) => unreachable!(),
20567 }
20568 Ok(match artifact {
20569 DeserializerArtifact::None => unreachable!(),
20570 DeserializerArtifact::Data(data) => {
20571 RestrictionTypeContentDeserializer::store_group(&mut values, data)?;
20572 let data = RestrictionTypeContentDeserializer::finish_state(
20573 reader,
20574 RestrictionTypeContentDeserializerState::Group(values, None),
20575 )?;
20576 *self.state = RestrictionTypeContentDeserializerState::Done__(data);
20577 ElementHandlerOutput::Break { event, allow_any }
20578 }
20579 DeserializerArtifact::Deserializer(deserializer) => {
20580 *self.state =
20581 RestrictionTypeContentDeserializerState::Group(values, Some(deserializer));
20582 ElementHandlerOutput::from_event_end(event, allow_any)
20583 }
20584 })
20585 }
20586 fn handle_all<'de, R>(
20587 &mut self,
20588 reader: &R,
20589 mut values: Option<super::GroupType>,
20590 output: DeserializerOutput<'de, super::GroupType>,
20591 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20592 ) -> Result<ElementHandlerOutput<'de>, Error>
20593 where
20594 R: DeserializeReader,
20595 {
20596 let DeserializerOutput {
20597 artifact,
20598 event,
20599 allow_any,
20600 } = output;
20601 if artifact.is_none() {
20602 *self.state = match fallback.take() {
20603 None => RestrictionTypeContentDeserializerState::Init__,
20604 Some(RestrictionTypeContentDeserializerState::All(_, Some(deserializer))) => {
20605 RestrictionTypeContentDeserializerState::All(values, Some(deserializer))
20606 }
20607 _ => unreachable!(),
20608 };
20609 return Ok(ElementHandlerOutput::break_(event, allow_any));
20610 }
20611 match fallback.take() {
20612 None => (),
20613 Some(RestrictionTypeContentDeserializerState::All(_, Some(deserializer))) => {
20614 let data = deserializer.finish(reader)?;
20615 RestrictionTypeContentDeserializer::store_all(&mut values, data)?;
20616 }
20617 Some(_) => unreachable!(),
20618 }
20619 Ok(match artifact {
20620 DeserializerArtifact::None => unreachable!(),
20621 DeserializerArtifact::Data(data) => {
20622 RestrictionTypeContentDeserializer::store_all(&mut values, data)?;
20623 let data = RestrictionTypeContentDeserializer::finish_state(
20624 reader,
20625 RestrictionTypeContentDeserializerState::All(values, None),
20626 )?;
20627 *self.state = RestrictionTypeContentDeserializerState::Done__(data);
20628 ElementHandlerOutput::Break { event, allow_any }
20629 }
20630 DeserializerArtifact::Deserializer(deserializer) => {
20631 *self.state =
20632 RestrictionTypeContentDeserializerState::All(values, Some(deserializer));
20633 ElementHandlerOutput::from_event_end(event, allow_any)
20634 }
20635 })
20636 }
20637 fn handle_choice<'de, R>(
20638 &mut self,
20639 reader: &R,
20640 mut values: Option<super::GroupType>,
20641 output: DeserializerOutput<'de, super::GroupType>,
20642 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20643 ) -> Result<ElementHandlerOutput<'de>, Error>
20644 where
20645 R: DeserializeReader,
20646 {
20647 let DeserializerOutput {
20648 artifact,
20649 event,
20650 allow_any,
20651 } = output;
20652 if artifact.is_none() {
20653 *self.state = match fallback.take() {
20654 None => RestrictionTypeContentDeserializerState::Init__,
20655 Some(RestrictionTypeContentDeserializerState::Choice(
20656 _,
20657 Some(deserializer),
20658 )) => {
20659 RestrictionTypeContentDeserializerState::Choice(values, Some(deserializer))
20660 }
20661 _ => unreachable!(),
20662 };
20663 return Ok(ElementHandlerOutput::break_(event, allow_any));
20664 }
20665 match fallback.take() {
20666 None => (),
20667 Some(RestrictionTypeContentDeserializerState::Choice(_, Some(deserializer))) => {
20668 let data = deserializer.finish(reader)?;
20669 RestrictionTypeContentDeserializer::store_choice(&mut values, data)?;
20670 }
20671 Some(_) => unreachable!(),
20672 }
20673 Ok(match artifact {
20674 DeserializerArtifact::None => unreachable!(),
20675 DeserializerArtifact::Data(data) => {
20676 RestrictionTypeContentDeserializer::store_choice(&mut values, data)?;
20677 let data = RestrictionTypeContentDeserializer::finish_state(
20678 reader,
20679 RestrictionTypeContentDeserializerState::Choice(values, None),
20680 )?;
20681 *self.state = RestrictionTypeContentDeserializerState::Done__(data);
20682 ElementHandlerOutput::Break { event, allow_any }
20683 }
20684 DeserializerArtifact::Deserializer(deserializer) => {
20685 *self.state =
20686 RestrictionTypeContentDeserializerState::Choice(values, Some(deserializer));
20687 ElementHandlerOutput::from_event_end(event, allow_any)
20688 }
20689 })
20690 }
20691 fn handle_sequence<'de, R>(
20692 &mut self,
20693 reader: &R,
20694 mut values: Option<super::GroupType>,
20695 output: DeserializerOutput<'de, super::GroupType>,
20696 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20697 ) -> Result<ElementHandlerOutput<'de>, Error>
20698 where
20699 R: DeserializeReader,
20700 {
20701 let DeserializerOutput {
20702 artifact,
20703 event,
20704 allow_any,
20705 } = output;
20706 if artifact.is_none() {
20707 *self.state = match fallback.take() {
20708 None => RestrictionTypeContentDeserializerState::Init__,
20709 Some(RestrictionTypeContentDeserializerState::Sequence(
20710 _,
20711 Some(deserializer),
20712 )) => RestrictionTypeContentDeserializerState::Sequence(
20713 values,
20714 Some(deserializer),
20715 ),
20716 _ => unreachable!(),
20717 };
20718 return Ok(ElementHandlerOutput::break_(event, allow_any));
20719 }
20720 match fallback.take() {
20721 None => (),
20722 Some(RestrictionTypeContentDeserializerState::Sequence(_, Some(deserializer))) => {
20723 let data = deserializer.finish(reader)?;
20724 RestrictionTypeContentDeserializer::store_sequence(&mut values, data)?;
20725 }
20726 Some(_) => unreachable!(),
20727 }
20728 Ok(match artifact {
20729 DeserializerArtifact::None => unreachable!(),
20730 DeserializerArtifact::Data(data) => {
20731 RestrictionTypeContentDeserializer::store_sequence(&mut values, data)?;
20732 let data = RestrictionTypeContentDeserializer::finish_state(
20733 reader,
20734 RestrictionTypeContentDeserializerState::Sequence(values, None),
20735 )?;
20736 *self.state = RestrictionTypeContentDeserializerState::Done__(data);
20737 ElementHandlerOutput::Break { event, allow_any }
20738 }
20739 DeserializerArtifact::Deserializer(deserializer) => {
20740 *self.state = RestrictionTypeContentDeserializerState::Sequence(
20741 values,
20742 Some(deserializer),
20743 );
20744 ElementHandlerOutput::from_event_end(event, allow_any)
20745 }
20746 })
20747 }
20748 fn handle_simple_type<'de, R>(
20749 &mut self,
20750 reader: &R,
20751 mut values: Option<super::SimpleBaseType>,
20752 output: DeserializerOutput<'de, super::SimpleBaseType>,
20753 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20754 ) -> Result<ElementHandlerOutput<'de>, Error>
20755 where
20756 R: DeserializeReader,
20757 {
20758 let DeserializerOutput {
20759 artifact,
20760 event,
20761 allow_any,
20762 } = output;
20763 if artifact.is_none() {
20764 *self.state = match fallback.take() {
20765 None => RestrictionTypeContentDeserializerState::Init__,
20766 Some(RestrictionTypeContentDeserializerState::SimpleType(
20767 _,
20768 Some(deserializer),
20769 )) => RestrictionTypeContentDeserializerState::SimpleType(
20770 values,
20771 Some(deserializer),
20772 ),
20773 _ => unreachable!(),
20774 };
20775 return Ok(ElementHandlerOutput::break_(event, allow_any));
20776 }
20777 match fallback.take() {
20778 None => (),
20779 Some(RestrictionTypeContentDeserializerState::SimpleType(
20780 _,
20781 Some(deserializer),
20782 )) => {
20783 let data = deserializer.finish(reader)?;
20784 RestrictionTypeContentDeserializer::store_simple_type(&mut values, data)?;
20785 }
20786 Some(_) => unreachable!(),
20787 }
20788 Ok(match artifact {
20789 DeserializerArtifact::None => unreachable!(),
20790 DeserializerArtifact::Data(data) => {
20791 RestrictionTypeContentDeserializer::store_simple_type(&mut values, data)?;
20792 let data = RestrictionTypeContentDeserializer::finish_state(
20793 reader,
20794 RestrictionTypeContentDeserializerState::SimpleType(values, None),
20795 )?;
20796 *self.state = RestrictionTypeContentDeserializerState::Done__(data);
20797 ElementHandlerOutput::Break { event, allow_any }
20798 }
20799 DeserializerArtifact::Deserializer(deserializer) => {
20800 *self.state = RestrictionTypeContentDeserializerState::SimpleType(
20801 values,
20802 Some(deserializer),
20803 );
20804 ElementHandlerOutput::from_event_end(event, allow_any)
20805 }
20806 })
20807 }
20808 fn handle_facet<'de, R>(
20809 &mut self,
20810 reader: &R,
20811 mut values: Option<super::Facet>,
20812 output: DeserializerOutput<'de, super::Facet>,
20813 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20814 ) -> Result<ElementHandlerOutput<'de>, Error>
20815 where
20816 R: DeserializeReader,
20817 {
20818 let DeserializerOutput {
20819 artifact,
20820 event,
20821 allow_any,
20822 } = output;
20823 if artifact.is_none() {
20824 *self.state = match fallback.take() {
20825 None => RestrictionTypeContentDeserializerState::Init__,
20826 Some(RestrictionTypeContentDeserializerState::Facet(_, Some(deserializer))) => {
20827 RestrictionTypeContentDeserializerState::Facet(values, Some(deserializer))
20828 }
20829 _ => unreachable!(),
20830 };
20831 return Ok(ElementHandlerOutput::break_(event, allow_any));
20832 }
20833 match fallback.take() {
20834 None => (),
20835 Some(RestrictionTypeContentDeserializerState::Facet(_, Some(deserializer))) => {
20836 let data = deserializer.finish(reader)?;
20837 RestrictionTypeContentDeserializer::store_facet(&mut values, data)?;
20838 }
20839 Some(_) => unreachable!(),
20840 }
20841 Ok(match artifact {
20842 DeserializerArtifact::None => unreachable!(),
20843 DeserializerArtifact::Data(data) => {
20844 RestrictionTypeContentDeserializer::store_facet(&mut values, data)?;
20845 let data = RestrictionTypeContentDeserializer::finish_state(
20846 reader,
20847 RestrictionTypeContentDeserializerState::Facet(values, None),
20848 )?;
20849 *self.state = RestrictionTypeContentDeserializerState::Done__(data);
20850 ElementHandlerOutput::Break { event, allow_any }
20851 }
20852 DeserializerArtifact::Deserializer(deserializer) => {
20853 *self.state =
20854 RestrictionTypeContentDeserializerState::Facet(values, Some(deserializer));
20855 ElementHandlerOutput::from_event_end(event, allow_any)
20856 }
20857 })
20858 }
20859 fn handle_attribute<'de, R>(
20860 &mut self,
20861 reader: &R,
20862 mut values: Option<super::AttributeType>,
20863 output: DeserializerOutput<'de, super::AttributeType>,
20864 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20865 ) -> Result<ElementHandlerOutput<'de>, Error>
20866 where
20867 R: DeserializeReader,
20868 {
20869 let DeserializerOutput {
20870 artifact,
20871 event,
20872 allow_any,
20873 } = output;
20874 if artifact.is_none() {
20875 *self.state = match fallback.take() {
20876 None => RestrictionTypeContentDeserializerState::Init__,
20877 Some(RestrictionTypeContentDeserializerState::Attribute(
20878 _,
20879 Some(deserializer),
20880 )) => RestrictionTypeContentDeserializerState::Attribute(
20881 values,
20882 Some(deserializer),
20883 ),
20884 _ => unreachable!(),
20885 };
20886 return Ok(ElementHandlerOutput::break_(event, allow_any));
20887 }
20888 match fallback.take() {
20889 None => (),
20890 Some(RestrictionTypeContentDeserializerState::Attribute(_, Some(deserializer))) => {
20891 let data = deserializer.finish(reader)?;
20892 RestrictionTypeContentDeserializer::store_attribute(&mut values, data)?;
20893 }
20894 Some(_) => unreachable!(),
20895 }
20896 Ok(match artifact {
20897 DeserializerArtifact::None => unreachable!(),
20898 DeserializerArtifact::Data(data) => {
20899 RestrictionTypeContentDeserializer::store_attribute(&mut values, data)?;
20900 let data = RestrictionTypeContentDeserializer::finish_state(
20901 reader,
20902 RestrictionTypeContentDeserializerState::Attribute(values, None),
20903 )?;
20904 *self.state = RestrictionTypeContentDeserializerState::Done__(data);
20905 ElementHandlerOutput::Break { event, allow_any }
20906 }
20907 DeserializerArtifact::Deserializer(deserializer) => {
20908 *self.state = RestrictionTypeContentDeserializerState::Attribute(
20909 values,
20910 Some(deserializer),
20911 );
20912 ElementHandlerOutput::from_event_end(event, allow_any)
20913 }
20914 })
20915 }
20916 fn handle_attribute_group<'de, R>(
20917 &mut self,
20918 reader: &R,
20919 mut values: Option<super::AttributeGroupType>,
20920 output: DeserializerOutput<'de, super::AttributeGroupType>,
20921 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20922 ) -> Result<ElementHandlerOutput<'de>, Error>
20923 where
20924 R: DeserializeReader,
20925 {
20926 let DeserializerOutput {
20927 artifact,
20928 event,
20929 allow_any,
20930 } = output;
20931 if artifact.is_none() {
20932 *self.state = match fallback.take() {
20933 None => RestrictionTypeContentDeserializerState::Init__,
20934 Some(RestrictionTypeContentDeserializerState::AttributeGroup(
20935 _,
20936 Some(deserializer),
20937 )) => RestrictionTypeContentDeserializerState::AttributeGroup(
20938 values,
20939 Some(deserializer),
20940 ),
20941 _ => unreachable!(),
20942 };
20943 return Ok(ElementHandlerOutput::break_(event, allow_any));
20944 }
20945 match fallback.take() {
20946 None => (),
20947 Some(RestrictionTypeContentDeserializerState::AttributeGroup(
20948 _,
20949 Some(deserializer),
20950 )) => {
20951 let data = deserializer.finish(reader)?;
20952 RestrictionTypeContentDeserializer::store_attribute_group(&mut values, data)?;
20953 }
20954 Some(_) => unreachable!(),
20955 }
20956 Ok(match artifact {
20957 DeserializerArtifact::None => unreachable!(),
20958 DeserializerArtifact::Data(data) => {
20959 RestrictionTypeContentDeserializer::store_attribute_group(&mut values, data)?;
20960 let data = RestrictionTypeContentDeserializer::finish_state(
20961 reader,
20962 RestrictionTypeContentDeserializerState::AttributeGroup(values, None),
20963 )?;
20964 *self.state = RestrictionTypeContentDeserializerState::Done__(data);
20965 ElementHandlerOutput::Break { event, allow_any }
20966 }
20967 DeserializerArtifact::Deserializer(deserializer) => {
20968 *self.state = RestrictionTypeContentDeserializerState::AttributeGroup(
20969 values,
20970 Some(deserializer),
20971 );
20972 ElementHandlerOutput::from_event_end(event, allow_any)
20973 }
20974 })
20975 }
20976 fn handle_any_attribute<'de, R>(
20977 &mut self,
20978 reader: &R,
20979 mut values: Option<super::AnyAttribute>,
20980 output: DeserializerOutput<'de, super::AnyAttribute>,
20981 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
20982 ) -> Result<ElementHandlerOutput<'de>, Error>
20983 where
20984 R: DeserializeReader,
20985 {
20986 let DeserializerOutput {
20987 artifact,
20988 event,
20989 allow_any,
20990 } = output;
20991 if artifact.is_none() {
20992 *self.state = match fallback.take() {
20993 None => RestrictionTypeContentDeserializerState::Init__,
20994 Some(RestrictionTypeContentDeserializerState::AnyAttribute(
20995 _,
20996 Some(deserializer),
20997 )) => RestrictionTypeContentDeserializerState::AnyAttribute(
20998 values,
20999 Some(deserializer),
21000 ),
21001 _ => unreachable!(),
21002 };
21003 return Ok(ElementHandlerOutput::break_(event, allow_any));
21004 }
21005 match fallback.take() {
21006 None => (),
21007 Some(RestrictionTypeContentDeserializerState::AnyAttribute(
21008 _,
21009 Some(deserializer),
21010 )) => {
21011 let data = deserializer.finish(reader)?;
21012 RestrictionTypeContentDeserializer::store_any_attribute(&mut values, data)?;
21013 }
21014 Some(_) => unreachable!(),
21015 }
21016 Ok(match artifact {
21017 DeserializerArtifact::None => unreachable!(),
21018 DeserializerArtifact::Data(data) => {
21019 RestrictionTypeContentDeserializer::store_any_attribute(&mut values, data)?;
21020 let data = RestrictionTypeContentDeserializer::finish_state(
21021 reader,
21022 RestrictionTypeContentDeserializerState::AnyAttribute(values, None),
21023 )?;
21024 *self.state = RestrictionTypeContentDeserializerState::Done__(data);
21025 ElementHandlerOutput::Break { event, allow_any }
21026 }
21027 DeserializerArtifact::Deserializer(deserializer) => {
21028 *self.state = RestrictionTypeContentDeserializerState::AnyAttribute(
21029 values,
21030 Some(deserializer),
21031 );
21032 ElementHandlerOutput::from_event_end(event, allow_any)
21033 }
21034 })
21035 }
21036 fn handle_assert<'de, R>(
21037 &mut self,
21038 reader: &R,
21039 mut values: Option<super::AssertionType>,
21040 output: DeserializerOutput<'de, super::AssertionType>,
21041 fallback: &mut Option<RestrictionTypeContentDeserializerState>,
21042 ) -> Result<ElementHandlerOutput<'de>, Error>
21043 where
21044 R: DeserializeReader,
21045 {
21046 let DeserializerOutput {
21047 artifact,
21048 event,
21049 allow_any,
21050 } = output;
21051 if artifact.is_none() {
21052 *self.state = match fallback.take() {
21053 None => RestrictionTypeContentDeserializerState::Init__,
21054 Some(RestrictionTypeContentDeserializerState::Assert(
21055 _,
21056 Some(deserializer),
21057 )) => {
21058 RestrictionTypeContentDeserializerState::Assert(values, Some(deserializer))
21059 }
21060 _ => unreachable!(),
21061 };
21062 return Ok(ElementHandlerOutput::break_(event, allow_any));
21063 }
21064 match fallback.take() {
21065 None => (),
21066 Some(RestrictionTypeContentDeserializerState::Assert(_, Some(deserializer))) => {
21067 let data = deserializer.finish(reader)?;
21068 RestrictionTypeContentDeserializer::store_assert(&mut values, data)?;
21069 }
21070 Some(_) => unreachable!(),
21071 }
21072 Ok(match artifact {
21073 DeserializerArtifact::None => unreachable!(),
21074 DeserializerArtifact::Data(data) => {
21075 RestrictionTypeContentDeserializer::store_assert(&mut values, data)?;
21076 let data = RestrictionTypeContentDeserializer::finish_state(
21077 reader,
21078 RestrictionTypeContentDeserializerState::Assert(values, None),
21079 )?;
21080 *self.state = RestrictionTypeContentDeserializerState::Done__(data);
21081 ElementHandlerOutput::Break { event, allow_any }
21082 }
21083 DeserializerArtifact::Deserializer(deserializer) => {
21084 *self.state =
21085 RestrictionTypeContentDeserializerState::Assert(values, Some(deserializer));
21086 ElementHandlerOutput::from_event_end(event, allow_any)
21087 }
21088 })
21089 }
21090 }
21091 impl<'de> Deserializer<'de, super::RestrictionTypeContent>
21092 for Box<RestrictionTypeContentDeserializer>
21093 {
21094 fn init<R>(
21095 reader: &R,
21096 event: Event<'de>,
21097 ) -> DeserializerResult<'de, super::RestrictionTypeContent>
21098 where
21099 R: DeserializeReader,
21100 {
21101 let deserializer = Box::new(RestrictionTypeContentDeserializer {
21102 state: Box::new(RestrictionTypeContentDeserializerState::Init__),
21103 });
21104 let mut output = deserializer.next(reader, event)?;
21105 output.artifact = match output.artifact {
21106 DeserializerArtifact::Deserializer(x)
21107 if matches!(&*x.state, RestrictionTypeContentDeserializerState::Init__) =>
21108 {
21109 DeserializerArtifact::None
21110 }
21111 artifact => artifact,
21112 };
21113 Ok(output)
21114 }
21115 fn next<R>(
21116 mut self,
21117 reader: &R,
21118 event: Event<'de>,
21119 ) -> DeserializerResult<'de, super::RestrictionTypeContent>
21120 where
21121 R: DeserializeReader,
21122 {
21123 use RestrictionTypeContentDeserializerState as S;
21124 let mut event = event;
21125 let mut fallback = None;
21126 let (event, allow_any) = loop {
21127 let state = replace(&mut *self.state, S::Unknown__);
21128 event = match (state, event) {
21129 (S::Annotation(values, Some(deserializer)), event) => {
21130 let output = deserializer.next(reader, event)?;
21131 match self.handle_annotation(reader, values, output, &mut fallback)? {
21132 ElementHandlerOutput::Break { event, allow_any } => {
21133 break (event, allow_any)
21134 }
21135 ElementHandlerOutput::Continue { event, .. } => event,
21136 }
21137 }
21138 (S::OpenContent(values, Some(deserializer)), event) => {
21139 let output = deserializer.next(reader, event)?;
21140 match self.handle_open_content(reader, values, output, &mut fallback)? {
21141 ElementHandlerOutput::Break { event, allow_any } => {
21142 break (event, allow_any)
21143 }
21144 ElementHandlerOutput::Continue { event, .. } => event,
21145 }
21146 }
21147 (S::Group(values, Some(deserializer)), event) => {
21148 let output = deserializer.next(reader, event)?;
21149 match self.handle_group(reader, values, output, &mut fallback)? {
21150 ElementHandlerOutput::Break { event, allow_any } => {
21151 break (event, allow_any)
21152 }
21153 ElementHandlerOutput::Continue { event, .. } => event,
21154 }
21155 }
21156 (S::All(values, Some(deserializer)), event) => {
21157 let output = deserializer.next(reader, event)?;
21158 match self.handle_all(reader, values, output, &mut fallback)? {
21159 ElementHandlerOutput::Break { event, allow_any } => {
21160 break (event, allow_any)
21161 }
21162 ElementHandlerOutput::Continue { event, .. } => event,
21163 }
21164 }
21165 (S::Choice(values, Some(deserializer)), event) => {
21166 let output = deserializer.next(reader, event)?;
21167 match self.handle_choice(reader, 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::Sequence(values, Some(deserializer)), event) => {
21175 let output = deserializer.next(reader, event)?;
21176 match self.handle_sequence(reader, values, output, &mut fallback)? {
21177 ElementHandlerOutput::Break { event, allow_any } => {
21178 break (event, allow_any)
21179 }
21180 ElementHandlerOutput::Continue { event, .. } => event,
21181 }
21182 }
21183 (S::SimpleType(values, Some(deserializer)), event) => {
21184 let output = deserializer.next(reader, event)?;
21185 match self.handle_simple_type(reader, values, output, &mut fallback)? {
21186 ElementHandlerOutput::Break { event, allow_any } => {
21187 break (event, allow_any)
21188 }
21189 ElementHandlerOutput::Continue { event, .. } => event,
21190 }
21191 }
21192 (S::Facet(values, Some(deserializer)), event) => {
21193 let output = deserializer.next(reader, event)?;
21194 match self.handle_facet(reader, values, output, &mut fallback)? {
21195 ElementHandlerOutput::Break { event, allow_any } => {
21196 break (event, allow_any)
21197 }
21198 ElementHandlerOutput::Continue { event, .. } => event,
21199 }
21200 }
21201 (S::Attribute(values, Some(deserializer)), event) => {
21202 let output = deserializer.next(reader, event)?;
21203 match self.handle_attribute(reader, values, output, &mut fallback)? {
21204 ElementHandlerOutput::Break { event, allow_any } => {
21205 break (event, allow_any)
21206 }
21207 ElementHandlerOutput::Continue { event, .. } => event,
21208 }
21209 }
21210 (S::AttributeGroup(values, Some(deserializer)), event) => {
21211 let output = deserializer.next(reader, event)?;
21212 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
21213 ElementHandlerOutput::Break { event, allow_any } => {
21214 break (event, allow_any)
21215 }
21216 ElementHandlerOutput::Continue { event, .. } => event,
21217 }
21218 }
21219 (S::AnyAttribute(values, Some(deserializer)), event) => {
21220 let output = deserializer.next(reader, event)?;
21221 match self.handle_any_attribute(reader, values, output, &mut fallback)? {
21222 ElementHandlerOutput::Break { event, allow_any } => {
21223 break (event, allow_any)
21224 }
21225 ElementHandlerOutput::Continue { event, .. } => event,
21226 }
21227 }
21228 (S::Assert(values, Some(deserializer)), event) => {
21229 let output = deserializer.next(reader, event)?;
21230 match self.handle_assert(reader, values, output, &mut fallback)? {
21231 ElementHandlerOutput::Break { event, allow_any } => {
21232 break (event, allow_any)
21233 }
21234 ElementHandlerOutput::Continue { event, .. } => event,
21235 }
21236 }
21237 (state, event @ Event::End(_)) => {
21238 return Ok(DeserializerOutput {
21239 artifact: DeserializerArtifact::Data(
21240 RestrictionTypeContentDeserializer::finish_state(reader, state)?,
21241 ),
21242 event: DeserializerEvent::Continue(event),
21243 allow_any: false,
21244 });
21245 }
21246 (S::Init__, event) => match self.find_suitable(reader, event, &mut fallback)? {
21247 ElementHandlerOutput::Break { event, allow_any } => {
21248 break (event, allow_any)
21249 }
21250 ElementHandlerOutput::Continue { event, .. } => event,
21251 },
21252 (S::Annotation(values, None), event) => {
21253 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
21254 reader, event,
21255 )?;
21256 match self.handle_annotation(reader, values, output, &mut fallback)? {
21257 ElementHandlerOutput::Break { event, allow_any } => {
21258 break (event, allow_any)
21259 }
21260 ElementHandlerOutput::Continue { event, .. } => event,
21261 }
21262 }
21263 (S::OpenContent(values, None), event) => {
21264 let output = <super::OpenContent as WithDeserializer>::Deserializer::init(
21265 reader, event,
21266 )?;
21267 match self.handle_open_content(reader, values, output, &mut fallback)? {
21268 ElementHandlerOutput::Break { event, allow_any } => {
21269 break (event, allow_any)
21270 }
21271 ElementHandlerOutput::Continue { event, .. } => event,
21272 }
21273 }
21274 (S::Group(values, None), event) => {
21275 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
21276 reader, event,
21277 )?;
21278 match self.handle_group(reader, values, output, &mut fallback)? {
21279 ElementHandlerOutput::Break { event, allow_any } => {
21280 break (event, allow_any)
21281 }
21282 ElementHandlerOutput::Continue { event, .. } => event,
21283 }
21284 }
21285 (S::All(values, None), event) => {
21286 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
21287 reader, event,
21288 )?;
21289 match self.handle_all(reader, values, output, &mut fallback)? {
21290 ElementHandlerOutput::Break { event, allow_any } => {
21291 break (event, allow_any)
21292 }
21293 ElementHandlerOutput::Continue { event, .. } => event,
21294 }
21295 }
21296 (S::Choice(values, None), event) => {
21297 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
21298 reader, event,
21299 )?;
21300 match self.handle_choice(reader, values, output, &mut fallback)? {
21301 ElementHandlerOutput::Break { event, allow_any } => {
21302 break (event, allow_any)
21303 }
21304 ElementHandlerOutput::Continue { event, .. } => event,
21305 }
21306 }
21307 (S::Sequence(values, None), event) => {
21308 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
21309 reader, event,
21310 )?;
21311 match self.handle_sequence(reader, values, output, &mut fallback)? {
21312 ElementHandlerOutput::Break { event, allow_any } => {
21313 break (event, allow_any)
21314 }
21315 ElementHandlerOutput::Continue { event, .. } => event,
21316 }
21317 }
21318 (S::SimpleType(values, None), event) => {
21319 let output =
21320 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
21321 reader, event,
21322 )?;
21323 match self.handle_simple_type(reader, values, output, &mut fallback)? {
21324 ElementHandlerOutput::Break { event, allow_any } => {
21325 break (event, allow_any)
21326 }
21327 ElementHandlerOutput::Continue { event, .. } => event,
21328 }
21329 }
21330 (S::Facet(values, None), event) => {
21331 let output =
21332 <super::Facet as WithDeserializer>::Deserializer::init(reader, event)?;
21333 match self.handle_facet(reader, values, output, &mut fallback)? {
21334 ElementHandlerOutput::Break { event, allow_any } => {
21335 break (event, allow_any)
21336 }
21337 ElementHandlerOutput::Continue { event, .. } => event,
21338 }
21339 }
21340 (S::Attribute(values, None), event) => {
21341 let output =
21342 <super::AttributeType as WithDeserializer>::Deserializer::init(
21343 reader, event,
21344 )?;
21345 match self.handle_attribute(reader, values, output, &mut fallback)? {
21346 ElementHandlerOutput::Break { event, allow_any } => {
21347 break (event, allow_any)
21348 }
21349 ElementHandlerOutput::Continue { event, .. } => event,
21350 }
21351 }
21352 (S::AttributeGroup(values, None), event) => {
21353 let output =
21354 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
21355 reader, event,
21356 )?;
21357 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
21358 ElementHandlerOutput::Break { event, allow_any } => {
21359 break (event, allow_any)
21360 }
21361 ElementHandlerOutput::Continue { event, .. } => event,
21362 }
21363 }
21364 (S::AnyAttribute(values, None), event) => {
21365 let output = <super::AnyAttribute as WithDeserializer>::Deserializer::init(
21366 reader, event,
21367 )?;
21368 match self.handle_any_attribute(reader, values, output, &mut fallback)? {
21369 ElementHandlerOutput::Break { event, allow_any } => {
21370 break (event, allow_any)
21371 }
21372 ElementHandlerOutput::Continue { event, .. } => event,
21373 }
21374 }
21375 (S::Assert(values, None), event) => {
21376 let output =
21377 <super::AssertionType as WithDeserializer>::Deserializer::init(
21378 reader, event,
21379 )?;
21380 match self.handle_assert(reader, values, output, &mut fallback)? {
21381 ElementHandlerOutput::Break { event, allow_any } => {
21382 break (event, allow_any)
21383 }
21384 ElementHandlerOutput::Continue { event, .. } => event,
21385 }
21386 }
21387 (s @ S::Done__(_), event) => {
21388 *self.state = s;
21389 break (DeserializerEvent::Continue(event), false);
21390 }
21391 (S::Unknown__, _) => unreachable!(),
21392 }
21393 };
21394 let artifact = if matches!(&*self.state, S::Done__(_)) {
21395 DeserializerArtifact::Data(self.finish(reader)?)
21396 } else {
21397 DeserializerArtifact::Deserializer(self)
21398 };
21399 Ok(DeserializerOutput {
21400 artifact,
21401 event,
21402 allow_any,
21403 })
21404 }
21405 fn finish<R>(self, reader: &R) -> Result<super::RestrictionTypeContent, Error>
21406 where
21407 R: DeserializeReader,
21408 {
21409 RestrictionTypeContentDeserializer::finish_state(reader, *self.state)
21410 }
21411 }
21412 #[derive(Debug)]
21413 pub struct ExtensionTypeDeserializer {
21414 id: Option<String>,
21415 base: super::QName,
21416 content: Vec<super::ExtensionTypeContent>,
21417 state: Box<ExtensionTypeDeserializerState>,
21418 }
21419 #[derive(Debug)]
21420 enum ExtensionTypeDeserializerState {
21421 Init__,
21422 Next__,
21423 Content__(<super::ExtensionTypeContent as WithDeserializer>::Deserializer),
21424 Unknown__,
21425 }
21426 impl ExtensionTypeDeserializer {
21427 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
21428 where
21429 R: DeserializeReader,
21430 {
21431 let mut id: Option<String> = None;
21432 let mut base: Option<super::QName> = None;
21433 for attrib in filter_xmlns_attributes(bytes_start) {
21434 let attrib = attrib?;
21435 if matches!(
21436 reader.resolve_local_name(attrib.key, &super::NS_XS),
21437 Some(b"id")
21438 ) {
21439 reader.read_attrib(&mut id, b"id", &attrib.value)?;
21440 } else if matches!(
21441 reader.resolve_local_name(attrib.key, &super::NS_XS),
21442 Some(b"base")
21443 ) {
21444 reader.read_attrib(&mut base, b"base", &attrib.value)?;
21445 }
21446 }
21447 Ok(Box::new(Self {
21448 id: id,
21449 base: base
21450 .ok_or_else(|| reader.map_error(ErrorKind::MissingAttribute("base".into())))?,
21451 content: Vec::new(),
21452 state: Box::new(ExtensionTypeDeserializerState::Init__),
21453 }))
21454 }
21455 fn finish_state<R>(
21456 &mut self,
21457 reader: &R,
21458 state: ExtensionTypeDeserializerState,
21459 ) -> Result<(), Error>
21460 where
21461 R: DeserializeReader,
21462 {
21463 if let ExtensionTypeDeserializerState::Content__(deserializer) = state {
21464 self.store_content(deserializer.finish(reader)?)?;
21465 }
21466 Ok(())
21467 }
21468 fn store_content(&mut self, value: super::ExtensionTypeContent) -> Result<(), Error> {
21469 self.content.push(value);
21470 Ok(())
21471 }
21472 fn handle_content<'de, R>(
21473 &mut self,
21474 reader: &R,
21475 output: DeserializerOutput<'de, super::ExtensionTypeContent>,
21476 fallback: &mut Option<ExtensionTypeDeserializerState>,
21477 ) -> Result<ElementHandlerOutput<'de>, Error>
21478 where
21479 R: DeserializeReader,
21480 {
21481 let DeserializerOutput {
21482 artifact,
21483 event,
21484 allow_any,
21485 } = output;
21486 if artifact.is_none() {
21487 *self.state = fallback
21488 .take()
21489 .unwrap_or(ExtensionTypeDeserializerState::Next__);
21490 return Ok(ElementHandlerOutput::break_(event, allow_any));
21491 }
21492 if let Some(fallback) = fallback.take() {
21493 self.finish_state(reader, fallback)?;
21494 }
21495 Ok(match artifact {
21496 DeserializerArtifact::None => unreachable!(),
21497 DeserializerArtifact::Data(data) => {
21498 self.store_content(data)?;
21499 *self.state = ExtensionTypeDeserializerState::Next__;
21500 ElementHandlerOutput::from_event(event, allow_any)
21501 }
21502 DeserializerArtifact::Deserializer(deserializer) => {
21503 let ret = ElementHandlerOutput::from_event(event, allow_any);
21504 match &ret {
21505 ElementHandlerOutput::Break { .. } => {
21506 *self.state = ExtensionTypeDeserializerState::Content__(deserializer);
21507 }
21508 ElementHandlerOutput::Continue { .. } => {
21509 fallback.get_or_insert(ExtensionTypeDeserializerState::Content__(
21510 deserializer,
21511 ));
21512 *self.state = ExtensionTypeDeserializerState::Next__;
21513 }
21514 }
21515 ret
21516 }
21517 })
21518 }
21519 }
21520 impl<'de> Deserializer<'de, super::ExtensionType> for Box<ExtensionTypeDeserializer> {
21521 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::ExtensionType>
21522 where
21523 R: DeserializeReader,
21524 {
21525 reader.init_deserializer_from_start_event(
21526 event,
21527 ExtensionTypeDeserializer::from_bytes_start,
21528 )
21529 }
21530 fn next<R>(
21531 mut self,
21532 reader: &R,
21533 event: Event<'de>,
21534 ) -> DeserializerResult<'de, super::ExtensionType>
21535 where
21536 R: DeserializeReader,
21537 {
21538 use ExtensionTypeDeserializerState as S;
21539 let mut event = event;
21540 let mut fallback = None;
21541 let (event, allow_any) = loop {
21542 let state = replace(&mut *self.state, S::Unknown__);
21543 event = match (state, event) {
21544 (S::Content__(deserializer), event) => {
21545 let output = deserializer.next(reader, event)?;
21546 match self.handle_content(reader, output, &mut fallback)? {
21547 ElementHandlerOutput::Break { event, allow_any } => {
21548 break (event, allow_any)
21549 }
21550 ElementHandlerOutput::Continue { event, .. } => event,
21551 }
21552 }
21553 (_, Event::End(_)) => {
21554 return Ok(DeserializerOutput {
21555 artifact: DeserializerArtifact::Data(self.finish(reader)?),
21556 event: DeserializerEvent::None,
21557 allow_any: false,
21558 });
21559 }
21560 (state @ (S::Init__ | S::Next__), event) => {
21561 fallback.get_or_insert(state);
21562 let output =
21563 <super::ExtensionTypeContent as WithDeserializer>::Deserializer::init(
21564 reader, event,
21565 )?;
21566 match self.handle_content(reader, output, &mut fallback)? {
21567 ElementHandlerOutput::Break { event, allow_any } => {
21568 break (event, allow_any)
21569 }
21570 ElementHandlerOutput::Continue { event, .. } => event,
21571 }
21572 }
21573 (S::Unknown__, _) => unreachable!(),
21574 }
21575 };
21576 let artifact = DeserializerArtifact::Deserializer(self);
21577 Ok(DeserializerOutput {
21578 artifact,
21579 event,
21580 allow_any,
21581 })
21582 }
21583 fn finish<R>(mut self, reader: &R) -> Result<super::ExtensionType, Error>
21584 where
21585 R: DeserializeReader,
21586 {
21587 let state = replace(&mut *self.state, ExtensionTypeDeserializerState::Unknown__);
21588 self.finish_state(reader, state)?;
21589 Ok(super::ExtensionType {
21590 id: self.id,
21591 base: self.base,
21592 content: self.content,
21593 })
21594 }
21595 }
21596 #[derive(Debug)]
21597 pub struct ExtensionTypeContentDeserializer {
21598 state: Box<ExtensionTypeContentDeserializerState>,
21599 }
21600 #[derive(Debug)]
21601 pub enum ExtensionTypeContentDeserializerState {
21602 Init__,
21603 Annotation(
21604 Option<super::Annotation>,
21605 Option<<super::Annotation as WithDeserializer>::Deserializer>,
21606 ),
21607 OpenContent(
21608 Option<super::OpenContent>,
21609 Option<<super::OpenContent as WithDeserializer>::Deserializer>,
21610 ),
21611 Group(
21612 Option<super::GroupType>,
21613 Option<<super::GroupType as WithDeserializer>::Deserializer>,
21614 ),
21615 All(
21616 Option<super::GroupType>,
21617 Option<<super::GroupType as WithDeserializer>::Deserializer>,
21618 ),
21619 Choice(
21620 Option<super::GroupType>,
21621 Option<<super::GroupType as WithDeserializer>::Deserializer>,
21622 ),
21623 Sequence(
21624 Option<super::GroupType>,
21625 Option<<super::GroupType as WithDeserializer>::Deserializer>,
21626 ),
21627 Attribute(
21628 Option<super::AttributeType>,
21629 Option<<super::AttributeType as WithDeserializer>::Deserializer>,
21630 ),
21631 AttributeGroup(
21632 Option<super::AttributeGroupType>,
21633 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
21634 ),
21635 AnyAttribute(
21636 Option<super::AnyAttribute>,
21637 Option<<super::AnyAttribute as WithDeserializer>::Deserializer>,
21638 ),
21639 Assert(
21640 Option<super::AssertionType>,
21641 Option<<super::AssertionType as WithDeserializer>::Deserializer>,
21642 ),
21643 Done__(super::ExtensionTypeContent),
21644 Unknown__,
21645 }
21646 impl ExtensionTypeContentDeserializer {
21647 fn find_suitable<'de, R>(
21648 &mut self,
21649 reader: &R,
21650 event: Event<'de>,
21651 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
21652 ) -> Result<ElementHandlerOutput<'de>, Error>
21653 where
21654 R: DeserializeReader,
21655 {
21656 let (Event::Start(x) | Event::Empty(x)) = &event else {
21657 *self.state = fallback
21658 .take()
21659 .unwrap_or(ExtensionTypeContentDeserializerState::Init__);
21660 return Ok(ElementHandlerOutput::return_to_parent(event, false));
21661 };
21662 if matches!(
21663 reader.resolve_local_name(x.name(), &super::NS_XS),
21664 Some(b"annotation")
21665 ) {
21666 let output =
21667 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
21668 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
21669 }
21670 if matches!(
21671 reader.resolve_local_name(x.name(), &super::NS_XS),
21672 Some(b"openContent")
21673 ) {
21674 let output =
21675 <super::OpenContent as WithDeserializer>::Deserializer::init(reader, event)?;
21676 return self.handle_open_content(
21677 reader,
21678 Default::default(),
21679 output,
21680 &mut *fallback,
21681 );
21682 }
21683 if matches!(
21684 reader.resolve_local_name(x.name(), &super::NS_XS),
21685 Some(b"group")
21686 ) {
21687 let output =
21688 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
21689 return self.handle_group(reader, Default::default(), output, &mut *fallback);
21690 }
21691 if matches!(
21692 reader.resolve_local_name(x.name(), &super::NS_XS),
21693 Some(b"all")
21694 ) {
21695 let output =
21696 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
21697 return self.handle_all(reader, Default::default(), output, &mut *fallback);
21698 }
21699 if matches!(
21700 reader.resolve_local_name(x.name(), &super::NS_XS),
21701 Some(b"choice")
21702 ) {
21703 let output =
21704 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
21705 return self.handle_choice(reader, Default::default(), output, &mut *fallback);
21706 }
21707 if matches!(
21708 reader.resolve_local_name(x.name(), &super::NS_XS),
21709 Some(b"sequence")
21710 ) {
21711 let output =
21712 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
21713 return self.handle_sequence(reader, Default::default(), output, &mut *fallback);
21714 }
21715 if matches!(
21716 reader.resolve_local_name(x.name(), &super::NS_XS),
21717 Some(b"attribute")
21718 ) {
21719 let output =
21720 <super::AttributeType as WithDeserializer>::Deserializer::init(reader, event)?;
21721 return self.handle_attribute(reader, Default::default(), output, &mut *fallback);
21722 }
21723 if matches!(
21724 reader.resolve_local_name(x.name(), &super::NS_XS),
21725 Some(b"attributeGroup")
21726 ) {
21727 let output = <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
21728 reader, event,
21729 )?;
21730 return self.handle_attribute_group(
21731 reader,
21732 Default::default(),
21733 output,
21734 &mut *fallback,
21735 );
21736 }
21737 if matches!(
21738 reader.resolve_local_name(x.name(), &super::NS_XS),
21739 Some(b"anyAttribute")
21740 ) {
21741 let output =
21742 <super::AnyAttribute as WithDeserializer>::Deserializer::init(reader, event)?;
21743 return self.handle_any_attribute(
21744 reader,
21745 Default::default(),
21746 output,
21747 &mut *fallback,
21748 );
21749 }
21750 if matches!(
21751 reader.resolve_local_name(x.name(), &super::NS_XS),
21752 Some(b"assert")
21753 ) {
21754 let output =
21755 <super::AssertionType as WithDeserializer>::Deserializer::init(reader, event)?;
21756 return self.handle_assert(reader, Default::default(), output, &mut *fallback);
21757 }
21758 *self.state = fallback
21759 .take()
21760 .unwrap_or(ExtensionTypeContentDeserializerState::Init__);
21761 Ok(ElementHandlerOutput::return_to_parent(event, false))
21762 }
21763 fn finish_state<R>(
21764 reader: &R,
21765 state: ExtensionTypeContentDeserializerState,
21766 ) -> Result<super::ExtensionTypeContent, Error>
21767 where
21768 R: DeserializeReader,
21769 {
21770 use ExtensionTypeContentDeserializerState as S;
21771 match state {
21772 S::Init__ => Err(ErrorKind::MissingContent.into()),
21773 S::Annotation(mut values, deserializer) => {
21774 if let Some(deserializer) = deserializer {
21775 let value = deserializer.finish(reader)?;
21776 ExtensionTypeContentDeserializer::store_annotation(&mut values, value)?;
21777 }
21778 Ok(super::ExtensionTypeContent::Annotation(values.ok_or_else(
21779 || ErrorKind::MissingElement("annotation".into()),
21780 )?))
21781 }
21782 S::OpenContent(mut values, deserializer) => {
21783 if let Some(deserializer) = deserializer {
21784 let value = deserializer.finish(reader)?;
21785 ExtensionTypeContentDeserializer::store_open_content(&mut values, value)?;
21786 }
21787 Ok(super::ExtensionTypeContent::OpenContent(
21788 values.ok_or_else(|| ErrorKind::MissingElement("openContent".into()))?,
21789 ))
21790 }
21791 S::Group(mut values, deserializer) => {
21792 if let Some(deserializer) = deserializer {
21793 let value = deserializer.finish(reader)?;
21794 ExtensionTypeContentDeserializer::store_group(&mut values, value)?;
21795 }
21796 Ok(super::ExtensionTypeContent::Group(values.ok_or_else(
21797 || ErrorKind::MissingElement("group".into()),
21798 )?))
21799 }
21800 S::All(mut values, deserializer) => {
21801 if let Some(deserializer) = deserializer {
21802 let value = deserializer.finish(reader)?;
21803 ExtensionTypeContentDeserializer::store_all(&mut values, value)?;
21804 }
21805 Ok(super::ExtensionTypeContent::All(
21806 values.ok_or_else(|| ErrorKind::MissingElement("all".into()))?,
21807 ))
21808 }
21809 S::Choice(mut values, deserializer) => {
21810 if let Some(deserializer) = deserializer {
21811 let value = deserializer.finish(reader)?;
21812 ExtensionTypeContentDeserializer::store_choice(&mut values, value)?;
21813 }
21814 Ok(super::ExtensionTypeContent::Choice(values.ok_or_else(
21815 || ErrorKind::MissingElement("choice".into()),
21816 )?))
21817 }
21818 S::Sequence(mut values, deserializer) => {
21819 if let Some(deserializer) = deserializer {
21820 let value = deserializer.finish(reader)?;
21821 ExtensionTypeContentDeserializer::store_sequence(&mut values, value)?;
21822 }
21823 Ok(super::ExtensionTypeContent::Sequence(values.ok_or_else(
21824 || ErrorKind::MissingElement("sequence".into()),
21825 )?))
21826 }
21827 S::Attribute(mut values, deserializer) => {
21828 if let Some(deserializer) = deserializer {
21829 let value = deserializer.finish(reader)?;
21830 ExtensionTypeContentDeserializer::store_attribute(&mut values, value)?;
21831 }
21832 Ok(super::ExtensionTypeContent::Attribute(values.ok_or_else(
21833 || ErrorKind::MissingElement("attribute".into()),
21834 )?))
21835 }
21836 S::AttributeGroup(mut values, deserializer) => {
21837 if let Some(deserializer) = deserializer {
21838 let value = deserializer.finish(reader)?;
21839 ExtensionTypeContentDeserializer::store_attribute_group(
21840 &mut values,
21841 value,
21842 )?;
21843 }
21844 Ok(super::ExtensionTypeContent::AttributeGroup(
21845 values.ok_or_else(|| ErrorKind::MissingElement("attributeGroup".into()))?,
21846 ))
21847 }
21848 S::AnyAttribute(mut values, deserializer) => {
21849 if let Some(deserializer) = deserializer {
21850 let value = deserializer.finish(reader)?;
21851 ExtensionTypeContentDeserializer::store_any_attribute(&mut values, value)?;
21852 }
21853 Ok(super::ExtensionTypeContent::AnyAttribute(
21854 values.ok_or_else(|| ErrorKind::MissingElement("anyAttribute".into()))?,
21855 ))
21856 }
21857 S::Assert(mut values, deserializer) => {
21858 if let Some(deserializer) = deserializer {
21859 let value = deserializer.finish(reader)?;
21860 ExtensionTypeContentDeserializer::store_assert(&mut values, value)?;
21861 }
21862 Ok(super::ExtensionTypeContent::Assert(values.ok_or_else(
21863 || ErrorKind::MissingElement("assert".into()),
21864 )?))
21865 }
21866 S::Done__(data) => Ok(data),
21867 S::Unknown__ => unreachable!(),
21868 }
21869 }
21870 fn store_annotation(
21871 values: &mut Option<super::Annotation>,
21872 value: super::Annotation,
21873 ) -> Result<(), Error> {
21874 if values.is_some() {
21875 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21876 b"annotation",
21877 )))?;
21878 }
21879 *values = Some(value);
21880 Ok(())
21881 }
21882 fn store_open_content(
21883 values: &mut Option<super::OpenContent>,
21884 value: super::OpenContent,
21885 ) -> Result<(), Error> {
21886 if values.is_some() {
21887 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21888 b"openContent",
21889 )))?;
21890 }
21891 *values = Some(value);
21892 Ok(())
21893 }
21894 fn store_group(
21895 values: &mut Option<super::GroupType>,
21896 value: super::GroupType,
21897 ) -> Result<(), Error> {
21898 if values.is_some() {
21899 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21900 b"group",
21901 )))?;
21902 }
21903 *values = Some(value);
21904 Ok(())
21905 }
21906 fn store_all(
21907 values: &mut Option<super::GroupType>,
21908 value: super::GroupType,
21909 ) -> Result<(), Error> {
21910 if values.is_some() {
21911 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"all")))?;
21912 }
21913 *values = Some(value);
21914 Ok(())
21915 }
21916 fn store_choice(
21917 values: &mut Option<super::GroupType>,
21918 value: super::GroupType,
21919 ) -> Result<(), Error> {
21920 if values.is_some() {
21921 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21922 b"choice",
21923 )))?;
21924 }
21925 *values = Some(value);
21926 Ok(())
21927 }
21928 fn store_sequence(
21929 values: &mut Option<super::GroupType>,
21930 value: super::GroupType,
21931 ) -> Result<(), Error> {
21932 if values.is_some() {
21933 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21934 b"sequence",
21935 )))?;
21936 }
21937 *values = Some(value);
21938 Ok(())
21939 }
21940 fn store_attribute(
21941 values: &mut Option<super::AttributeType>,
21942 value: super::AttributeType,
21943 ) -> Result<(), Error> {
21944 if values.is_some() {
21945 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21946 b"attribute",
21947 )))?;
21948 }
21949 *values = Some(value);
21950 Ok(())
21951 }
21952 fn store_attribute_group(
21953 values: &mut Option<super::AttributeGroupType>,
21954 value: super::AttributeGroupType,
21955 ) -> Result<(), Error> {
21956 if values.is_some() {
21957 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21958 b"attributeGroup",
21959 )))?;
21960 }
21961 *values = Some(value);
21962 Ok(())
21963 }
21964 fn store_any_attribute(
21965 values: &mut Option<super::AnyAttribute>,
21966 value: super::AnyAttribute,
21967 ) -> Result<(), Error> {
21968 if values.is_some() {
21969 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21970 b"anyAttribute",
21971 )))?;
21972 }
21973 *values = Some(value);
21974 Ok(())
21975 }
21976 fn store_assert(
21977 values: &mut Option<super::AssertionType>,
21978 value: super::AssertionType,
21979 ) -> Result<(), Error> {
21980 if values.is_some() {
21981 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21982 b"assert",
21983 )))?;
21984 }
21985 *values = Some(value);
21986 Ok(())
21987 }
21988 fn handle_annotation<'de, R>(
21989 &mut self,
21990 reader: &R,
21991 mut values: Option<super::Annotation>,
21992 output: DeserializerOutput<'de, super::Annotation>,
21993 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
21994 ) -> Result<ElementHandlerOutput<'de>, Error>
21995 where
21996 R: DeserializeReader,
21997 {
21998 let DeserializerOutput {
21999 artifact,
22000 event,
22001 allow_any,
22002 } = output;
22003 if artifact.is_none() {
22004 *self.state = match fallback.take() {
22005 None => ExtensionTypeContentDeserializerState::Init__,
22006 Some(ExtensionTypeContentDeserializerState::Annotation(
22007 _,
22008 Some(deserializer),
22009 )) => ExtensionTypeContentDeserializerState::Annotation(
22010 values,
22011 Some(deserializer),
22012 ),
22013 _ => unreachable!(),
22014 };
22015 return Ok(ElementHandlerOutput::break_(event, allow_any));
22016 }
22017 match fallback.take() {
22018 None => (),
22019 Some(ExtensionTypeContentDeserializerState::Annotation(_, Some(deserializer))) => {
22020 let data = deserializer.finish(reader)?;
22021 ExtensionTypeContentDeserializer::store_annotation(&mut values, data)?;
22022 }
22023 Some(_) => unreachable!(),
22024 }
22025 Ok(match artifact {
22026 DeserializerArtifact::None => unreachable!(),
22027 DeserializerArtifact::Data(data) => {
22028 ExtensionTypeContentDeserializer::store_annotation(&mut values, data)?;
22029 let data = ExtensionTypeContentDeserializer::finish_state(
22030 reader,
22031 ExtensionTypeContentDeserializerState::Annotation(values, None),
22032 )?;
22033 *self.state = ExtensionTypeContentDeserializerState::Done__(data);
22034 ElementHandlerOutput::Break { event, allow_any }
22035 }
22036 DeserializerArtifact::Deserializer(deserializer) => {
22037 *self.state = ExtensionTypeContentDeserializerState::Annotation(
22038 values,
22039 Some(deserializer),
22040 );
22041 ElementHandlerOutput::from_event_end(event, allow_any)
22042 }
22043 })
22044 }
22045 fn handle_open_content<'de, R>(
22046 &mut self,
22047 reader: &R,
22048 mut values: Option<super::OpenContent>,
22049 output: DeserializerOutput<'de, super::OpenContent>,
22050 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
22051 ) -> Result<ElementHandlerOutput<'de>, Error>
22052 where
22053 R: DeserializeReader,
22054 {
22055 let DeserializerOutput {
22056 artifact,
22057 event,
22058 allow_any,
22059 } = output;
22060 if artifact.is_none() {
22061 *self.state = match fallback.take() {
22062 None => ExtensionTypeContentDeserializerState::Init__,
22063 Some(ExtensionTypeContentDeserializerState::OpenContent(
22064 _,
22065 Some(deserializer),
22066 )) => ExtensionTypeContentDeserializerState::OpenContent(
22067 values,
22068 Some(deserializer),
22069 ),
22070 _ => unreachable!(),
22071 };
22072 return Ok(ElementHandlerOutput::break_(event, allow_any));
22073 }
22074 match fallback.take() {
22075 None => (),
22076 Some(ExtensionTypeContentDeserializerState::OpenContent(_, Some(deserializer))) => {
22077 let data = deserializer.finish(reader)?;
22078 ExtensionTypeContentDeserializer::store_open_content(&mut values, data)?;
22079 }
22080 Some(_) => unreachable!(),
22081 }
22082 Ok(match artifact {
22083 DeserializerArtifact::None => unreachable!(),
22084 DeserializerArtifact::Data(data) => {
22085 ExtensionTypeContentDeserializer::store_open_content(&mut values, data)?;
22086 let data = ExtensionTypeContentDeserializer::finish_state(
22087 reader,
22088 ExtensionTypeContentDeserializerState::OpenContent(values, None),
22089 )?;
22090 *self.state = ExtensionTypeContentDeserializerState::Done__(data);
22091 ElementHandlerOutput::Break { event, allow_any }
22092 }
22093 DeserializerArtifact::Deserializer(deserializer) => {
22094 *self.state = ExtensionTypeContentDeserializerState::OpenContent(
22095 values,
22096 Some(deserializer),
22097 );
22098 ElementHandlerOutput::from_event_end(event, allow_any)
22099 }
22100 })
22101 }
22102 fn handle_group<'de, R>(
22103 &mut self,
22104 reader: &R,
22105 mut values: Option<super::GroupType>,
22106 output: DeserializerOutput<'de, super::GroupType>,
22107 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
22108 ) -> Result<ElementHandlerOutput<'de>, Error>
22109 where
22110 R: DeserializeReader,
22111 {
22112 let DeserializerOutput {
22113 artifact,
22114 event,
22115 allow_any,
22116 } = output;
22117 if artifact.is_none() {
22118 *self.state = match fallback.take() {
22119 None => ExtensionTypeContentDeserializerState::Init__,
22120 Some(ExtensionTypeContentDeserializerState::Group(_, Some(deserializer))) => {
22121 ExtensionTypeContentDeserializerState::Group(values, Some(deserializer))
22122 }
22123 _ => unreachable!(),
22124 };
22125 return Ok(ElementHandlerOutput::break_(event, allow_any));
22126 }
22127 match fallback.take() {
22128 None => (),
22129 Some(ExtensionTypeContentDeserializerState::Group(_, Some(deserializer))) => {
22130 let data = deserializer.finish(reader)?;
22131 ExtensionTypeContentDeserializer::store_group(&mut values, data)?;
22132 }
22133 Some(_) => unreachable!(),
22134 }
22135 Ok(match artifact {
22136 DeserializerArtifact::None => unreachable!(),
22137 DeserializerArtifact::Data(data) => {
22138 ExtensionTypeContentDeserializer::store_group(&mut values, data)?;
22139 let data = ExtensionTypeContentDeserializer::finish_state(
22140 reader,
22141 ExtensionTypeContentDeserializerState::Group(values, None),
22142 )?;
22143 *self.state = ExtensionTypeContentDeserializerState::Done__(data);
22144 ElementHandlerOutput::Break { event, allow_any }
22145 }
22146 DeserializerArtifact::Deserializer(deserializer) => {
22147 *self.state =
22148 ExtensionTypeContentDeserializerState::Group(values, Some(deserializer));
22149 ElementHandlerOutput::from_event_end(event, allow_any)
22150 }
22151 })
22152 }
22153 fn handle_all<'de, R>(
22154 &mut self,
22155 reader: &R,
22156 mut values: Option<super::GroupType>,
22157 output: DeserializerOutput<'de, super::GroupType>,
22158 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
22159 ) -> Result<ElementHandlerOutput<'de>, Error>
22160 where
22161 R: DeserializeReader,
22162 {
22163 let DeserializerOutput {
22164 artifact,
22165 event,
22166 allow_any,
22167 } = output;
22168 if artifact.is_none() {
22169 *self.state = match fallback.take() {
22170 None => ExtensionTypeContentDeserializerState::Init__,
22171 Some(ExtensionTypeContentDeserializerState::All(_, Some(deserializer))) => {
22172 ExtensionTypeContentDeserializerState::All(values, Some(deserializer))
22173 }
22174 _ => unreachable!(),
22175 };
22176 return Ok(ElementHandlerOutput::break_(event, allow_any));
22177 }
22178 match fallback.take() {
22179 None => (),
22180 Some(ExtensionTypeContentDeserializerState::All(_, Some(deserializer))) => {
22181 let data = deserializer.finish(reader)?;
22182 ExtensionTypeContentDeserializer::store_all(&mut values, data)?;
22183 }
22184 Some(_) => unreachable!(),
22185 }
22186 Ok(match artifact {
22187 DeserializerArtifact::None => unreachable!(),
22188 DeserializerArtifact::Data(data) => {
22189 ExtensionTypeContentDeserializer::store_all(&mut values, data)?;
22190 let data = ExtensionTypeContentDeserializer::finish_state(
22191 reader,
22192 ExtensionTypeContentDeserializerState::All(values, None),
22193 )?;
22194 *self.state = ExtensionTypeContentDeserializerState::Done__(data);
22195 ElementHandlerOutput::Break { event, allow_any }
22196 }
22197 DeserializerArtifact::Deserializer(deserializer) => {
22198 *self.state =
22199 ExtensionTypeContentDeserializerState::All(values, Some(deserializer));
22200 ElementHandlerOutput::from_event_end(event, allow_any)
22201 }
22202 })
22203 }
22204 fn handle_choice<'de, R>(
22205 &mut self,
22206 reader: &R,
22207 mut values: Option<super::GroupType>,
22208 output: DeserializerOutput<'de, super::GroupType>,
22209 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
22210 ) -> Result<ElementHandlerOutput<'de>, Error>
22211 where
22212 R: DeserializeReader,
22213 {
22214 let DeserializerOutput {
22215 artifact,
22216 event,
22217 allow_any,
22218 } = output;
22219 if artifact.is_none() {
22220 *self.state = match fallback.take() {
22221 None => ExtensionTypeContentDeserializerState::Init__,
22222 Some(ExtensionTypeContentDeserializerState::Choice(_, Some(deserializer))) => {
22223 ExtensionTypeContentDeserializerState::Choice(values, Some(deserializer))
22224 }
22225 _ => unreachable!(),
22226 };
22227 return Ok(ElementHandlerOutput::break_(event, allow_any));
22228 }
22229 match fallback.take() {
22230 None => (),
22231 Some(ExtensionTypeContentDeserializerState::Choice(_, Some(deserializer))) => {
22232 let data = deserializer.finish(reader)?;
22233 ExtensionTypeContentDeserializer::store_choice(&mut values, data)?;
22234 }
22235 Some(_) => unreachable!(),
22236 }
22237 Ok(match artifact {
22238 DeserializerArtifact::None => unreachable!(),
22239 DeserializerArtifact::Data(data) => {
22240 ExtensionTypeContentDeserializer::store_choice(&mut values, data)?;
22241 let data = ExtensionTypeContentDeserializer::finish_state(
22242 reader,
22243 ExtensionTypeContentDeserializerState::Choice(values, None),
22244 )?;
22245 *self.state = ExtensionTypeContentDeserializerState::Done__(data);
22246 ElementHandlerOutput::Break { event, allow_any }
22247 }
22248 DeserializerArtifact::Deserializer(deserializer) => {
22249 *self.state =
22250 ExtensionTypeContentDeserializerState::Choice(values, Some(deserializer));
22251 ElementHandlerOutput::from_event_end(event, allow_any)
22252 }
22253 })
22254 }
22255 fn handle_sequence<'de, R>(
22256 &mut self,
22257 reader: &R,
22258 mut values: Option<super::GroupType>,
22259 output: DeserializerOutput<'de, super::GroupType>,
22260 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
22261 ) -> Result<ElementHandlerOutput<'de>, Error>
22262 where
22263 R: DeserializeReader,
22264 {
22265 let DeserializerOutput {
22266 artifact,
22267 event,
22268 allow_any,
22269 } = output;
22270 if artifact.is_none() {
22271 *self.state = match fallback.take() {
22272 None => ExtensionTypeContentDeserializerState::Init__,
22273 Some(ExtensionTypeContentDeserializerState::Sequence(
22274 _,
22275 Some(deserializer),
22276 )) => {
22277 ExtensionTypeContentDeserializerState::Sequence(values, Some(deserializer))
22278 }
22279 _ => unreachable!(),
22280 };
22281 return Ok(ElementHandlerOutput::break_(event, allow_any));
22282 }
22283 match fallback.take() {
22284 None => (),
22285 Some(ExtensionTypeContentDeserializerState::Sequence(_, Some(deserializer))) => {
22286 let data = deserializer.finish(reader)?;
22287 ExtensionTypeContentDeserializer::store_sequence(&mut values, data)?;
22288 }
22289 Some(_) => unreachable!(),
22290 }
22291 Ok(match artifact {
22292 DeserializerArtifact::None => unreachable!(),
22293 DeserializerArtifact::Data(data) => {
22294 ExtensionTypeContentDeserializer::store_sequence(&mut values, data)?;
22295 let data = ExtensionTypeContentDeserializer::finish_state(
22296 reader,
22297 ExtensionTypeContentDeserializerState::Sequence(values, None),
22298 )?;
22299 *self.state = ExtensionTypeContentDeserializerState::Done__(data);
22300 ElementHandlerOutput::Break { event, allow_any }
22301 }
22302 DeserializerArtifact::Deserializer(deserializer) => {
22303 *self.state =
22304 ExtensionTypeContentDeserializerState::Sequence(values, Some(deserializer));
22305 ElementHandlerOutput::from_event_end(event, allow_any)
22306 }
22307 })
22308 }
22309 fn handle_attribute<'de, R>(
22310 &mut self,
22311 reader: &R,
22312 mut values: Option<super::AttributeType>,
22313 output: DeserializerOutput<'de, super::AttributeType>,
22314 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
22315 ) -> Result<ElementHandlerOutput<'de>, Error>
22316 where
22317 R: DeserializeReader,
22318 {
22319 let DeserializerOutput {
22320 artifact,
22321 event,
22322 allow_any,
22323 } = output;
22324 if artifact.is_none() {
22325 *self.state = match fallback.take() {
22326 None => ExtensionTypeContentDeserializerState::Init__,
22327 Some(ExtensionTypeContentDeserializerState::Attribute(
22328 _,
22329 Some(deserializer),
22330 )) => {
22331 ExtensionTypeContentDeserializerState::Attribute(values, Some(deserializer))
22332 }
22333 _ => unreachable!(),
22334 };
22335 return Ok(ElementHandlerOutput::break_(event, allow_any));
22336 }
22337 match fallback.take() {
22338 None => (),
22339 Some(ExtensionTypeContentDeserializerState::Attribute(_, Some(deserializer))) => {
22340 let data = deserializer.finish(reader)?;
22341 ExtensionTypeContentDeserializer::store_attribute(&mut values, data)?;
22342 }
22343 Some(_) => unreachable!(),
22344 }
22345 Ok(match artifact {
22346 DeserializerArtifact::None => unreachable!(),
22347 DeserializerArtifact::Data(data) => {
22348 ExtensionTypeContentDeserializer::store_attribute(&mut values, data)?;
22349 let data = ExtensionTypeContentDeserializer::finish_state(
22350 reader,
22351 ExtensionTypeContentDeserializerState::Attribute(values, None),
22352 )?;
22353 *self.state = ExtensionTypeContentDeserializerState::Done__(data);
22354 ElementHandlerOutput::Break { event, allow_any }
22355 }
22356 DeserializerArtifact::Deserializer(deserializer) => {
22357 *self.state = ExtensionTypeContentDeserializerState::Attribute(
22358 values,
22359 Some(deserializer),
22360 );
22361 ElementHandlerOutput::from_event_end(event, allow_any)
22362 }
22363 })
22364 }
22365 fn handle_attribute_group<'de, R>(
22366 &mut self,
22367 reader: &R,
22368 mut values: Option<super::AttributeGroupType>,
22369 output: DeserializerOutput<'de, super::AttributeGroupType>,
22370 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
22371 ) -> Result<ElementHandlerOutput<'de>, Error>
22372 where
22373 R: DeserializeReader,
22374 {
22375 let DeserializerOutput {
22376 artifact,
22377 event,
22378 allow_any,
22379 } = output;
22380 if artifact.is_none() {
22381 *self.state = match fallback.take() {
22382 None => ExtensionTypeContentDeserializerState::Init__,
22383 Some(ExtensionTypeContentDeserializerState::AttributeGroup(
22384 _,
22385 Some(deserializer),
22386 )) => ExtensionTypeContentDeserializerState::AttributeGroup(
22387 values,
22388 Some(deserializer),
22389 ),
22390 _ => unreachable!(),
22391 };
22392 return Ok(ElementHandlerOutput::break_(event, allow_any));
22393 }
22394 match fallback.take() {
22395 None => (),
22396 Some(ExtensionTypeContentDeserializerState::AttributeGroup(
22397 _,
22398 Some(deserializer),
22399 )) => {
22400 let data = deserializer.finish(reader)?;
22401 ExtensionTypeContentDeserializer::store_attribute_group(&mut values, data)?;
22402 }
22403 Some(_) => unreachable!(),
22404 }
22405 Ok(match artifact {
22406 DeserializerArtifact::None => unreachable!(),
22407 DeserializerArtifact::Data(data) => {
22408 ExtensionTypeContentDeserializer::store_attribute_group(&mut values, data)?;
22409 let data = ExtensionTypeContentDeserializer::finish_state(
22410 reader,
22411 ExtensionTypeContentDeserializerState::AttributeGroup(values, None),
22412 )?;
22413 *self.state = ExtensionTypeContentDeserializerState::Done__(data);
22414 ElementHandlerOutput::Break { event, allow_any }
22415 }
22416 DeserializerArtifact::Deserializer(deserializer) => {
22417 *self.state = ExtensionTypeContentDeserializerState::AttributeGroup(
22418 values,
22419 Some(deserializer),
22420 );
22421 ElementHandlerOutput::from_event_end(event, allow_any)
22422 }
22423 })
22424 }
22425 fn handle_any_attribute<'de, R>(
22426 &mut self,
22427 reader: &R,
22428 mut values: Option<super::AnyAttribute>,
22429 output: DeserializerOutput<'de, super::AnyAttribute>,
22430 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
22431 ) -> Result<ElementHandlerOutput<'de>, Error>
22432 where
22433 R: DeserializeReader,
22434 {
22435 let DeserializerOutput {
22436 artifact,
22437 event,
22438 allow_any,
22439 } = output;
22440 if artifact.is_none() {
22441 *self.state = match fallback.take() {
22442 None => ExtensionTypeContentDeserializerState::Init__,
22443 Some(ExtensionTypeContentDeserializerState::AnyAttribute(
22444 _,
22445 Some(deserializer),
22446 )) => ExtensionTypeContentDeserializerState::AnyAttribute(
22447 values,
22448 Some(deserializer),
22449 ),
22450 _ => unreachable!(),
22451 };
22452 return Ok(ElementHandlerOutput::break_(event, allow_any));
22453 }
22454 match fallback.take() {
22455 None => (),
22456 Some(ExtensionTypeContentDeserializerState::AnyAttribute(
22457 _,
22458 Some(deserializer),
22459 )) => {
22460 let data = deserializer.finish(reader)?;
22461 ExtensionTypeContentDeserializer::store_any_attribute(&mut values, data)?;
22462 }
22463 Some(_) => unreachable!(),
22464 }
22465 Ok(match artifact {
22466 DeserializerArtifact::None => unreachable!(),
22467 DeserializerArtifact::Data(data) => {
22468 ExtensionTypeContentDeserializer::store_any_attribute(&mut values, data)?;
22469 let data = ExtensionTypeContentDeserializer::finish_state(
22470 reader,
22471 ExtensionTypeContentDeserializerState::AnyAttribute(values, None),
22472 )?;
22473 *self.state = ExtensionTypeContentDeserializerState::Done__(data);
22474 ElementHandlerOutput::Break { event, allow_any }
22475 }
22476 DeserializerArtifact::Deserializer(deserializer) => {
22477 *self.state = ExtensionTypeContentDeserializerState::AnyAttribute(
22478 values,
22479 Some(deserializer),
22480 );
22481 ElementHandlerOutput::from_event_end(event, allow_any)
22482 }
22483 })
22484 }
22485 fn handle_assert<'de, R>(
22486 &mut self,
22487 reader: &R,
22488 mut values: Option<super::AssertionType>,
22489 output: DeserializerOutput<'de, super::AssertionType>,
22490 fallback: &mut Option<ExtensionTypeContentDeserializerState>,
22491 ) -> Result<ElementHandlerOutput<'de>, Error>
22492 where
22493 R: DeserializeReader,
22494 {
22495 let DeserializerOutput {
22496 artifact,
22497 event,
22498 allow_any,
22499 } = output;
22500 if artifact.is_none() {
22501 *self.state = match fallback.take() {
22502 None => ExtensionTypeContentDeserializerState::Init__,
22503 Some(ExtensionTypeContentDeserializerState::Assert(_, Some(deserializer))) => {
22504 ExtensionTypeContentDeserializerState::Assert(values, Some(deserializer))
22505 }
22506 _ => unreachable!(),
22507 };
22508 return Ok(ElementHandlerOutput::break_(event, allow_any));
22509 }
22510 match fallback.take() {
22511 None => (),
22512 Some(ExtensionTypeContentDeserializerState::Assert(_, Some(deserializer))) => {
22513 let data = deserializer.finish(reader)?;
22514 ExtensionTypeContentDeserializer::store_assert(&mut values, data)?;
22515 }
22516 Some(_) => unreachable!(),
22517 }
22518 Ok(match artifact {
22519 DeserializerArtifact::None => unreachable!(),
22520 DeserializerArtifact::Data(data) => {
22521 ExtensionTypeContentDeserializer::store_assert(&mut values, data)?;
22522 let data = ExtensionTypeContentDeserializer::finish_state(
22523 reader,
22524 ExtensionTypeContentDeserializerState::Assert(values, None),
22525 )?;
22526 *self.state = ExtensionTypeContentDeserializerState::Done__(data);
22527 ElementHandlerOutput::Break { event, allow_any }
22528 }
22529 DeserializerArtifact::Deserializer(deserializer) => {
22530 *self.state =
22531 ExtensionTypeContentDeserializerState::Assert(values, Some(deserializer));
22532 ElementHandlerOutput::from_event_end(event, allow_any)
22533 }
22534 })
22535 }
22536 }
22537 impl<'de> Deserializer<'de, super::ExtensionTypeContent> for Box<ExtensionTypeContentDeserializer> {
22538 fn init<R>(
22539 reader: &R,
22540 event: Event<'de>,
22541 ) -> DeserializerResult<'de, super::ExtensionTypeContent>
22542 where
22543 R: DeserializeReader,
22544 {
22545 let deserializer = Box::new(ExtensionTypeContentDeserializer {
22546 state: Box::new(ExtensionTypeContentDeserializerState::Init__),
22547 });
22548 let mut output = deserializer.next(reader, event)?;
22549 output.artifact = match output.artifact {
22550 DeserializerArtifact::Deserializer(x)
22551 if matches!(&*x.state, ExtensionTypeContentDeserializerState::Init__) =>
22552 {
22553 DeserializerArtifact::None
22554 }
22555 artifact => artifact,
22556 };
22557 Ok(output)
22558 }
22559 fn next<R>(
22560 mut self,
22561 reader: &R,
22562 event: Event<'de>,
22563 ) -> DeserializerResult<'de, super::ExtensionTypeContent>
22564 where
22565 R: DeserializeReader,
22566 {
22567 use ExtensionTypeContentDeserializerState as S;
22568 let mut event = event;
22569 let mut fallback = None;
22570 let (event, allow_any) = loop {
22571 let state = replace(&mut *self.state, S::Unknown__);
22572 event = match (state, event) {
22573 (S::Annotation(values, Some(deserializer)), event) => {
22574 let output = deserializer.next(reader, event)?;
22575 match self.handle_annotation(reader, values, output, &mut fallback)? {
22576 ElementHandlerOutput::Break { event, allow_any } => {
22577 break (event, allow_any)
22578 }
22579 ElementHandlerOutput::Continue { event, .. } => event,
22580 }
22581 }
22582 (S::OpenContent(values, Some(deserializer)), event) => {
22583 let output = deserializer.next(reader, event)?;
22584 match self.handle_open_content(reader, 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::Group(values, Some(deserializer)), event) => {
22592 let output = deserializer.next(reader, event)?;
22593 match self.handle_group(reader, values, output, &mut fallback)? {
22594 ElementHandlerOutput::Break { event, allow_any } => {
22595 break (event, allow_any)
22596 }
22597 ElementHandlerOutput::Continue { event, .. } => event,
22598 }
22599 }
22600 (S::All(values, Some(deserializer)), event) => {
22601 let output = deserializer.next(reader, event)?;
22602 match self.handle_all(reader, values, output, &mut fallback)? {
22603 ElementHandlerOutput::Break { event, allow_any } => {
22604 break (event, allow_any)
22605 }
22606 ElementHandlerOutput::Continue { event, .. } => event,
22607 }
22608 }
22609 (S::Choice(values, Some(deserializer)), event) => {
22610 let output = deserializer.next(reader, event)?;
22611 match self.handle_choice(reader, values, output, &mut fallback)? {
22612 ElementHandlerOutput::Break { event, allow_any } => {
22613 break (event, allow_any)
22614 }
22615 ElementHandlerOutput::Continue { event, .. } => event,
22616 }
22617 }
22618 (S::Sequence(values, Some(deserializer)), event) => {
22619 let output = deserializer.next(reader, event)?;
22620 match self.handle_sequence(reader, values, output, &mut fallback)? {
22621 ElementHandlerOutput::Break { event, allow_any } => {
22622 break (event, allow_any)
22623 }
22624 ElementHandlerOutput::Continue { event, .. } => event,
22625 }
22626 }
22627 (S::Attribute(values, Some(deserializer)), event) => {
22628 let output = deserializer.next(reader, event)?;
22629 match self.handle_attribute(reader, values, output, &mut fallback)? {
22630 ElementHandlerOutput::Break { event, allow_any } => {
22631 break (event, allow_any)
22632 }
22633 ElementHandlerOutput::Continue { event, .. } => event,
22634 }
22635 }
22636 (S::AttributeGroup(values, Some(deserializer)), event) => {
22637 let output = deserializer.next(reader, event)?;
22638 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
22639 ElementHandlerOutput::Break { event, allow_any } => {
22640 break (event, allow_any)
22641 }
22642 ElementHandlerOutput::Continue { event, .. } => event,
22643 }
22644 }
22645 (S::AnyAttribute(values, Some(deserializer)), event) => {
22646 let output = deserializer.next(reader, event)?;
22647 match self.handle_any_attribute(reader, values, output, &mut fallback)? {
22648 ElementHandlerOutput::Break { event, allow_any } => {
22649 break (event, allow_any)
22650 }
22651 ElementHandlerOutput::Continue { event, .. } => event,
22652 }
22653 }
22654 (S::Assert(values, Some(deserializer)), event) => {
22655 let output = deserializer.next(reader, event)?;
22656 match self.handle_assert(reader, values, output, &mut fallback)? {
22657 ElementHandlerOutput::Break { event, allow_any } => {
22658 break (event, allow_any)
22659 }
22660 ElementHandlerOutput::Continue { event, .. } => event,
22661 }
22662 }
22663 (state, event @ Event::End(_)) => {
22664 return Ok(DeserializerOutput {
22665 artifact: DeserializerArtifact::Data(
22666 ExtensionTypeContentDeserializer::finish_state(reader, state)?,
22667 ),
22668 event: DeserializerEvent::Continue(event),
22669 allow_any: false,
22670 });
22671 }
22672 (S::Init__, event) => match self.find_suitable(reader, event, &mut fallback)? {
22673 ElementHandlerOutput::Break { event, allow_any } => {
22674 break (event, allow_any)
22675 }
22676 ElementHandlerOutput::Continue { event, .. } => event,
22677 },
22678 (S::Annotation(values, None), event) => {
22679 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
22680 reader, event,
22681 )?;
22682 match self.handle_annotation(reader, values, output, &mut fallback)? {
22683 ElementHandlerOutput::Break { event, allow_any } => {
22684 break (event, allow_any)
22685 }
22686 ElementHandlerOutput::Continue { event, .. } => event,
22687 }
22688 }
22689 (S::OpenContent(values, None), event) => {
22690 let output = <super::OpenContent as WithDeserializer>::Deserializer::init(
22691 reader, event,
22692 )?;
22693 match self.handle_open_content(reader, values, output, &mut fallback)? {
22694 ElementHandlerOutput::Break { event, allow_any } => {
22695 break (event, allow_any)
22696 }
22697 ElementHandlerOutput::Continue { event, .. } => event,
22698 }
22699 }
22700 (S::Group(values, None), event) => {
22701 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
22702 reader, event,
22703 )?;
22704 match self.handle_group(reader, values, output, &mut fallback)? {
22705 ElementHandlerOutput::Break { event, allow_any } => {
22706 break (event, allow_any)
22707 }
22708 ElementHandlerOutput::Continue { event, .. } => event,
22709 }
22710 }
22711 (S::All(values, None), event) => {
22712 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
22713 reader, event,
22714 )?;
22715 match self.handle_all(reader, values, output, &mut fallback)? {
22716 ElementHandlerOutput::Break { event, allow_any } => {
22717 break (event, allow_any)
22718 }
22719 ElementHandlerOutput::Continue { event, .. } => event,
22720 }
22721 }
22722 (S::Choice(values, None), event) => {
22723 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
22724 reader, event,
22725 )?;
22726 match self.handle_choice(reader, values, output, &mut fallback)? {
22727 ElementHandlerOutput::Break { event, allow_any } => {
22728 break (event, allow_any)
22729 }
22730 ElementHandlerOutput::Continue { event, .. } => event,
22731 }
22732 }
22733 (S::Sequence(values, None), event) => {
22734 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
22735 reader, event,
22736 )?;
22737 match self.handle_sequence(reader, values, output, &mut fallback)? {
22738 ElementHandlerOutput::Break { event, allow_any } => {
22739 break (event, allow_any)
22740 }
22741 ElementHandlerOutput::Continue { event, .. } => event,
22742 }
22743 }
22744 (S::Attribute(values, None), event) => {
22745 let output =
22746 <super::AttributeType as WithDeserializer>::Deserializer::init(
22747 reader, event,
22748 )?;
22749 match self.handle_attribute(reader, values, output, &mut fallback)? {
22750 ElementHandlerOutput::Break { event, allow_any } => {
22751 break (event, allow_any)
22752 }
22753 ElementHandlerOutput::Continue { event, .. } => event,
22754 }
22755 }
22756 (S::AttributeGroup(values, None), event) => {
22757 let output =
22758 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
22759 reader, event,
22760 )?;
22761 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
22762 ElementHandlerOutput::Break { event, allow_any } => {
22763 break (event, allow_any)
22764 }
22765 ElementHandlerOutput::Continue { event, .. } => event,
22766 }
22767 }
22768 (S::AnyAttribute(values, None), event) => {
22769 let output = <super::AnyAttribute as WithDeserializer>::Deserializer::init(
22770 reader, event,
22771 )?;
22772 match self.handle_any_attribute(reader, values, output, &mut fallback)? {
22773 ElementHandlerOutput::Break { event, allow_any } => {
22774 break (event, allow_any)
22775 }
22776 ElementHandlerOutput::Continue { event, .. } => event,
22777 }
22778 }
22779 (S::Assert(values, None), event) => {
22780 let output =
22781 <super::AssertionType as WithDeserializer>::Deserializer::init(
22782 reader, event,
22783 )?;
22784 match self.handle_assert(reader, values, output, &mut fallback)? {
22785 ElementHandlerOutput::Break { event, allow_any } => {
22786 break (event, allow_any)
22787 }
22788 ElementHandlerOutput::Continue { event, .. } => event,
22789 }
22790 }
22791 (s @ S::Done__(_), event) => {
22792 *self.state = s;
22793 break (DeserializerEvent::Continue(event), false);
22794 }
22795 (S::Unknown__, _) => unreachable!(),
22796 }
22797 };
22798 let artifact = if matches!(&*self.state, S::Done__(_)) {
22799 DeserializerArtifact::Data(self.finish(reader)?)
22800 } else {
22801 DeserializerArtifact::Deserializer(self)
22802 };
22803 Ok(DeserializerOutput {
22804 artifact,
22805 event,
22806 allow_any,
22807 })
22808 }
22809 fn finish<R>(self, reader: &R) -> Result<super::ExtensionTypeContent, Error>
22810 where
22811 R: DeserializeReader,
22812 {
22813 ExtensionTypeContentDeserializer::finish_state(reader, *self.state)
22814 }
22815 }
22816 #[derive(Debug)]
22817 pub struct FieldDeserializer {
22818 id: Option<String>,
22819 xpath: String,
22820 xpath_default_namespace: Option<super::XpathDefaultNamespaceType>,
22821 annotation: Option<super::Annotation>,
22822 state: Box<FieldDeserializerState>,
22823 }
22824 #[derive(Debug)]
22825 enum FieldDeserializerState {
22826 Init__,
22827 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
22828 Done__,
22829 Unknown__,
22830 }
22831 impl FieldDeserializer {
22832 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
22833 where
22834 R: DeserializeReader,
22835 {
22836 let mut id: Option<String> = None;
22837 let mut xpath: Option<String> = None;
22838 let mut xpath_default_namespace: Option<super::XpathDefaultNamespaceType> = None;
22839 for attrib in filter_xmlns_attributes(bytes_start) {
22840 let attrib = attrib?;
22841 if matches!(
22842 reader.resolve_local_name(attrib.key, &super::NS_XS),
22843 Some(b"id")
22844 ) {
22845 reader.read_attrib(&mut id, b"id", &attrib.value)?;
22846 } else if matches!(
22847 reader.resolve_local_name(attrib.key, &super::NS_XS),
22848 Some(b"xpath")
22849 ) {
22850 reader.read_attrib(&mut xpath, b"xpath", &attrib.value)?;
22851 } else if matches!(
22852 reader.resolve_local_name(attrib.key, &super::NS_XS),
22853 Some(b"xpathDefaultNamespace")
22854 ) {
22855 reader.read_attrib(
22856 &mut xpath_default_namespace,
22857 b"xpathDefaultNamespace",
22858 &attrib.value,
22859 )?;
22860 }
22861 }
22862 Ok(Box::new(Self {
22863 id: id,
22864 xpath: xpath
22865 .ok_or_else(|| reader.map_error(ErrorKind::MissingAttribute("xpath".into())))?,
22866 xpath_default_namespace: xpath_default_namespace,
22867 annotation: None,
22868 state: Box::new(FieldDeserializerState::Init__),
22869 }))
22870 }
22871 fn finish_state<R>(
22872 &mut self,
22873 reader: &R,
22874 state: FieldDeserializerState,
22875 ) -> Result<(), Error>
22876 where
22877 R: DeserializeReader,
22878 {
22879 use FieldDeserializerState as S;
22880 match state {
22881 S::Annotation(Some(deserializer)) => {
22882 self.store_annotation(deserializer.finish(reader)?)?
22883 }
22884 _ => (),
22885 }
22886 Ok(())
22887 }
22888 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
22889 if self.annotation.is_some() {
22890 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
22891 b"annotation",
22892 )))?;
22893 }
22894 self.annotation = Some(value);
22895 Ok(())
22896 }
22897 fn handle_annotation<'de, R>(
22898 &mut self,
22899 reader: &R,
22900 output: DeserializerOutput<'de, super::Annotation>,
22901 fallback: &mut Option<FieldDeserializerState>,
22902 ) -> Result<ElementHandlerOutput<'de>, Error>
22903 where
22904 R: DeserializeReader,
22905 {
22906 let DeserializerOutput {
22907 artifact,
22908 event,
22909 allow_any,
22910 } = output;
22911 if artifact.is_none() {
22912 fallback.get_or_insert(FieldDeserializerState::Annotation(None));
22913 *self.state = FieldDeserializerState::Done__;
22914 return Ok(ElementHandlerOutput::from_event(event, allow_any));
22915 }
22916 if let Some(fallback) = fallback.take() {
22917 self.finish_state(reader, fallback)?;
22918 }
22919 Ok(match artifact {
22920 DeserializerArtifact::None => unreachable!(),
22921 DeserializerArtifact::Data(data) => {
22922 self.store_annotation(data)?;
22923 *self.state = FieldDeserializerState::Done__;
22924 ElementHandlerOutput::from_event(event, allow_any)
22925 }
22926 DeserializerArtifact::Deserializer(deserializer) => {
22927 let ret = ElementHandlerOutput::from_event(event, allow_any);
22928 match &ret {
22929 ElementHandlerOutput::Continue { .. } => {
22930 fallback.get_or_insert(FieldDeserializerState::Annotation(Some(
22931 deserializer,
22932 )));
22933 *self.state = FieldDeserializerState::Done__;
22934 }
22935 ElementHandlerOutput::Break { .. } => {
22936 *self.state = FieldDeserializerState::Annotation(Some(deserializer));
22937 }
22938 }
22939 ret
22940 }
22941 })
22942 }
22943 }
22944 impl<'de> Deserializer<'de, super::Field> for Box<FieldDeserializer> {
22945 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Field>
22946 where
22947 R: DeserializeReader,
22948 {
22949 reader.init_deserializer_from_start_event(event, FieldDeserializer::from_bytes_start)
22950 }
22951 fn next<R>(mut self, reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Field>
22952 where
22953 R: DeserializeReader,
22954 {
22955 use FieldDeserializerState as S;
22956 let mut event = event;
22957 let mut fallback = None;
22958 let mut allow_any_element = false;
22959 let (event, allow_any) = loop {
22960 let state = replace(&mut *self.state, S::Unknown__);
22961 event = match (state, event) {
22962 (S::Annotation(Some(deserializer)), event) => {
22963 let output = deserializer.next(reader, event)?;
22964 match self.handle_annotation(reader, output, &mut fallback)? {
22965 ElementHandlerOutput::Continue { event, allow_any } => {
22966 allow_any_element = allow_any_element || allow_any;
22967 event
22968 }
22969 ElementHandlerOutput::Break { event, allow_any } => {
22970 break (event, allow_any)
22971 }
22972 }
22973 }
22974 (_, Event::End(_)) => {
22975 if let Some(fallback) = fallback.take() {
22976 self.finish_state(reader, fallback)?;
22977 }
22978 return Ok(DeserializerOutput {
22979 artifact: DeserializerArtifact::Data(self.finish(reader)?),
22980 event: DeserializerEvent::None,
22981 allow_any: false,
22982 });
22983 }
22984 (S::Init__, event) => {
22985 fallback.get_or_insert(S::Init__);
22986 *self.state = FieldDeserializerState::Annotation(None);
22987 event
22988 }
22989 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
22990 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
22991 let output =
22992 <super::Annotation as WithDeserializer>::Deserializer::init(
22993 reader, event,
22994 )?;
22995 match self.handle_annotation(reader, output, &mut fallback)? {
22996 ElementHandlerOutput::Continue { event, allow_any } => {
22997 allow_any_element = allow_any_element || allow_any;
22998 event
22999 }
23000 ElementHandlerOutput::Break { event, allow_any } => {
23001 break (event, allow_any)
23002 }
23003 }
23004 } else {
23005 *self.state = S::Done__;
23006 allow_any_element = true;
23007 fallback.get_or_insert(S::Annotation(None));
23008 event
23009 }
23010 }
23011 (S::Done__, event) => {
23012 fallback.get_or_insert(S::Done__);
23013 break (DeserializerEvent::Continue(event), allow_any_element);
23014 }
23015 (S::Unknown__, _) => unreachable!(),
23016 (state, event) => {
23017 *self.state = state;
23018 break (DeserializerEvent::Break(event), false);
23019 }
23020 }
23021 };
23022 if let Some(fallback) = fallback {
23023 *self.state = fallback;
23024 }
23025 Ok(DeserializerOutput {
23026 artifact: DeserializerArtifact::Deserializer(self),
23027 event,
23028 allow_any,
23029 })
23030 }
23031 fn finish<R>(mut self, reader: &R) -> Result<super::Field, Error>
23032 where
23033 R: DeserializeReader,
23034 {
23035 let state = replace(&mut *self.state, FieldDeserializerState::Unknown__);
23036 self.finish_state(reader, state)?;
23037 Ok(super::Field {
23038 id: self.id,
23039 xpath: self.xpath,
23040 xpath_default_namespace: self.xpath_default_namespace,
23041 annotation: self.annotation,
23042 })
23043 }
23044 }
23045 #[derive(Debug)]
23046 pub struct FacetTypeDeserializer {
23047 id: Option<String>,
23048 value: String,
23049 fixed: bool,
23050 annotation: Option<super::Annotation>,
23051 state: Box<FacetTypeDeserializerState>,
23052 }
23053 #[derive(Debug)]
23054 enum FacetTypeDeserializerState {
23055 Init__,
23056 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
23057 Done__,
23058 Unknown__,
23059 }
23060 impl FacetTypeDeserializer {
23061 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Box<Self>, Error>
23062 where
23063 R: DeserializeReader,
23064 {
23065 let mut id: Option<String> = None;
23066 let mut value: Option<String> = None;
23067 let mut fixed: Option<bool> = None;
23068 for attrib in filter_xmlns_attributes(bytes_start) {
23069 let attrib = attrib?;
23070 if matches!(
23071 reader.resolve_local_name(attrib.key, &super::NS_XS),
23072 Some(b"id")
23073 ) {
23074 reader.read_attrib(&mut id, b"id", &attrib.value)?;
23075 } else if matches!(
23076 reader.resolve_local_name(attrib.key, &super::NS_XS),
23077 Some(b"value")
23078 ) {
23079 reader.read_attrib(&mut value, b"value", &attrib.value)?;
23080 } else if matches!(
23081 reader.resolve_local_name(attrib.key, &super::NS_XS),
23082 Some(b"fixed")
23083 ) {
23084 reader.read_attrib(&mut fixed, b"fixed", &attrib.value)?;
23085 }
23086 }
23087 Ok(Box::new(Self {
23088 id: id,
23089 value: value
23090 .ok_or_else(|| reader.map_error(ErrorKind::MissingAttribute("value".into())))?,
23091 fixed: fixed.unwrap_or_else(super::FacetType::default_fixed),
23092 annotation: None,
23093 state: Box::new(FacetTypeDeserializerState::Init__),
23094 }))
23095 }
23096 fn finish_state<R>(
23097 &mut self,
23098 reader: &R,
23099 state: FacetTypeDeserializerState,
23100 ) -> Result<(), Error>
23101 where
23102 R: DeserializeReader,
23103 {
23104 use FacetTypeDeserializerState as S;
23105 match state {
23106 S::Annotation(Some(deserializer)) => {
23107 self.store_annotation(deserializer.finish(reader)?)?
23108 }
23109 _ => (),
23110 }
23111 Ok(())
23112 }
23113 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
23114 if self.annotation.is_some() {
23115 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
23116 b"annotation",
23117 )))?;
23118 }
23119 self.annotation = Some(value);
23120 Ok(())
23121 }
23122 fn handle_annotation<'de, R>(
23123 &mut self,
23124 reader: &R,
23125 output: DeserializerOutput<'de, super::Annotation>,
23126 fallback: &mut Option<FacetTypeDeserializerState>,
23127 ) -> Result<ElementHandlerOutput<'de>, Error>
23128 where
23129 R: DeserializeReader,
23130 {
23131 let DeserializerOutput {
23132 artifact,
23133 event,
23134 allow_any,
23135 } = output;
23136 if artifact.is_none() {
23137 fallback.get_or_insert(FacetTypeDeserializerState::Annotation(None));
23138 *self.state = FacetTypeDeserializerState::Done__;
23139 return Ok(ElementHandlerOutput::from_event(event, allow_any));
23140 }
23141 if let Some(fallback) = fallback.take() {
23142 self.finish_state(reader, fallback)?;
23143 }
23144 Ok(match artifact {
23145 DeserializerArtifact::None => unreachable!(),
23146 DeserializerArtifact::Data(data) => {
23147 self.store_annotation(data)?;
23148 *self.state = FacetTypeDeserializerState::Done__;
23149 ElementHandlerOutput::from_event(event, allow_any)
23150 }
23151 DeserializerArtifact::Deserializer(deserializer) => {
23152 let ret = ElementHandlerOutput::from_event(event, allow_any);
23153 match &ret {
23154 ElementHandlerOutput::Continue { .. } => {
23155 fallback.get_or_insert(FacetTypeDeserializerState::Annotation(Some(
23156 deserializer,
23157 )));
23158 *self.state = FacetTypeDeserializerState::Done__;
23159 }
23160 ElementHandlerOutput::Break { .. } => {
23161 *self.state =
23162 FacetTypeDeserializerState::Annotation(Some(deserializer));
23163 }
23164 }
23165 ret
23166 }
23167 })
23168 }
23169 }
23170 impl<'de> Deserializer<'de, super::FacetType> for Box<FacetTypeDeserializer> {
23171 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::FacetType>
23172 where
23173 R: DeserializeReader,
23174 {
23175 reader
23176 .init_deserializer_from_start_event(event, FacetTypeDeserializer::from_bytes_start)
23177 }
23178 fn next<R>(
23179 mut self,
23180 reader: &R,
23181 event: Event<'de>,
23182 ) -> DeserializerResult<'de, super::FacetType>
23183 where
23184 R: DeserializeReader,
23185 {
23186 use FacetTypeDeserializerState as S;
23187 let mut event = event;
23188 let mut fallback = None;
23189 let mut allow_any_element = false;
23190 let (event, allow_any) = loop {
23191 let state = replace(&mut *self.state, S::Unknown__);
23192 event = match (state, event) {
23193 (S::Annotation(Some(deserializer)), event) => {
23194 let output = deserializer.next(reader, event)?;
23195 match self.handle_annotation(reader, output, &mut fallback)? {
23196 ElementHandlerOutput::Continue { event, allow_any } => {
23197 allow_any_element = allow_any_element || allow_any;
23198 event
23199 }
23200 ElementHandlerOutput::Break { event, allow_any } => {
23201 break (event, allow_any)
23202 }
23203 }
23204 }
23205 (_, Event::End(_)) => {
23206 if let Some(fallback) = fallback.take() {
23207 self.finish_state(reader, fallback)?;
23208 }
23209 return Ok(DeserializerOutput {
23210 artifact: DeserializerArtifact::Data(self.finish(reader)?),
23211 event: DeserializerEvent::None,
23212 allow_any: false,
23213 });
23214 }
23215 (S::Init__, event) => {
23216 fallback.get_or_insert(S::Init__);
23217 *self.state = FacetTypeDeserializerState::Annotation(None);
23218 event
23219 }
23220 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
23221 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
23222 let output =
23223 <super::Annotation as WithDeserializer>::Deserializer::init(
23224 reader, event,
23225 )?;
23226 match self.handle_annotation(reader, output, &mut fallback)? {
23227 ElementHandlerOutput::Continue { event, allow_any } => {
23228 allow_any_element = allow_any_element || allow_any;
23229 event
23230 }
23231 ElementHandlerOutput::Break { event, allow_any } => {
23232 break (event, allow_any)
23233 }
23234 }
23235 } else {
23236 *self.state = S::Done__;
23237 allow_any_element = true;
23238 fallback.get_or_insert(S::Annotation(None));
23239 event
23240 }
23241 }
23242 (S::Done__, event) => {
23243 fallback.get_or_insert(S::Done__);
23244 break (DeserializerEvent::Continue(event), allow_any_element);
23245 }
23246 (S::Unknown__, _) => unreachable!(),
23247 (state, event) => {
23248 *self.state = state;
23249 break (DeserializerEvent::Break(event), false);
23250 }
23251 }
23252 };
23253 if let Some(fallback) = fallback {
23254 *self.state = fallback;
23255 }
23256 Ok(DeserializerOutput {
23257 artifact: DeserializerArtifact::Deserializer(self),
23258 event,
23259 allow_any,
23260 })
23261 }
23262 fn finish<R>(mut self, reader: &R) -> Result<super::FacetType, Error>
23263 where
23264 R: DeserializeReader,
23265 {
23266 let state = replace(&mut *self.state, FacetTypeDeserializerState::Unknown__);
23267 self.finish_state(reader, state)?;
23268 Ok(super::FacetType {
23269 id: self.id,
23270 value: self.value,
23271 fixed: self.fixed,
23272 annotation: self.annotation,
23273 })
23274 }
23275 }
23276}