1pub const NS_XS: Namespace = Namespace::new_const(b"http://www.w3.org/2001/XMLSchema");
2pub const NS_XML: Namespace = Namespace::new_const(b"http://www.w3.org/XML/1998/namespace");
3use crate::{
4 quick_xml::{
5 DeserializeBytes, DeserializeReader, Error, ErrorKind, RawByteStr, WithDeserializer,
6 },
7 schema::Namespace,
8};
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 = quick_xml_deserialize::SchemaDeserializer;
63}
64impl WithDeserializer for SchemaContent {
65 type Deserializer = 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 = 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 = 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 = quick_xml_deserialize::RedefineDeserializer;
205}
206impl WithDeserializer for RedefineContent {
207 type Deserializer = 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 = quick_xml_deserialize::OverrideDeserializer;
228}
229impl WithDeserializer for OverrideContent {
230 type Deserializer = 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 = quick_xml_deserialize::AnnotationDeserializer;
244}
245impl WithDeserializer for AnnotationContent {
246 type Deserializer = 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 = 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 = quick_xml_deserialize::SimpleBaseTypeDeserializer;
285}
286impl WithDeserializer for SimpleBaseTypeContent {
287 type Deserializer = 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 = quick_xml_deserialize::ComplexBaseTypeDeserializer;
327}
328impl WithDeserializer for ComplexBaseTypeContent {
329 type Deserializer = 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 = quick_xml_deserialize::GroupTypeDeserializer;
362}
363impl WithDeserializer for GroupTypeContent {
364 type Deserializer = 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 = quick_xml_deserialize::AttributeGroupTypeDeserializer;
382}
383impl WithDeserializer for AttributeGroupTypeContent {
384 type Deserializer = 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<ElementSubstitutionGroupType>,
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 = quick_xml_deserialize::ElementTypeDeserializer;
431}
432impl WithDeserializer for ElementTypeContent {
433 type Deserializer = 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 = 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 = 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 = 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 = 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 = 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 = quick_xml_deserialize::RestrictionDeserializer;
591}
592impl WithDeserializer for RestrictionContent {
593 type Deserializer = 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 = quick_xml_deserialize::ListDeserializer;
604}
605#[derive(Debug, Clone, Eq, PartialEq)]
606pub struct Union {
607 pub id: Option<String>,
608 pub member_types: Option<ElementSubstitutionGroupType>,
609 pub annotation: Option<Annotation>,
610 pub simple_type: Vec<SimpleBaseType>,
611}
612impl WithDeserializer for Union {
613 type Deserializer = 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 = quick_xml_deserialize::SimpleContentDeserializer;
646}
647impl WithDeserializer for SimpleContentContent {
648 type Deserializer = 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 = quick_xml_deserialize::ComplexContentDeserializer;
664}
665impl WithDeserializer for ComplexContentContent {
666 type Deserializer = 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 = 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 = 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 = 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 = quick_xml_deserialize::AnyDeserializer;
739}
740#[derive(Debug, Clone, Eq, PartialEq, Default)]
741pub struct ElementSubstitutionGroupType(pub Vec<QName>);
742impl DeserializeBytes for ElementSubstitutionGroupType {
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 = quick_xml_deserialize::AltTypeDeserializer;
771}
772impl WithDeserializer for AltTypeContent {
773 type Deserializer = 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 = quick_xml_deserialize::KeybaseTypeDeserializer;
790}
791impl WithDeserializer for KeybaseTypeContent {
792 type Deserializer = 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 = quick_xml_deserialize::KeyrefDeserializer;
810}
811impl WithDeserializer for KeyrefContent {
812 type Deserializer = 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 = 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 = quick_xml_deserialize::RestrictionTypeDeserializer;
960}
961impl WithDeserializer for RestrictionTypeContent {
962 type Deserializer = 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 = quick_xml_deserialize::ExtensionTypeDeserializer;
985}
986impl WithDeserializer for ExtensionTypeContent {
987 type Deserializer = 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 = 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 = 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<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(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 ret = ElementHandlerOutput::from_event(event, allow_any);
1333 match &ret {
1334 ElementHandlerOutput::Continue { .. } => {
1335 fallback
1336 .get_or_insert(SchemaDeserializerState::Content__(deserializer));
1337 *self.state = SchemaDeserializerState::Next__;
1338 }
1339 ElementHandlerOutput::Break { .. } => {
1340 *self.state = SchemaDeserializerState::Content__(deserializer);
1341 }
1342 }
1343 ret
1344 }
1345 })
1346 }
1347 }
1348 impl<'de> Deserializer<'de, super::Schema> for SchemaDeserializer {
1349 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Schema>
1350 where
1351 R: DeserializeReader,
1352 {
1353 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
1354 }
1355 fn next<R>(
1356 mut self,
1357 reader: &R,
1358 event: Event<'de>,
1359 ) -> DeserializerResult<'de, super::Schema>
1360 where
1361 R: DeserializeReader,
1362 {
1363 use SchemaDeserializerState as S;
1364 let mut event = event;
1365 let mut fallback = None;
1366 let (event, allow_any) = loop {
1367 let state = replace(&mut *self.state, S::Unknown__);
1368 event = match (state, event) {
1369 (S::Content__(deserializer), event) => {
1370 let output = deserializer.next(reader, event)?;
1371 match self.handle_content(reader, output, &mut fallback)? {
1372 ElementHandlerOutput::Break { event, allow_any } => {
1373 break (event, allow_any)
1374 }
1375 ElementHandlerOutput::Continue { event, .. } => event,
1376 }
1377 }
1378 (_, Event::End(_)) => {
1379 return Ok(DeserializerOutput {
1380 artifact: DeserializerArtifact::Data(self.finish(reader)?),
1381 event: DeserializerEvent::None,
1382 allow_any: false,
1383 });
1384 }
1385 (old_state @ (S::Init__ | S::Next__), event) => {
1386 let output =
1387 <super::SchemaContent as WithDeserializer>::Deserializer::init(
1388 reader, event,
1389 )?;
1390 match self.handle_content(reader, output, &mut fallback)? {
1391 ElementHandlerOutput::Break { event, allow_any } => {
1392 if matches!(&*self.state, S::Unknown__) {
1393 *self.state = old_state;
1394 }
1395 break (event, allow_any);
1396 }
1397 ElementHandlerOutput::Continue { event, .. } => event,
1398 }
1399 }
1400 (S::Unknown__, _) => unreachable!(),
1401 }
1402 };
1403 Ok(DeserializerOutput {
1404 artifact: DeserializerArtifact::Deserializer(self),
1405 event,
1406 allow_any,
1407 })
1408 }
1409 fn finish<R>(mut self, reader: &R) -> Result<super::Schema, Error>
1410 where
1411 R: DeserializeReader,
1412 {
1413 let state = replace(&mut *self.state, SchemaDeserializerState::Unknown__);
1414 self.finish_state(reader, state)?;
1415 Ok(super::Schema {
1416 target_namespace: self.target_namespace,
1417 version: self.version,
1418 final_default: self.final_default,
1419 block_default: self.block_default,
1420 attribute_form_default: self.attribute_form_default,
1421 element_form_default: self.element_form_default,
1422 default_attributes: self.default_attributes,
1423 xpath_default_namespace: self.xpath_default_namespace,
1424 id: self.id,
1425 lang: self.lang,
1426 content: self.content,
1427 })
1428 }
1429 }
1430 #[derive(Debug)]
1431 pub enum SchemaContentDeserializer {
1432 Init__,
1433 Include(
1434 Option<super::Include>,
1435 Option<<super::Include as WithDeserializer>::Deserializer>,
1436 ),
1437 Import(
1438 Option<super::Import>,
1439 Option<<super::Import as WithDeserializer>::Deserializer>,
1440 ),
1441 Redefine(
1442 Option<super::Redefine>,
1443 Option<<super::Redefine as WithDeserializer>::Deserializer>,
1444 ),
1445 Override(
1446 Option<super::Override>,
1447 Option<<super::Override as WithDeserializer>::Deserializer>,
1448 ),
1449 Annotation(
1450 Option<super::Annotation>,
1451 Option<<super::Annotation as WithDeserializer>::Deserializer>,
1452 ),
1453 DefaultOpenContent(
1454 Option<super::DefaultOpenContent>,
1455 Option<<super::DefaultOpenContent as WithDeserializer>::Deserializer>,
1456 ),
1457 SimpleType(
1458 Option<super::SimpleBaseType>,
1459 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
1460 ),
1461 ComplexType(
1462 Option<super::ComplexBaseType>,
1463 Option<<super::ComplexBaseType as WithDeserializer>::Deserializer>,
1464 ),
1465 Group(
1466 Option<super::GroupType>,
1467 Option<<super::GroupType as WithDeserializer>::Deserializer>,
1468 ),
1469 AttributeGroup(
1470 Option<super::AttributeGroupType>,
1471 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
1472 ),
1473 Element(
1474 Option<super::ElementType>,
1475 Option<<super::ElementType as WithDeserializer>::Deserializer>,
1476 ),
1477 Attribute(
1478 Option<super::AttributeType>,
1479 Option<<super::AttributeType as WithDeserializer>::Deserializer>,
1480 ),
1481 Notation(
1482 Option<super::Notation>,
1483 Option<<super::Notation as WithDeserializer>::Deserializer>,
1484 ),
1485 Done__(super::SchemaContent),
1486 Unknown__,
1487 }
1488 impl SchemaContentDeserializer {
1489 fn find_suitable<'de, R>(
1490 &mut self,
1491 reader: &R,
1492 event: Event<'de>,
1493 fallback: &mut Option<SchemaContentDeserializer>,
1494 ) -> Result<ElementHandlerOutput<'de>, Error>
1495 where
1496 R: DeserializeReader,
1497 {
1498 let (Event::Start(x) | Event::Empty(x)) = &event else {
1499 *self = Self::Init__;
1500 return Ok(ElementHandlerOutput::return_to_parent(event, false));
1501 };
1502 if matches!(
1503 reader.resolve_local_name(x.name(), &super::NS_XS),
1504 Some(b"include")
1505 ) {
1506 let output =
1507 <super::Include as WithDeserializer>::Deserializer::init(reader, event)?;
1508 return self.handle_include(reader, Default::default(), output, &mut *fallback);
1509 }
1510 if matches!(
1511 reader.resolve_local_name(x.name(), &super::NS_XS),
1512 Some(b"import")
1513 ) {
1514 let output =
1515 <super::Import as WithDeserializer>::Deserializer::init(reader, event)?;
1516 return self.handle_import(reader, Default::default(), output, &mut *fallback);
1517 }
1518 if matches!(
1519 reader.resolve_local_name(x.name(), &super::NS_XS),
1520 Some(b"redefine")
1521 ) {
1522 let output =
1523 <super::Redefine as WithDeserializer>::Deserializer::init(reader, event)?;
1524 return self.handle_redefine(reader, Default::default(), output, &mut *fallback);
1525 }
1526 if matches!(
1527 reader.resolve_local_name(x.name(), &super::NS_XS),
1528 Some(b"override")
1529 ) {
1530 let output =
1531 <super::Override as WithDeserializer>::Deserializer::init(reader, event)?;
1532 return self.handle_override_(reader, Default::default(), output, &mut *fallback);
1533 }
1534 if matches!(
1535 reader.resolve_local_name(x.name(), &super::NS_XS),
1536 Some(b"annotation")
1537 ) {
1538 let output =
1539 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
1540 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
1541 }
1542 if matches!(
1543 reader.resolve_local_name(x.name(), &super::NS_XS),
1544 Some(b"defaultOpenContent")
1545 ) {
1546 let output = <super::DefaultOpenContent as WithDeserializer>::Deserializer::init(
1547 reader, event,
1548 )?;
1549 return self.handle_default_open_content(
1550 reader,
1551 Default::default(),
1552 output,
1553 &mut *fallback,
1554 );
1555 }
1556 if matches!(
1557 reader.resolve_local_name(x.name(), &super::NS_XS),
1558 Some(b"simpleType")
1559 ) {
1560 let output =
1561 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(reader, event)?;
1562 return self.handle_simple_type(reader, Default::default(), output, &mut *fallback);
1563 }
1564 if matches!(
1565 reader.resolve_local_name(x.name(), &super::NS_XS),
1566 Some(b"complexType")
1567 ) {
1568 let output = <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
1569 reader, event,
1570 )?;
1571 return self.handle_complex_type(
1572 reader,
1573 Default::default(),
1574 output,
1575 &mut *fallback,
1576 );
1577 }
1578 if matches!(
1579 reader.resolve_local_name(x.name(), &super::NS_XS),
1580 Some(b"group")
1581 ) {
1582 let output =
1583 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
1584 return self.handle_group(reader, Default::default(), output, &mut *fallback);
1585 }
1586 if matches!(
1587 reader.resolve_local_name(x.name(), &super::NS_XS),
1588 Some(b"attributeGroup")
1589 ) {
1590 let output = <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
1591 reader, event,
1592 )?;
1593 return self.handle_attribute_group(
1594 reader,
1595 Default::default(),
1596 output,
1597 &mut *fallback,
1598 );
1599 }
1600 if matches!(
1601 reader.resolve_local_name(x.name(), &super::NS_XS),
1602 Some(b"element")
1603 ) {
1604 let output =
1605 <super::ElementType as WithDeserializer>::Deserializer::init(reader, event)?;
1606 return self.handle_element(reader, Default::default(), output, &mut *fallback);
1607 }
1608 if matches!(
1609 reader.resolve_local_name(x.name(), &super::NS_XS),
1610 Some(b"attribute")
1611 ) {
1612 let output =
1613 <super::AttributeType as WithDeserializer>::Deserializer::init(reader, event)?;
1614 return self.handle_attribute(reader, Default::default(), output, &mut *fallback);
1615 }
1616 if matches!(
1617 reader.resolve_local_name(x.name(), &super::NS_XS),
1618 Some(b"notation")
1619 ) {
1620 let output =
1621 <super::Notation as WithDeserializer>::Deserializer::init(reader, event)?;
1622 return self.handle_notation(reader, Default::default(), output, &mut *fallback);
1623 }
1624 *self = Self::Init__;
1625 Ok(ElementHandlerOutput::return_to_parent(event, false))
1626 }
1627 fn store_include(
1628 values: &mut Option<super::Include>,
1629 value: super::Include,
1630 ) -> Result<(), Error> {
1631 if values.is_some() {
1632 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1633 b"include",
1634 )))?;
1635 }
1636 *values = Some(value);
1637 Ok(())
1638 }
1639 fn store_import(
1640 values: &mut Option<super::Import>,
1641 value: super::Import,
1642 ) -> Result<(), Error> {
1643 if values.is_some() {
1644 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1645 b"import",
1646 )))?;
1647 }
1648 *values = Some(value);
1649 Ok(())
1650 }
1651 fn store_redefine(
1652 values: &mut Option<super::Redefine>,
1653 value: super::Redefine,
1654 ) -> Result<(), Error> {
1655 if values.is_some() {
1656 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1657 b"redefine",
1658 )))?;
1659 }
1660 *values = Some(value);
1661 Ok(())
1662 }
1663 fn store_override_(
1664 values: &mut Option<super::Override>,
1665 value: super::Override,
1666 ) -> Result<(), Error> {
1667 if values.is_some() {
1668 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1669 b"override",
1670 )))?;
1671 }
1672 *values = Some(value);
1673 Ok(())
1674 }
1675 fn store_annotation(
1676 values: &mut Option<super::Annotation>,
1677 value: super::Annotation,
1678 ) -> Result<(), Error> {
1679 if values.is_some() {
1680 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1681 b"annotation",
1682 )))?;
1683 }
1684 *values = Some(value);
1685 Ok(())
1686 }
1687 fn store_default_open_content(
1688 values: &mut Option<super::DefaultOpenContent>,
1689 value: super::DefaultOpenContent,
1690 ) -> Result<(), Error> {
1691 if values.is_some() {
1692 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1693 b"defaultOpenContent",
1694 )))?;
1695 }
1696 *values = Some(value);
1697 Ok(())
1698 }
1699 fn store_simple_type(
1700 values: &mut Option<super::SimpleBaseType>,
1701 value: super::SimpleBaseType,
1702 ) -> Result<(), Error> {
1703 if values.is_some() {
1704 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1705 b"simpleType",
1706 )))?;
1707 }
1708 *values = Some(value);
1709 Ok(())
1710 }
1711 fn store_complex_type(
1712 values: &mut Option<super::ComplexBaseType>,
1713 value: super::ComplexBaseType,
1714 ) -> Result<(), Error> {
1715 if values.is_some() {
1716 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1717 b"complexType",
1718 )))?;
1719 }
1720 *values = Some(value);
1721 Ok(())
1722 }
1723 fn store_group(
1724 values: &mut Option<super::GroupType>,
1725 value: super::GroupType,
1726 ) -> Result<(), Error> {
1727 if values.is_some() {
1728 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1729 b"group",
1730 )))?;
1731 }
1732 *values = Some(value);
1733 Ok(())
1734 }
1735 fn store_attribute_group(
1736 values: &mut Option<super::AttributeGroupType>,
1737 value: super::AttributeGroupType,
1738 ) -> Result<(), Error> {
1739 if values.is_some() {
1740 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1741 b"attributeGroup",
1742 )))?;
1743 }
1744 *values = Some(value);
1745 Ok(())
1746 }
1747 fn store_element(
1748 values: &mut Option<super::ElementType>,
1749 value: super::ElementType,
1750 ) -> Result<(), Error> {
1751 if values.is_some() {
1752 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1753 b"element",
1754 )))?;
1755 }
1756 *values = Some(value);
1757 Ok(())
1758 }
1759 fn store_attribute(
1760 values: &mut Option<super::AttributeType>,
1761 value: super::AttributeType,
1762 ) -> Result<(), Error> {
1763 if values.is_some() {
1764 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1765 b"attribute",
1766 )))?;
1767 }
1768 *values = Some(value);
1769 Ok(())
1770 }
1771 fn store_notation(
1772 values: &mut Option<super::Notation>,
1773 value: super::Notation,
1774 ) -> Result<(), Error> {
1775 if values.is_some() {
1776 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
1777 b"notation",
1778 )))?;
1779 }
1780 *values = Some(value);
1781 Ok(())
1782 }
1783 fn handle_include<'de, R>(
1784 &mut self,
1785 reader: &R,
1786 mut values: Option<super::Include>,
1787 output: DeserializerOutput<'de, super::Include>,
1788 fallback: &mut Option<Self>,
1789 ) -> Result<ElementHandlerOutput<'de>, Error>
1790 where
1791 R: DeserializeReader,
1792 {
1793 let DeserializerOutput {
1794 artifact,
1795 event,
1796 allow_any,
1797 } = output;
1798 if artifact.is_none() {
1799 *self = match fallback.take() {
1800 None => Self::Init__,
1801 Some(Self::Include(_, Some(deserializer))) => {
1802 Self::Include(values, Some(deserializer))
1803 }
1804 _ => unreachable!(),
1805 };
1806 return Ok(ElementHandlerOutput::break_(event, allow_any));
1807 }
1808 match fallback.take() {
1809 None => (),
1810 Some(Self::Include(_, Some(deserializer))) => {
1811 let data = deserializer.finish(reader)?;
1812 Self::store_include(&mut values, data)?;
1813 }
1814 Some(_) => unreachable!(),
1815 }
1816 Ok(match artifact {
1817 DeserializerArtifact::None => unreachable!(),
1818 DeserializerArtifact::Data(data) => {
1819 Self::store_include(&mut values, data)?;
1820 let data = Self::Include(values, None).finish(reader)?;
1821 *self = Self::Done__(data);
1822 ElementHandlerOutput::Break { event, allow_any }
1823 }
1824 DeserializerArtifact::Deserializer(deserializer) => {
1825 *self = Self::Include(values, Some(deserializer));
1826 ElementHandlerOutput::from_event_end(event, allow_any)
1827 }
1828 })
1829 }
1830 fn handle_import<'de, R>(
1831 &mut self,
1832 reader: &R,
1833 mut values: Option<super::Import>,
1834 output: DeserializerOutput<'de, super::Import>,
1835 fallback: &mut Option<Self>,
1836 ) -> Result<ElementHandlerOutput<'de>, Error>
1837 where
1838 R: DeserializeReader,
1839 {
1840 let DeserializerOutput {
1841 artifact,
1842 event,
1843 allow_any,
1844 } = output;
1845 if artifact.is_none() {
1846 *self = match fallback.take() {
1847 None => Self::Init__,
1848 Some(Self::Import(_, Some(deserializer))) => {
1849 Self::Import(values, Some(deserializer))
1850 }
1851 _ => unreachable!(),
1852 };
1853 return Ok(ElementHandlerOutput::break_(event, allow_any));
1854 }
1855 match fallback.take() {
1856 None => (),
1857 Some(Self::Import(_, Some(deserializer))) => {
1858 let data = deserializer.finish(reader)?;
1859 Self::store_import(&mut values, data)?;
1860 }
1861 Some(_) => unreachable!(),
1862 }
1863 Ok(match artifact {
1864 DeserializerArtifact::None => unreachable!(),
1865 DeserializerArtifact::Data(data) => {
1866 Self::store_import(&mut values, data)?;
1867 let data = Self::Import(values, None).finish(reader)?;
1868 *self = Self::Done__(data);
1869 ElementHandlerOutput::Break { event, allow_any }
1870 }
1871 DeserializerArtifact::Deserializer(deserializer) => {
1872 *self = Self::Import(values, Some(deserializer));
1873 ElementHandlerOutput::from_event_end(event, allow_any)
1874 }
1875 })
1876 }
1877 fn handle_redefine<'de, R>(
1878 &mut self,
1879 reader: &R,
1880 mut values: Option<super::Redefine>,
1881 output: DeserializerOutput<'de, super::Redefine>,
1882 fallback: &mut Option<Self>,
1883 ) -> Result<ElementHandlerOutput<'de>, Error>
1884 where
1885 R: DeserializeReader,
1886 {
1887 let DeserializerOutput {
1888 artifact,
1889 event,
1890 allow_any,
1891 } = output;
1892 if artifact.is_none() {
1893 *self = match fallback.take() {
1894 None => Self::Init__,
1895 Some(Self::Redefine(_, Some(deserializer))) => {
1896 Self::Redefine(values, Some(deserializer))
1897 }
1898 _ => unreachable!(),
1899 };
1900 return Ok(ElementHandlerOutput::break_(event, allow_any));
1901 }
1902 match fallback.take() {
1903 None => (),
1904 Some(Self::Redefine(_, Some(deserializer))) => {
1905 let data = deserializer.finish(reader)?;
1906 Self::store_redefine(&mut values, data)?;
1907 }
1908 Some(_) => unreachable!(),
1909 }
1910 Ok(match artifact {
1911 DeserializerArtifact::None => unreachable!(),
1912 DeserializerArtifact::Data(data) => {
1913 Self::store_redefine(&mut values, data)?;
1914 let data = Self::Redefine(values, None).finish(reader)?;
1915 *self = Self::Done__(data);
1916 ElementHandlerOutput::Break { event, allow_any }
1917 }
1918 DeserializerArtifact::Deserializer(deserializer) => {
1919 *self = Self::Redefine(values, Some(deserializer));
1920 ElementHandlerOutput::from_event_end(event, allow_any)
1921 }
1922 })
1923 }
1924 fn handle_override_<'de, R>(
1925 &mut self,
1926 reader: &R,
1927 mut values: Option<super::Override>,
1928 output: DeserializerOutput<'de, super::Override>,
1929 fallback: &mut Option<Self>,
1930 ) -> Result<ElementHandlerOutput<'de>, Error>
1931 where
1932 R: DeserializeReader,
1933 {
1934 let DeserializerOutput {
1935 artifact,
1936 event,
1937 allow_any,
1938 } = output;
1939 if artifact.is_none() {
1940 *self = match fallback.take() {
1941 None => Self::Init__,
1942 Some(Self::Override(_, Some(deserializer))) => {
1943 Self::Override(values, Some(deserializer))
1944 }
1945 _ => unreachable!(),
1946 };
1947 return Ok(ElementHandlerOutput::break_(event, allow_any));
1948 }
1949 match fallback.take() {
1950 None => (),
1951 Some(Self::Override(_, Some(deserializer))) => {
1952 let data = deserializer.finish(reader)?;
1953 Self::store_override_(&mut values, data)?;
1954 }
1955 Some(_) => unreachable!(),
1956 }
1957 Ok(match artifact {
1958 DeserializerArtifact::None => unreachable!(),
1959 DeserializerArtifact::Data(data) => {
1960 Self::store_override_(&mut values, data)?;
1961 let data = Self::Override(values, None).finish(reader)?;
1962 *self = Self::Done__(data);
1963 ElementHandlerOutput::Break { event, allow_any }
1964 }
1965 DeserializerArtifact::Deserializer(deserializer) => {
1966 *self = Self::Override(values, Some(deserializer));
1967 ElementHandlerOutput::from_event_end(event, allow_any)
1968 }
1969 })
1970 }
1971 fn handle_annotation<'de, R>(
1972 &mut self,
1973 reader: &R,
1974 mut values: Option<super::Annotation>,
1975 output: DeserializerOutput<'de, super::Annotation>,
1976 fallback: &mut Option<Self>,
1977 ) -> Result<ElementHandlerOutput<'de>, Error>
1978 where
1979 R: DeserializeReader,
1980 {
1981 let DeserializerOutput {
1982 artifact,
1983 event,
1984 allow_any,
1985 } = output;
1986 if artifact.is_none() {
1987 *self = match fallback.take() {
1988 None => Self::Init__,
1989 Some(Self::Annotation(_, Some(deserializer))) => {
1990 Self::Annotation(values, Some(deserializer))
1991 }
1992 _ => unreachable!(),
1993 };
1994 return Ok(ElementHandlerOutput::break_(event, allow_any));
1995 }
1996 match fallback.take() {
1997 None => (),
1998 Some(Self::Annotation(_, Some(deserializer))) => {
1999 let data = deserializer.finish(reader)?;
2000 Self::store_annotation(&mut values, data)?;
2001 }
2002 Some(_) => unreachable!(),
2003 }
2004 Ok(match artifact {
2005 DeserializerArtifact::None => unreachable!(),
2006 DeserializerArtifact::Data(data) => {
2007 Self::store_annotation(&mut values, data)?;
2008 let data = Self::Annotation(values, None).finish(reader)?;
2009 *self = Self::Done__(data);
2010 ElementHandlerOutput::Break { event, allow_any }
2011 }
2012 DeserializerArtifact::Deserializer(deserializer) => {
2013 *self = Self::Annotation(values, Some(deserializer));
2014 ElementHandlerOutput::from_event_end(event, allow_any)
2015 }
2016 })
2017 }
2018 fn handle_default_open_content<'de, R>(
2019 &mut self,
2020 reader: &R,
2021 mut values: Option<super::DefaultOpenContent>,
2022 output: DeserializerOutput<'de, super::DefaultOpenContent>,
2023 fallback: &mut Option<Self>,
2024 ) -> Result<ElementHandlerOutput<'de>, Error>
2025 where
2026 R: DeserializeReader,
2027 {
2028 let DeserializerOutput {
2029 artifact,
2030 event,
2031 allow_any,
2032 } = output;
2033 if artifact.is_none() {
2034 *self = match fallback.take() {
2035 None => Self::Init__,
2036 Some(Self::DefaultOpenContent(_, Some(deserializer))) => {
2037 Self::DefaultOpenContent(values, Some(deserializer))
2038 }
2039 _ => unreachable!(),
2040 };
2041 return Ok(ElementHandlerOutput::break_(event, allow_any));
2042 }
2043 match fallback.take() {
2044 None => (),
2045 Some(Self::DefaultOpenContent(_, Some(deserializer))) => {
2046 let data = deserializer.finish(reader)?;
2047 Self::store_default_open_content(&mut values, data)?;
2048 }
2049 Some(_) => unreachable!(),
2050 }
2051 Ok(match artifact {
2052 DeserializerArtifact::None => unreachable!(),
2053 DeserializerArtifact::Data(data) => {
2054 Self::store_default_open_content(&mut values, data)?;
2055 let data = Self::DefaultOpenContent(values, None).finish(reader)?;
2056 *self = Self::Done__(data);
2057 ElementHandlerOutput::Break { event, allow_any }
2058 }
2059 DeserializerArtifact::Deserializer(deserializer) => {
2060 *self = Self::DefaultOpenContent(values, Some(deserializer));
2061 ElementHandlerOutput::from_event_end(event, allow_any)
2062 }
2063 })
2064 }
2065 fn handle_simple_type<'de, R>(
2066 &mut self,
2067 reader: &R,
2068 mut values: Option<super::SimpleBaseType>,
2069 output: DeserializerOutput<'de, super::SimpleBaseType>,
2070 fallback: &mut Option<Self>,
2071 ) -> Result<ElementHandlerOutput<'de>, Error>
2072 where
2073 R: DeserializeReader,
2074 {
2075 let DeserializerOutput {
2076 artifact,
2077 event,
2078 allow_any,
2079 } = output;
2080 if artifact.is_none() {
2081 *self = match fallback.take() {
2082 None => Self::Init__,
2083 Some(Self::SimpleType(_, Some(deserializer))) => {
2084 Self::SimpleType(values, Some(deserializer))
2085 }
2086 _ => unreachable!(),
2087 };
2088 return Ok(ElementHandlerOutput::break_(event, allow_any));
2089 }
2090 match fallback.take() {
2091 None => (),
2092 Some(Self::SimpleType(_, Some(deserializer))) => {
2093 let data = deserializer.finish(reader)?;
2094 Self::store_simple_type(&mut values, data)?;
2095 }
2096 Some(_) => unreachable!(),
2097 }
2098 Ok(match artifact {
2099 DeserializerArtifact::None => unreachable!(),
2100 DeserializerArtifact::Data(data) => {
2101 Self::store_simple_type(&mut values, data)?;
2102 let data = Self::SimpleType(values, None).finish(reader)?;
2103 *self = Self::Done__(data);
2104 ElementHandlerOutput::Break { event, allow_any }
2105 }
2106 DeserializerArtifact::Deserializer(deserializer) => {
2107 *self = Self::SimpleType(values, Some(deserializer));
2108 ElementHandlerOutput::from_event_end(event, allow_any)
2109 }
2110 })
2111 }
2112 fn handle_complex_type<'de, R>(
2113 &mut self,
2114 reader: &R,
2115 mut values: Option<super::ComplexBaseType>,
2116 output: DeserializerOutput<'de, super::ComplexBaseType>,
2117 fallback: &mut Option<Self>,
2118 ) -> Result<ElementHandlerOutput<'de>, Error>
2119 where
2120 R: DeserializeReader,
2121 {
2122 let DeserializerOutput {
2123 artifact,
2124 event,
2125 allow_any,
2126 } = output;
2127 if artifact.is_none() {
2128 *self = match fallback.take() {
2129 None => Self::Init__,
2130 Some(Self::ComplexType(_, Some(deserializer))) => {
2131 Self::ComplexType(values, Some(deserializer))
2132 }
2133 _ => unreachable!(),
2134 };
2135 return Ok(ElementHandlerOutput::break_(event, allow_any));
2136 }
2137 match fallback.take() {
2138 None => (),
2139 Some(Self::ComplexType(_, Some(deserializer))) => {
2140 let data = deserializer.finish(reader)?;
2141 Self::store_complex_type(&mut values, data)?;
2142 }
2143 Some(_) => unreachable!(),
2144 }
2145 Ok(match artifact {
2146 DeserializerArtifact::None => unreachable!(),
2147 DeserializerArtifact::Data(data) => {
2148 Self::store_complex_type(&mut values, data)?;
2149 let data = Self::ComplexType(values, None).finish(reader)?;
2150 *self = Self::Done__(data);
2151 ElementHandlerOutput::Break { event, allow_any }
2152 }
2153 DeserializerArtifact::Deserializer(deserializer) => {
2154 *self = Self::ComplexType(values, Some(deserializer));
2155 ElementHandlerOutput::from_event_end(event, allow_any)
2156 }
2157 })
2158 }
2159 fn handle_group<'de, R>(
2160 &mut self,
2161 reader: &R,
2162 mut values: Option<super::GroupType>,
2163 output: DeserializerOutput<'de, super::GroupType>,
2164 fallback: &mut Option<Self>,
2165 ) -> Result<ElementHandlerOutput<'de>, Error>
2166 where
2167 R: DeserializeReader,
2168 {
2169 let DeserializerOutput {
2170 artifact,
2171 event,
2172 allow_any,
2173 } = output;
2174 if artifact.is_none() {
2175 *self = match fallback.take() {
2176 None => Self::Init__,
2177 Some(Self::Group(_, Some(deserializer))) => {
2178 Self::Group(values, Some(deserializer))
2179 }
2180 _ => unreachable!(),
2181 };
2182 return Ok(ElementHandlerOutput::break_(event, allow_any));
2183 }
2184 match fallback.take() {
2185 None => (),
2186 Some(Self::Group(_, Some(deserializer))) => {
2187 let data = deserializer.finish(reader)?;
2188 Self::store_group(&mut values, data)?;
2189 }
2190 Some(_) => unreachable!(),
2191 }
2192 Ok(match artifact {
2193 DeserializerArtifact::None => unreachable!(),
2194 DeserializerArtifact::Data(data) => {
2195 Self::store_group(&mut values, data)?;
2196 let data = Self::Group(values, None).finish(reader)?;
2197 *self = Self::Done__(data);
2198 ElementHandlerOutput::Break { event, allow_any }
2199 }
2200 DeserializerArtifact::Deserializer(deserializer) => {
2201 *self = Self::Group(values, Some(deserializer));
2202 ElementHandlerOutput::from_event_end(event, allow_any)
2203 }
2204 })
2205 }
2206 fn handle_attribute_group<'de, R>(
2207 &mut self,
2208 reader: &R,
2209 mut values: Option<super::AttributeGroupType>,
2210 output: DeserializerOutput<'de, super::AttributeGroupType>,
2211 fallback: &mut Option<Self>,
2212 ) -> Result<ElementHandlerOutput<'de>, Error>
2213 where
2214 R: DeserializeReader,
2215 {
2216 let DeserializerOutput {
2217 artifact,
2218 event,
2219 allow_any,
2220 } = output;
2221 if artifact.is_none() {
2222 *self = match fallback.take() {
2223 None => Self::Init__,
2224 Some(Self::AttributeGroup(_, Some(deserializer))) => {
2225 Self::AttributeGroup(values, Some(deserializer))
2226 }
2227 _ => unreachable!(),
2228 };
2229 return Ok(ElementHandlerOutput::break_(event, allow_any));
2230 }
2231 match fallback.take() {
2232 None => (),
2233 Some(Self::AttributeGroup(_, Some(deserializer))) => {
2234 let data = deserializer.finish(reader)?;
2235 Self::store_attribute_group(&mut values, data)?;
2236 }
2237 Some(_) => unreachable!(),
2238 }
2239 Ok(match artifact {
2240 DeserializerArtifact::None => unreachable!(),
2241 DeserializerArtifact::Data(data) => {
2242 Self::store_attribute_group(&mut values, data)?;
2243 let data = Self::AttributeGroup(values, None).finish(reader)?;
2244 *self = Self::Done__(data);
2245 ElementHandlerOutput::Break { event, allow_any }
2246 }
2247 DeserializerArtifact::Deserializer(deserializer) => {
2248 *self = Self::AttributeGroup(values, Some(deserializer));
2249 ElementHandlerOutput::from_event_end(event, allow_any)
2250 }
2251 })
2252 }
2253 fn handle_element<'de, R>(
2254 &mut self,
2255 reader: &R,
2256 mut values: Option<super::ElementType>,
2257 output: DeserializerOutput<'de, super::ElementType>,
2258 fallback: &mut Option<Self>,
2259 ) -> Result<ElementHandlerOutput<'de>, Error>
2260 where
2261 R: DeserializeReader,
2262 {
2263 let DeserializerOutput {
2264 artifact,
2265 event,
2266 allow_any,
2267 } = output;
2268 if artifact.is_none() {
2269 *self = match fallback.take() {
2270 None => Self::Init__,
2271 Some(Self::Element(_, Some(deserializer))) => {
2272 Self::Element(values, Some(deserializer))
2273 }
2274 _ => unreachable!(),
2275 };
2276 return Ok(ElementHandlerOutput::break_(event, allow_any));
2277 }
2278 match fallback.take() {
2279 None => (),
2280 Some(Self::Element(_, Some(deserializer))) => {
2281 let data = deserializer.finish(reader)?;
2282 Self::store_element(&mut values, data)?;
2283 }
2284 Some(_) => unreachable!(),
2285 }
2286 Ok(match artifact {
2287 DeserializerArtifact::None => unreachable!(),
2288 DeserializerArtifact::Data(data) => {
2289 Self::store_element(&mut values, data)?;
2290 let data = Self::Element(values, None).finish(reader)?;
2291 *self = Self::Done__(data);
2292 ElementHandlerOutput::Break { event, allow_any }
2293 }
2294 DeserializerArtifact::Deserializer(deserializer) => {
2295 *self = Self::Element(values, Some(deserializer));
2296 ElementHandlerOutput::from_event_end(event, allow_any)
2297 }
2298 })
2299 }
2300 fn handle_attribute<'de, R>(
2301 &mut self,
2302 reader: &R,
2303 mut values: Option<super::AttributeType>,
2304 output: DeserializerOutput<'de, super::AttributeType>,
2305 fallback: &mut Option<Self>,
2306 ) -> Result<ElementHandlerOutput<'de>, Error>
2307 where
2308 R: DeserializeReader,
2309 {
2310 let DeserializerOutput {
2311 artifact,
2312 event,
2313 allow_any,
2314 } = output;
2315 if artifact.is_none() {
2316 *self = match fallback.take() {
2317 None => Self::Init__,
2318 Some(Self::Attribute(_, Some(deserializer))) => {
2319 Self::Attribute(values, Some(deserializer))
2320 }
2321 _ => unreachable!(),
2322 };
2323 return Ok(ElementHandlerOutput::break_(event, allow_any));
2324 }
2325 match fallback.take() {
2326 None => (),
2327 Some(Self::Attribute(_, Some(deserializer))) => {
2328 let data = deserializer.finish(reader)?;
2329 Self::store_attribute(&mut values, data)?;
2330 }
2331 Some(_) => unreachable!(),
2332 }
2333 Ok(match artifact {
2334 DeserializerArtifact::None => unreachable!(),
2335 DeserializerArtifact::Data(data) => {
2336 Self::store_attribute(&mut values, data)?;
2337 let data = Self::Attribute(values, None).finish(reader)?;
2338 *self = Self::Done__(data);
2339 ElementHandlerOutput::Break { event, allow_any }
2340 }
2341 DeserializerArtifact::Deserializer(deserializer) => {
2342 *self = Self::Attribute(values, Some(deserializer));
2343 ElementHandlerOutput::from_event_end(event, allow_any)
2344 }
2345 })
2346 }
2347 fn handle_notation<'de, R>(
2348 &mut self,
2349 reader: &R,
2350 mut values: Option<super::Notation>,
2351 output: DeserializerOutput<'de, super::Notation>,
2352 fallback: &mut Option<Self>,
2353 ) -> Result<ElementHandlerOutput<'de>, Error>
2354 where
2355 R: DeserializeReader,
2356 {
2357 let DeserializerOutput {
2358 artifact,
2359 event,
2360 allow_any,
2361 } = output;
2362 if artifact.is_none() {
2363 *self = match fallback.take() {
2364 None => Self::Init__,
2365 Some(Self::Notation(_, Some(deserializer))) => {
2366 Self::Notation(values, Some(deserializer))
2367 }
2368 _ => unreachable!(),
2369 };
2370 return Ok(ElementHandlerOutput::break_(event, allow_any));
2371 }
2372 match fallback.take() {
2373 None => (),
2374 Some(Self::Notation(_, Some(deserializer))) => {
2375 let data = deserializer.finish(reader)?;
2376 Self::store_notation(&mut values, data)?;
2377 }
2378 Some(_) => unreachable!(),
2379 }
2380 Ok(match artifact {
2381 DeserializerArtifact::None => unreachable!(),
2382 DeserializerArtifact::Data(data) => {
2383 Self::store_notation(&mut values, data)?;
2384 let data = Self::Notation(values, None).finish(reader)?;
2385 *self = Self::Done__(data);
2386 ElementHandlerOutput::Break { event, allow_any }
2387 }
2388 DeserializerArtifact::Deserializer(deserializer) => {
2389 *self = Self::Notation(values, Some(deserializer));
2390 ElementHandlerOutput::from_event_end(event, allow_any)
2391 }
2392 })
2393 }
2394 }
2395 impl<'de> Deserializer<'de, super::SchemaContent> for SchemaContentDeserializer {
2396 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::SchemaContent>
2397 where
2398 R: DeserializeReader,
2399 {
2400 let deserializer = Self::Init__;
2401 let mut output = deserializer.next(reader, event)?;
2402 output.artifact = match output.artifact {
2403 DeserializerArtifact::Deserializer(Self::Init__) => DeserializerArtifact::None,
2404 artifact => artifact,
2405 };
2406 Ok(output)
2407 }
2408 fn next<R>(
2409 mut self,
2410 reader: &R,
2411 event: Event<'de>,
2412 ) -> DeserializerResult<'de, super::SchemaContent>
2413 where
2414 R: DeserializeReader,
2415 {
2416 let mut event = event;
2417 let mut fallback = None;
2418 let (event, allow_any) = loop {
2419 let state = replace(&mut self, Self::Unknown__);
2420 event = match (state, event) {
2421 (Self::Include(values, Some(deserializer)), event) => {
2422 let output = deserializer.next(reader, event)?;
2423 match self.handle_include(reader, values, output, &mut fallback)? {
2424 ElementHandlerOutput::Break { event, allow_any } => {
2425 break (event, allow_any)
2426 }
2427 ElementHandlerOutput::Continue { event, .. } => event,
2428 }
2429 }
2430 (Self::Import(values, Some(deserializer)), event) => {
2431 let output = deserializer.next(reader, event)?;
2432 match self.handle_import(reader, values, output, &mut fallback)? {
2433 ElementHandlerOutput::Break { event, allow_any } => {
2434 break (event, allow_any)
2435 }
2436 ElementHandlerOutput::Continue { event, .. } => event,
2437 }
2438 }
2439 (Self::Redefine(values, Some(deserializer)), event) => {
2440 let output = deserializer.next(reader, event)?;
2441 match self.handle_redefine(reader, values, output, &mut fallback)? {
2442 ElementHandlerOutput::Break { event, allow_any } => {
2443 break (event, allow_any)
2444 }
2445 ElementHandlerOutput::Continue { event, .. } => event,
2446 }
2447 }
2448 (Self::Override(values, Some(deserializer)), event) => {
2449 let output = deserializer.next(reader, event)?;
2450 match self.handle_override_(reader, values, output, &mut fallback)? {
2451 ElementHandlerOutput::Break { event, allow_any } => {
2452 break (event, allow_any)
2453 }
2454 ElementHandlerOutput::Continue { event, .. } => event,
2455 }
2456 }
2457 (Self::Annotation(values, Some(deserializer)), event) => {
2458 let output = deserializer.next(reader, event)?;
2459 match self.handle_annotation(reader, values, output, &mut fallback)? {
2460 ElementHandlerOutput::Break { event, allow_any } => {
2461 break (event, allow_any)
2462 }
2463 ElementHandlerOutput::Continue { event, .. } => event,
2464 }
2465 }
2466 (Self::DefaultOpenContent(values, Some(deserializer)), event) => {
2467 let output = deserializer.next(reader, event)?;
2468 match self.handle_default_open_content(
2469 reader,
2470 values,
2471 output,
2472 &mut fallback,
2473 )? {
2474 ElementHandlerOutput::Break { event, allow_any } => {
2475 break (event, allow_any)
2476 }
2477 ElementHandlerOutput::Continue { event, .. } => event,
2478 }
2479 }
2480 (Self::SimpleType(values, Some(deserializer)), event) => {
2481 let output = deserializer.next(reader, event)?;
2482 match self.handle_simple_type(reader, values, output, &mut fallback)? {
2483 ElementHandlerOutput::Break { event, allow_any } => {
2484 break (event, allow_any)
2485 }
2486 ElementHandlerOutput::Continue { event, .. } => event,
2487 }
2488 }
2489 (Self::ComplexType(values, Some(deserializer)), event) => {
2490 let output = deserializer.next(reader, event)?;
2491 match self.handle_complex_type(reader, values, output, &mut fallback)? {
2492 ElementHandlerOutput::Break { event, allow_any } => {
2493 break (event, allow_any)
2494 }
2495 ElementHandlerOutput::Continue { event, .. } => event,
2496 }
2497 }
2498 (Self::Group(values, Some(deserializer)), event) => {
2499 let output = deserializer.next(reader, event)?;
2500 match self.handle_group(reader, values, output, &mut fallback)? {
2501 ElementHandlerOutput::Break { event, allow_any } => {
2502 break (event, allow_any)
2503 }
2504 ElementHandlerOutput::Continue { event, .. } => event,
2505 }
2506 }
2507 (Self::AttributeGroup(values, Some(deserializer)), event) => {
2508 let output = deserializer.next(reader, event)?;
2509 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
2510 ElementHandlerOutput::Break { event, allow_any } => {
2511 break (event, allow_any)
2512 }
2513 ElementHandlerOutput::Continue { event, .. } => event,
2514 }
2515 }
2516 (Self::Element(values, Some(deserializer)), event) => {
2517 let output = deserializer.next(reader, event)?;
2518 match self.handle_element(reader, values, output, &mut fallback)? {
2519 ElementHandlerOutput::Break { event, allow_any } => {
2520 break (event, allow_any)
2521 }
2522 ElementHandlerOutput::Continue { event, .. } => event,
2523 }
2524 }
2525 (Self::Attribute(values, Some(deserializer)), event) => {
2526 let output = deserializer.next(reader, event)?;
2527 match self.handle_attribute(reader, values, output, &mut fallback)? {
2528 ElementHandlerOutput::Break { event, allow_any } => {
2529 break (event, allow_any)
2530 }
2531 ElementHandlerOutput::Continue { event, .. } => event,
2532 }
2533 }
2534 (Self::Notation(values, Some(deserializer)), event) => {
2535 let output = deserializer.next(reader, event)?;
2536 match self.handle_notation(reader, values, output, &mut fallback)? {
2537 ElementHandlerOutput::Break { event, allow_any } => {
2538 break (event, allow_any)
2539 }
2540 ElementHandlerOutput::Continue { event, .. } => event,
2541 }
2542 }
2543 (state, event @ Event::End(_)) => {
2544 return Ok(DeserializerOutput {
2545 artifact: DeserializerArtifact::Data(state.finish(reader)?),
2546 event: DeserializerEvent::Continue(event),
2547 allow_any: false,
2548 });
2549 }
2550 (Self::Init__, event) => {
2551 match self.find_suitable(reader, event, &mut fallback)? {
2552 ElementHandlerOutput::Break { event, allow_any } => {
2553 break (event, allow_any)
2554 }
2555 ElementHandlerOutput::Continue { event, .. } => event,
2556 }
2557 }
2558 (Self::Include(values, None), event) => {
2559 let output = <super::Include as WithDeserializer>::Deserializer::init(
2560 reader, event,
2561 )?;
2562 match self.handle_include(reader, values, output, &mut fallback)? {
2563 ElementHandlerOutput::Break { event, allow_any } => {
2564 break (event, allow_any)
2565 }
2566 ElementHandlerOutput::Continue { event, .. } => event,
2567 }
2568 }
2569 (Self::Import(values, None), event) => {
2570 let output =
2571 <super::Import as WithDeserializer>::Deserializer::init(reader, event)?;
2572 match self.handle_import(reader, values, output, &mut fallback)? {
2573 ElementHandlerOutput::Break { event, allow_any } => {
2574 break (event, allow_any)
2575 }
2576 ElementHandlerOutput::Continue { event, .. } => event,
2577 }
2578 }
2579 (Self::Redefine(values, None), event) => {
2580 let output = <super::Redefine as WithDeserializer>::Deserializer::init(
2581 reader, event,
2582 )?;
2583 match self.handle_redefine(reader, values, output, &mut fallback)? {
2584 ElementHandlerOutput::Break { event, allow_any } => {
2585 break (event, allow_any)
2586 }
2587 ElementHandlerOutput::Continue { event, .. } => event,
2588 }
2589 }
2590 (Self::Override(values, None), event) => {
2591 let output = <super::Override as WithDeserializer>::Deserializer::init(
2592 reader, event,
2593 )?;
2594 match self.handle_override_(reader, values, output, &mut fallback)? {
2595 ElementHandlerOutput::Break { event, allow_any } => {
2596 break (event, allow_any)
2597 }
2598 ElementHandlerOutput::Continue { event, .. } => event,
2599 }
2600 }
2601 (Self::Annotation(values, None), event) => {
2602 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
2603 reader, event,
2604 )?;
2605 match self.handle_annotation(reader, values, output, &mut fallback)? {
2606 ElementHandlerOutput::Break { event, allow_any } => {
2607 break (event, allow_any)
2608 }
2609 ElementHandlerOutput::Continue { event, .. } => event,
2610 }
2611 }
2612 (Self::DefaultOpenContent(values, None), event) => {
2613 let output =
2614 <super::DefaultOpenContent as WithDeserializer>::Deserializer::init(
2615 reader, event,
2616 )?;
2617 match self.handle_default_open_content(
2618 reader,
2619 values,
2620 output,
2621 &mut fallback,
2622 )? {
2623 ElementHandlerOutput::Break { event, allow_any } => {
2624 break (event, allow_any)
2625 }
2626 ElementHandlerOutput::Continue { event, .. } => event,
2627 }
2628 }
2629 (Self::SimpleType(values, None), event) => {
2630 let output =
2631 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
2632 reader, event,
2633 )?;
2634 match self.handle_simple_type(reader, values, output, &mut fallback)? {
2635 ElementHandlerOutput::Break { event, allow_any } => {
2636 break (event, allow_any)
2637 }
2638 ElementHandlerOutput::Continue { event, .. } => event,
2639 }
2640 }
2641 (Self::ComplexType(values, None), event) => {
2642 let output =
2643 <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
2644 reader, event,
2645 )?;
2646 match self.handle_complex_type(reader, values, output, &mut fallback)? {
2647 ElementHandlerOutput::Break { event, allow_any } => {
2648 break (event, allow_any)
2649 }
2650 ElementHandlerOutput::Continue { event, .. } => event,
2651 }
2652 }
2653 (Self::Group(values, None), event) => {
2654 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
2655 reader, event,
2656 )?;
2657 match self.handle_group(reader, values, output, &mut fallback)? {
2658 ElementHandlerOutput::Break { event, allow_any } => {
2659 break (event, allow_any)
2660 }
2661 ElementHandlerOutput::Continue { event, .. } => event,
2662 }
2663 }
2664 (Self::AttributeGroup(values, None), event) => {
2665 let output =
2666 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
2667 reader, event,
2668 )?;
2669 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
2670 ElementHandlerOutput::Break { event, allow_any } => {
2671 break (event, allow_any)
2672 }
2673 ElementHandlerOutput::Continue { event, .. } => event,
2674 }
2675 }
2676 (Self::Element(values, None), event) => {
2677 let output = <super::ElementType as WithDeserializer>::Deserializer::init(
2678 reader, event,
2679 )?;
2680 match self.handle_element(reader, values, output, &mut fallback)? {
2681 ElementHandlerOutput::Break { event, allow_any } => {
2682 break (event, allow_any)
2683 }
2684 ElementHandlerOutput::Continue { event, .. } => event,
2685 }
2686 }
2687 (Self::Attribute(values, None), event) => {
2688 let output =
2689 <super::AttributeType as WithDeserializer>::Deserializer::init(
2690 reader, event,
2691 )?;
2692 match self.handle_attribute(reader, values, output, &mut fallback)? {
2693 ElementHandlerOutput::Break { event, allow_any } => {
2694 break (event, allow_any)
2695 }
2696 ElementHandlerOutput::Continue { event, .. } => event,
2697 }
2698 }
2699 (Self::Notation(values, None), event) => {
2700 let output = <super::Notation as WithDeserializer>::Deserializer::init(
2701 reader, event,
2702 )?;
2703 match self.handle_notation(reader, values, output, &mut fallback)? {
2704 ElementHandlerOutput::Break { event, allow_any } => {
2705 break (event, allow_any)
2706 }
2707 ElementHandlerOutput::Continue { event, .. } => event,
2708 }
2709 }
2710 (s @ Self::Done__(_), event) => {
2711 self = s;
2712 break (DeserializerEvent::Continue(event), false);
2713 }
2714 (Self::Unknown__, _) => unreachable!(),
2715 }
2716 };
2717 let artifact = match self {
2718 Self::Done__(data) => DeserializerArtifact::Data(data),
2719 deserializer => DeserializerArtifact::Deserializer(deserializer),
2720 };
2721 Ok(DeserializerOutput {
2722 artifact,
2723 event,
2724 allow_any,
2725 })
2726 }
2727 fn finish<R>(self, reader: &R) -> Result<super::SchemaContent, Error>
2728 where
2729 R: DeserializeReader,
2730 {
2731 match self {
2732 Self::Init__ => Err(ErrorKind::MissingContent.into()),
2733 Self::Include(mut values, deserializer) => {
2734 if let Some(deserializer) = deserializer {
2735 let value = deserializer.finish(reader)?;
2736 Self::store_include(&mut values, value)?;
2737 }
2738 Ok(super::SchemaContent::Include(values.ok_or_else(|| {
2739 ErrorKind::MissingElement("include".into())
2740 })?))
2741 }
2742 Self::Import(mut values, deserializer) => {
2743 if let Some(deserializer) = deserializer {
2744 let value = deserializer.finish(reader)?;
2745 Self::store_import(&mut values, value)?;
2746 }
2747 Ok(super::SchemaContent::Import(values.ok_or_else(|| {
2748 ErrorKind::MissingElement("import".into())
2749 })?))
2750 }
2751 Self::Redefine(mut values, deserializer) => {
2752 if let Some(deserializer) = deserializer {
2753 let value = deserializer.finish(reader)?;
2754 Self::store_redefine(&mut values, value)?;
2755 }
2756 Ok(super::SchemaContent::Redefine(values.ok_or_else(|| {
2757 ErrorKind::MissingElement("redefine".into())
2758 })?))
2759 }
2760 Self::Override(mut values, deserializer) => {
2761 if let Some(deserializer) = deserializer {
2762 let value = deserializer.finish(reader)?;
2763 Self::store_override_(&mut values, value)?;
2764 }
2765 Ok(super::SchemaContent::Override(values.ok_or_else(|| {
2766 ErrorKind::MissingElement("override".into())
2767 })?))
2768 }
2769 Self::Annotation(mut values, deserializer) => {
2770 if let Some(deserializer) = deserializer {
2771 let value = deserializer.finish(reader)?;
2772 Self::store_annotation(&mut values, value)?;
2773 }
2774 Ok(super::SchemaContent::Annotation(values.ok_or_else(
2775 || ErrorKind::MissingElement("annotation".into()),
2776 )?))
2777 }
2778 Self::DefaultOpenContent(mut values, deserializer) => {
2779 if let Some(deserializer) = deserializer {
2780 let value = deserializer.finish(reader)?;
2781 Self::store_default_open_content(&mut values, value)?;
2782 }
2783 Ok(super::SchemaContent::DefaultOpenContent(
2784 values.ok_or_else(|| {
2785 ErrorKind::MissingElement("defaultOpenContent".into())
2786 })?,
2787 ))
2788 }
2789 Self::SimpleType(mut values, deserializer) => {
2790 if let Some(deserializer) = deserializer {
2791 let value = deserializer.finish(reader)?;
2792 Self::store_simple_type(&mut values, value)?;
2793 }
2794 Ok(super::SchemaContent::SimpleType(values.ok_or_else(
2795 || ErrorKind::MissingElement("simpleType".into()),
2796 )?))
2797 }
2798 Self::ComplexType(mut values, deserializer) => {
2799 if let Some(deserializer) = deserializer {
2800 let value = deserializer.finish(reader)?;
2801 Self::store_complex_type(&mut values, value)?;
2802 }
2803 Ok(super::SchemaContent::ComplexType(values.ok_or_else(
2804 || ErrorKind::MissingElement("complexType".into()),
2805 )?))
2806 }
2807 Self::Group(mut values, deserializer) => {
2808 if let Some(deserializer) = deserializer {
2809 let value = deserializer.finish(reader)?;
2810 Self::store_group(&mut values, value)?;
2811 }
2812 Ok(super::SchemaContent::Group(values.ok_or_else(|| {
2813 ErrorKind::MissingElement("group".into())
2814 })?))
2815 }
2816 Self::AttributeGroup(mut values, deserializer) => {
2817 if let Some(deserializer) = deserializer {
2818 let value = deserializer.finish(reader)?;
2819 Self::store_attribute_group(&mut values, value)?;
2820 }
2821 Ok(super::SchemaContent::AttributeGroup(values.ok_or_else(
2822 || ErrorKind::MissingElement("attributeGroup".into()),
2823 )?))
2824 }
2825 Self::Element(mut values, deserializer) => {
2826 if let Some(deserializer) = deserializer {
2827 let value = deserializer.finish(reader)?;
2828 Self::store_element(&mut values, value)?;
2829 }
2830 Ok(super::SchemaContent::Element(values.ok_or_else(|| {
2831 ErrorKind::MissingElement("element".into())
2832 })?))
2833 }
2834 Self::Attribute(mut values, deserializer) => {
2835 if let Some(deserializer) = deserializer {
2836 let value = deserializer.finish(reader)?;
2837 Self::store_attribute(&mut values, value)?;
2838 }
2839 Ok(super::SchemaContent::Attribute(values.ok_or_else(
2840 || ErrorKind::MissingElement("attribute".into()),
2841 )?))
2842 }
2843 Self::Notation(mut values, deserializer) => {
2844 if let Some(deserializer) = deserializer {
2845 let value = deserializer.finish(reader)?;
2846 Self::store_notation(&mut values, value)?;
2847 }
2848 Ok(super::SchemaContent::Notation(values.ok_or_else(|| {
2849 ErrorKind::MissingElement("notation".into())
2850 })?))
2851 }
2852 Self::Done__(data) => Ok(data),
2853 Self::Unknown__ => unreachable!(),
2854 }
2855 }
2856 }
2857 #[derive(Debug)]
2858 pub struct IncludeDeserializer {
2859 id: Option<String>,
2860 schema_location: String,
2861 annotation: Option<super::Annotation>,
2862 state: Box<IncludeDeserializerState>,
2863 }
2864 #[derive(Debug)]
2865 enum IncludeDeserializerState {
2866 Init__,
2867 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
2868 Done__,
2869 Unknown__,
2870 }
2871 impl IncludeDeserializer {
2872 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
2873 where
2874 R: DeserializeReader,
2875 {
2876 let mut id: Option<String> = None;
2877 let mut schema_location: Option<String> = None;
2878 for attrib in filter_xmlns_attributes(bytes_start) {
2879 let attrib = attrib?;
2880 if matches!(
2881 reader.resolve_local_name(attrib.key, &super::NS_XS),
2882 Some(b"id")
2883 ) {
2884 reader.read_attrib(&mut id, b"id", &attrib.value)?;
2885 } else if matches!(
2886 reader.resolve_local_name(attrib.key, &super::NS_XS),
2887 Some(b"schemaLocation")
2888 ) {
2889 reader.read_attrib(&mut schema_location, b"schemaLocation", &attrib.value)?;
2890 }
2891 }
2892 Ok(Self {
2893 id: id,
2894 schema_location: schema_location.ok_or_else(|| {
2895 reader.map_error(ErrorKind::MissingAttribute("schemaLocation".into()))
2896 })?,
2897 annotation: None,
2898 state: Box::new(IncludeDeserializerState::Init__),
2899 })
2900 }
2901 fn finish_state<R>(
2902 &mut self,
2903 reader: &R,
2904 state: IncludeDeserializerState,
2905 ) -> Result<(), Error>
2906 where
2907 R: DeserializeReader,
2908 {
2909 use IncludeDeserializerState as S;
2910 match state {
2911 S::Annotation(Some(deserializer)) => {
2912 self.store_annotation(deserializer.finish(reader)?)?
2913 }
2914 _ => (),
2915 }
2916 Ok(())
2917 }
2918 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
2919 if self.annotation.is_some() {
2920 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
2921 b"annotation",
2922 )))?;
2923 }
2924 self.annotation = Some(value);
2925 Ok(())
2926 }
2927 fn handle_annotation<'de, R>(
2928 &mut self,
2929 reader: &R,
2930 output: DeserializerOutput<'de, super::Annotation>,
2931 fallback: &mut Option<IncludeDeserializerState>,
2932 ) -> Result<ElementHandlerOutput<'de>, Error>
2933 where
2934 R: DeserializeReader,
2935 {
2936 let DeserializerOutput {
2937 artifact,
2938 event,
2939 allow_any,
2940 } = output;
2941 if artifact.is_none() {
2942 fallback.get_or_insert(IncludeDeserializerState::Annotation(None));
2943 *self.state = IncludeDeserializerState::Done__;
2944 return Ok(ElementHandlerOutput::from_event(event, allow_any));
2945 }
2946 if let Some(fallback) = fallback.take() {
2947 self.finish_state(reader, fallback)?;
2948 }
2949 Ok(match artifact {
2950 DeserializerArtifact::None => unreachable!(),
2951 DeserializerArtifact::Data(data) => {
2952 self.store_annotation(data)?;
2953 *self.state = IncludeDeserializerState::Done__;
2954 ElementHandlerOutput::from_event(event, allow_any)
2955 }
2956 DeserializerArtifact::Deserializer(deserializer) => {
2957 let ret = ElementHandlerOutput::from_event(event, allow_any);
2958 match &ret {
2959 ElementHandlerOutput::Continue { .. } => {
2960 fallback.get_or_insert(IncludeDeserializerState::Annotation(Some(
2961 deserializer,
2962 )));
2963 *self.state = IncludeDeserializerState::Done__;
2964 }
2965 ElementHandlerOutput::Break { .. } => {
2966 *self.state = IncludeDeserializerState::Annotation(Some(deserializer));
2967 }
2968 }
2969 ret
2970 }
2971 })
2972 }
2973 }
2974 impl<'de> Deserializer<'de, super::Include> for IncludeDeserializer {
2975 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Include>
2976 where
2977 R: DeserializeReader,
2978 {
2979 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
2980 }
2981 fn next<R>(
2982 mut self,
2983 reader: &R,
2984 event: Event<'de>,
2985 ) -> DeserializerResult<'de, super::Include>
2986 where
2987 R: DeserializeReader,
2988 {
2989 use IncludeDeserializerState as S;
2990 let mut event = event;
2991 let mut fallback = None;
2992 let mut allow_any_element = false;
2993 let (event, allow_any) = loop {
2994 let state = replace(&mut *self.state, S::Unknown__);
2995 event = match (state, event) {
2996 (S::Annotation(Some(deserializer)), event) => {
2997 let output = deserializer.next(reader, event)?;
2998 match self.handle_annotation(reader, output, &mut fallback)? {
2999 ElementHandlerOutput::Continue { event, allow_any } => {
3000 allow_any_element = allow_any_element || allow_any;
3001 event
3002 }
3003 ElementHandlerOutput::Break { event, allow_any } => {
3004 break (event, allow_any)
3005 }
3006 }
3007 }
3008 (_, Event::End(_)) => {
3009 if let Some(fallback) = fallback.take() {
3010 self.finish_state(reader, fallback)?;
3011 }
3012 return Ok(DeserializerOutput {
3013 artifact: DeserializerArtifact::Data(self.finish(reader)?),
3014 event: DeserializerEvent::None,
3015 allow_any: false,
3016 });
3017 }
3018 (S::Init__, event) => {
3019 fallback.get_or_insert(S::Init__);
3020 *self.state = IncludeDeserializerState::Annotation(None);
3021 event
3022 }
3023 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
3024 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
3025 let output =
3026 <super::Annotation as WithDeserializer>::Deserializer::init(
3027 reader, event,
3028 )?;
3029 match self.handle_annotation(reader, output, &mut fallback)? {
3030 ElementHandlerOutput::Continue { event, allow_any } => {
3031 allow_any_element = allow_any_element || allow_any;
3032 event
3033 }
3034 ElementHandlerOutput::Break { event, allow_any } => {
3035 break (event, allow_any)
3036 }
3037 }
3038 } else {
3039 *self.state = S::Done__;
3040 allow_any_element = true;
3041 fallback.get_or_insert(S::Annotation(None));
3042 event
3043 }
3044 }
3045 (S::Done__, event) => {
3046 fallback.get_or_insert(S::Done__);
3047 break (DeserializerEvent::Continue(event), allow_any_element);
3048 }
3049 (S::Unknown__, _) => unreachable!(),
3050 (state, event) => {
3051 *self.state = state;
3052 break (DeserializerEvent::Break(event), false);
3053 }
3054 }
3055 };
3056 if let Some(fallback) = fallback {
3057 *self.state = fallback;
3058 }
3059 Ok(DeserializerOutput {
3060 artifact: DeserializerArtifact::Deserializer(self),
3061 event,
3062 allow_any,
3063 })
3064 }
3065 fn finish<R>(mut self, reader: &R) -> Result<super::Include, Error>
3066 where
3067 R: DeserializeReader,
3068 {
3069 let state = replace(&mut *self.state, IncludeDeserializerState::Unknown__);
3070 self.finish_state(reader, state)?;
3071 Ok(super::Include {
3072 id: self.id,
3073 schema_location: self.schema_location,
3074 annotation: self.annotation,
3075 })
3076 }
3077 }
3078 #[derive(Debug)]
3079 pub struct ImportDeserializer {
3080 id: Option<String>,
3081 namespace: Option<String>,
3082 schema_location: Option<String>,
3083 annotation: Option<super::Annotation>,
3084 state: Box<ImportDeserializerState>,
3085 }
3086 #[derive(Debug)]
3087 enum ImportDeserializerState {
3088 Init__,
3089 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
3090 Done__,
3091 Unknown__,
3092 }
3093 impl ImportDeserializer {
3094 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
3095 where
3096 R: DeserializeReader,
3097 {
3098 let mut id: Option<String> = None;
3099 let mut namespace: Option<String> = None;
3100 let mut schema_location: Option<String> = None;
3101 for attrib in filter_xmlns_attributes(bytes_start) {
3102 let attrib = attrib?;
3103 if matches!(
3104 reader.resolve_local_name(attrib.key, &super::NS_XS),
3105 Some(b"id")
3106 ) {
3107 reader.read_attrib(&mut id, b"id", &attrib.value)?;
3108 } else if matches!(
3109 reader.resolve_local_name(attrib.key, &super::NS_XS),
3110 Some(b"namespace")
3111 ) {
3112 reader.read_attrib(&mut namespace, b"namespace", &attrib.value)?;
3113 } else if matches!(
3114 reader.resolve_local_name(attrib.key, &super::NS_XS),
3115 Some(b"schemaLocation")
3116 ) {
3117 reader.read_attrib(&mut schema_location, b"schemaLocation", &attrib.value)?;
3118 }
3119 }
3120 Ok(Self {
3121 id: id,
3122 namespace: namespace,
3123 schema_location: schema_location,
3124 annotation: None,
3125 state: Box::new(ImportDeserializerState::Init__),
3126 })
3127 }
3128 fn finish_state<R>(
3129 &mut self,
3130 reader: &R,
3131 state: ImportDeserializerState,
3132 ) -> Result<(), Error>
3133 where
3134 R: DeserializeReader,
3135 {
3136 use ImportDeserializerState as S;
3137 match state {
3138 S::Annotation(Some(deserializer)) => {
3139 self.store_annotation(deserializer.finish(reader)?)?
3140 }
3141 _ => (),
3142 }
3143 Ok(())
3144 }
3145 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
3146 if self.annotation.is_some() {
3147 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3148 b"annotation",
3149 )))?;
3150 }
3151 self.annotation = Some(value);
3152 Ok(())
3153 }
3154 fn handle_annotation<'de, R>(
3155 &mut self,
3156 reader: &R,
3157 output: DeserializerOutput<'de, super::Annotation>,
3158 fallback: &mut Option<ImportDeserializerState>,
3159 ) -> Result<ElementHandlerOutput<'de>, Error>
3160 where
3161 R: DeserializeReader,
3162 {
3163 let DeserializerOutput {
3164 artifact,
3165 event,
3166 allow_any,
3167 } = output;
3168 if artifact.is_none() {
3169 fallback.get_or_insert(ImportDeserializerState::Annotation(None));
3170 *self.state = ImportDeserializerState::Done__;
3171 return Ok(ElementHandlerOutput::from_event(event, allow_any));
3172 }
3173 if let Some(fallback) = fallback.take() {
3174 self.finish_state(reader, fallback)?;
3175 }
3176 Ok(match artifact {
3177 DeserializerArtifact::None => unreachable!(),
3178 DeserializerArtifact::Data(data) => {
3179 self.store_annotation(data)?;
3180 *self.state = ImportDeserializerState::Done__;
3181 ElementHandlerOutput::from_event(event, allow_any)
3182 }
3183 DeserializerArtifact::Deserializer(deserializer) => {
3184 let ret = ElementHandlerOutput::from_event(event, allow_any);
3185 match &ret {
3186 ElementHandlerOutput::Continue { .. } => {
3187 fallback.get_or_insert(ImportDeserializerState::Annotation(Some(
3188 deserializer,
3189 )));
3190 *self.state = ImportDeserializerState::Done__;
3191 }
3192 ElementHandlerOutput::Break { .. } => {
3193 *self.state = ImportDeserializerState::Annotation(Some(deserializer));
3194 }
3195 }
3196 ret
3197 }
3198 })
3199 }
3200 }
3201 impl<'de> Deserializer<'de, super::Import> for ImportDeserializer {
3202 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Import>
3203 where
3204 R: DeserializeReader,
3205 {
3206 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
3207 }
3208 fn next<R>(
3209 mut self,
3210 reader: &R,
3211 event: Event<'de>,
3212 ) -> DeserializerResult<'de, super::Import>
3213 where
3214 R: DeserializeReader,
3215 {
3216 use ImportDeserializerState as S;
3217 let mut event = event;
3218 let mut fallback = None;
3219 let mut allow_any_element = false;
3220 let (event, allow_any) = loop {
3221 let state = replace(&mut *self.state, S::Unknown__);
3222 event = match (state, event) {
3223 (S::Annotation(Some(deserializer)), event) => {
3224 let output = deserializer.next(reader, event)?;
3225 match self.handle_annotation(reader, output, &mut fallback)? {
3226 ElementHandlerOutput::Continue { event, allow_any } => {
3227 allow_any_element = allow_any_element || allow_any;
3228 event
3229 }
3230 ElementHandlerOutput::Break { event, allow_any } => {
3231 break (event, allow_any)
3232 }
3233 }
3234 }
3235 (_, Event::End(_)) => {
3236 if let Some(fallback) = fallback.take() {
3237 self.finish_state(reader, fallback)?;
3238 }
3239 return Ok(DeserializerOutput {
3240 artifact: DeserializerArtifact::Data(self.finish(reader)?),
3241 event: DeserializerEvent::None,
3242 allow_any: false,
3243 });
3244 }
3245 (S::Init__, event) => {
3246 fallback.get_or_insert(S::Init__);
3247 *self.state = ImportDeserializerState::Annotation(None);
3248 event
3249 }
3250 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
3251 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
3252 let output =
3253 <super::Annotation as WithDeserializer>::Deserializer::init(
3254 reader, event,
3255 )?;
3256 match self.handle_annotation(reader, output, &mut fallback)? {
3257 ElementHandlerOutput::Continue { event, allow_any } => {
3258 allow_any_element = allow_any_element || allow_any;
3259 event
3260 }
3261 ElementHandlerOutput::Break { event, allow_any } => {
3262 break (event, allow_any)
3263 }
3264 }
3265 } else {
3266 *self.state = S::Done__;
3267 allow_any_element = true;
3268 fallback.get_or_insert(S::Annotation(None));
3269 event
3270 }
3271 }
3272 (S::Done__, event) => {
3273 fallback.get_or_insert(S::Done__);
3274 break (DeserializerEvent::Continue(event), allow_any_element);
3275 }
3276 (S::Unknown__, _) => unreachable!(),
3277 (state, event) => {
3278 *self.state = state;
3279 break (DeserializerEvent::Break(event), false);
3280 }
3281 }
3282 };
3283 if let Some(fallback) = fallback {
3284 *self.state = fallback;
3285 }
3286 Ok(DeserializerOutput {
3287 artifact: DeserializerArtifact::Deserializer(self),
3288 event,
3289 allow_any,
3290 })
3291 }
3292 fn finish<R>(mut self, reader: &R) -> Result<super::Import, Error>
3293 where
3294 R: DeserializeReader,
3295 {
3296 let state = replace(&mut *self.state, ImportDeserializerState::Unknown__);
3297 self.finish_state(reader, state)?;
3298 Ok(super::Import {
3299 id: self.id,
3300 namespace: self.namespace,
3301 schema_location: self.schema_location,
3302 annotation: self.annotation,
3303 })
3304 }
3305 }
3306 #[derive(Debug)]
3307 pub struct RedefineDeserializer {
3308 schema_location: String,
3309 id: Option<String>,
3310 content: Vec<super::RedefineContent>,
3311 state: Box<RedefineDeserializerState>,
3312 }
3313 #[derive(Debug)]
3314 enum RedefineDeserializerState {
3315 Init__,
3316 Next__,
3317 Content__(<super::RedefineContent as WithDeserializer>::Deserializer),
3318 Unknown__,
3319 }
3320 impl RedefineDeserializer {
3321 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
3322 where
3323 R: DeserializeReader,
3324 {
3325 let mut schema_location: Option<String> = None;
3326 let mut id: Option<String> = None;
3327 for attrib in filter_xmlns_attributes(bytes_start) {
3328 let attrib = attrib?;
3329 if matches!(
3330 reader.resolve_local_name(attrib.key, &super::NS_XS),
3331 Some(b"schemaLocation")
3332 ) {
3333 reader.read_attrib(&mut schema_location, b"schemaLocation", &attrib.value)?;
3334 } else if matches!(
3335 reader.resolve_local_name(attrib.key, &super::NS_XS),
3336 Some(b"id")
3337 ) {
3338 reader.read_attrib(&mut id, b"id", &attrib.value)?;
3339 }
3340 }
3341 Ok(Self {
3342 schema_location: schema_location.ok_or_else(|| {
3343 reader.map_error(ErrorKind::MissingAttribute("schemaLocation".into()))
3344 })?,
3345 id: id,
3346 content: Vec::new(),
3347 state: Box::new(RedefineDeserializerState::Init__),
3348 })
3349 }
3350 fn finish_state<R>(
3351 &mut self,
3352 reader: &R,
3353 state: RedefineDeserializerState,
3354 ) -> Result<(), Error>
3355 where
3356 R: DeserializeReader,
3357 {
3358 if let RedefineDeserializerState::Content__(deserializer) = state {
3359 self.store_content(deserializer.finish(reader)?)?;
3360 }
3361 Ok(())
3362 }
3363 fn store_content(&mut self, value: super::RedefineContent) -> Result<(), Error> {
3364 self.content.push(value);
3365 Ok(())
3366 }
3367 fn handle_content<'de, R>(
3368 &mut self,
3369 reader: &R,
3370 output: DeserializerOutput<'de, super::RedefineContent>,
3371 fallback: &mut Option<RedefineDeserializerState>,
3372 ) -> Result<ElementHandlerOutput<'de>, Error>
3373 where
3374 R: DeserializeReader,
3375 {
3376 let DeserializerOutput {
3377 artifact,
3378 event,
3379 allow_any,
3380 } = output;
3381 if artifact.is_none() {
3382 *self.state = fallback.take().unwrap_or(RedefineDeserializerState::Next__);
3383 return Ok(ElementHandlerOutput::break_(event, allow_any));
3384 }
3385 if let Some(fallback) = fallback.take() {
3386 self.finish_state(reader, fallback)?;
3387 }
3388 Ok(match artifact {
3389 DeserializerArtifact::None => unreachable!(),
3390 DeserializerArtifact::Data(data) => {
3391 self.store_content(data)?;
3392 *self.state = RedefineDeserializerState::Next__;
3393 ElementHandlerOutput::from_event(event, allow_any)
3394 }
3395 DeserializerArtifact::Deserializer(deserializer) => {
3396 let ret = ElementHandlerOutput::from_event(event, allow_any);
3397 match &ret {
3398 ElementHandlerOutput::Continue { .. } => {
3399 fallback
3400 .get_or_insert(RedefineDeserializerState::Content__(deserializer));
3401 *self.state = RedefineDeserializerState::Next__;
3402 }
3403 ElementHandlerOutput::Break { .. } => {
3404 *self.state = RedefineDeserializerState::Content__(deserializer);
3405 }
3406 }
3407 ret
3408 }
3409 })
3410 }
3411 }
3412 impl<'de> Deserializer<'de, super::Redefine> for RedefineDeserializer {
3413 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Redefine>
3414 where
3415 R: DeserializeReader,
3416 {
3417 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
3418 }
3419 fn next<R>(
3420 mut self,
3421 reader: &R,
3422 event: Event<'de>,
3423 ) -> DeserializerResult<'de, super::Redefine>
3424 where
3425 R: DeserializeReader,
3426 {
3427 use RedefineDeserializerState as S;
3428 let mut event = event;
3429 let mut fallback = None;
3430 let (event, allow_any) = loop {
3431 let state = replace(&mut *self.state, S::Unknown__);
3432 event = match (state, event) {
3433 (S::Content__(deserializer), event) => {
3434 let output = deserializer.next(reader, event)?;
3435 match self.handle_content(reader, output, &mut fallback)? {
3436 ElementHandlerOutput::Break { event, allow_any } => {
3437 break (event, allow_any)
3438 }
3439 ElementHandlerOutput::Continue { event, .. } => event,
3440 }
3441 }
3442 (_, Event::End(_)) => {
3443 return Ok(DeserializerOutput {
3444 artifact: DeserializerArtifact::Data(self.finish(reader)?),
3445 event: DeserializerEvent::None,
3446 allow_any: false,
3447 });
3448 }
3449 (old_state @ (S::Init__ | S::Next__), event) => {
3450 let output =
3451 <super::RedefineContent as WithDeserializer>::Deserializer::init(
3452 reader, event,
3453 )?;
3454 match self.handle_content(reader, output, &mut fallback)? {
3455 ElementHandlerOutput::Break { event, allow_any } => {
3456 if matches!(&*self.state, S::Unknown__) {
3457 *self.state = old_state;
3458 }
3459 break (event, allow_any);
3460 }
3461 ElementHandlerOutput::Continue { event, .. } => event,
3462 }
3463 }
3464 (S::Unknown__, _) => unreachable!(),
3465 }
3466 };
3467 Ok(DeserializerOutput {
3468 artifact: DeserializerArtifact::Deserializer(self),
3469 event,
3470 allow_any,
3471 })
3472 }
3473 fn finish<R>(mut self, reader: &R) -> Result<super::Redefine, Error>
3474 where
3475 R: DeserializeReader,
3476 {
3477 let state = replace(&mut *self.state, RedefineDeserializerState::Unknown__);
3478 self.finish_state(reader, state)?;
3479 Ok(super::Redefine {
3480 schema_location: self.schema_location,
3481 id: self.id,
3482 content: self.content,
3483 })
3484 }
3485 }
3486 #[derive(Debug)]
3487 pub enum RedefineContentDeserializer {
3488 Init__,
3489 Annotation(
3490 Option<super::Annotation>,
3491 Option<<super::Annotation as WithDeserializer>::Deserializer>,
3492 ),
3493 SimpleType(
3494 Option<super::SimpleBaseType>,
3495 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
3496 ),
3497 ComplexType(
3498 Option<super::ComplexBaseType>,
3499 Option<<super::ComplexBaseType as WithDeserializer>::Deserializer>,
3500 ),
3501 Group(
3502 Option<super::GroupType>,
3503 Option<<super::GroupType as WithDeserializer>::Deserializer>,
3504 ),
3505 AttributeGroup(
3506 Option<super::AttributeGroupType>,
3507 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
3508 ),
3509 Done__(super::RedefineContent),
3510 Unknown__,
3511 }
3512 impl RedefineContentDeserializer {
3513 fn find_suitable<'de, R>(
3514 &mut self,
3515 reader: &R,
3516 event: Event<'de>,
3517 fallback: &mut Option<RedefineContentDeserializer>,
3518 ) -> Result<ElementHandlerOutput<'de>, Error>
3519 where
3520 R: DeserializeReader,
3521 {
3522 let (Event::Start(x) | Event::Empty(x)) = &event else {
3523 *self = Self::Init__;
3524 return Ok(ElementHandlerOutput::return_to_parent(event, false));
3525 };
3526 if matches!(
3527 reader.resolve_local_name(x.name(), &super::NS_XS),
3528 Some(b"annotation")
3529 ) {
3530 let output =
3531 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
3532 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
3533 }
3534 if matches!(
3535 reader.resolve_local_name(x.name(), &super::NS_XS),
3536 Some(b"simpleType")
3537 ) {
3538 let output =
3539 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(reader, event)?;
3540 return self.handle_simple_type(reader, Default::default(), output, &mut *fallback);
3541 }
3542 if matches!(
3543 reader.resolve_local_name(x.name(), &super::NS_XS),
3544 Some(b"complexType")
3545 ) {
3546 let output = <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
3547 reader, event,
3548 )?;
3549 return self.handle_complex_type(
3550 reader,
3551 Default::default(),
3552 output,
3553 &mut *fallback,
3554 );
3555 }
3556 if matches!(
3557 reader.resolve_local_name(x.name(), &super::NS_XS),
3558 Some(b"group")
3559 ) {
3560 let output =
3561 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
3562 return self.handle_group(reader, Default::default(), output, &mut *fallback);
3563 }
3564 if matches!(
3565 reader.resolve_local_name(x.name(), &super::NS_XS),
3566 Some(b"attributeGroup")
3567 ) {
3568 let output = <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
3569 reader, event,
3570 )?;
3571 return self.handle_attribute_group(
3572 reader,
3573 Default::default(),
3574 output,
3575 &mut *fallback,
3576 );
3577 }
3578 *self = Self::Init__;
3579 Ok(ElementHandlerOutput::return_to_parent(event, false))
3580 }
3581 fn store_annotation(
3582 values: &mut Option<super::Annotation>,
3583 value: super::Annotation,
3584 ) -> Result<(), Error> {
3585 if values.is_some() {
3586 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3587 b"annotation",
3588 )))?;
3589 }
3590 *values = Some(value);
3591 Ok(())
3592 }
3593 fn store_simple_type(
3594 values: &mut Option<super::SimpleBaseType>,
3595 value: super::SimpleBaseType,
3596 ) -> Result<(), Error> {
3597 if values.is_some() {
3598 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3599 b"simpleType",
3600 )))?;
3601 }
3602 *values = Some(value);
3603 Ok(())
3604 }
3605 fn store_complex_type(
3606 values: &mut Option<super::ComplexBaseType>,
3607 value: super::ComplexBaseType,
3608 ) -> Result<(), Error> {
3609 if values.is_some() {
3610 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3611 b"complexType",
3612 )))?;
3613 }
3614 *values = Some(value);
3615 Ok(())
3616 }
3617 fn store_group(
3618 values: &mut Option<super::GroupType>,
3619 value: super::GroupType,
3620 ) -> Result<(), Error> {
3621 if values.is_some() {
3622 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3623 b"group",
3624 )))?;
3625 }
3626 *values = Some(value);
3627 Ok(())
3628 }
3629 fn store_attribute_group(
3630 values: &mut Option<super::AttributeGroupType>,
3631 value: super::AttributeGroupType,
3632 ) -> Result<(), Error> {
3633 if values.is_some() {
3634 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
3635 b"attributeGroup",
3636 )))?;
3637 }
3638 *values = Some(value);
3639 Ok(())
3640 }
3641 fn handle_annotation<'de, R>(
3642 &mut self,
3643 reader: &R,
3644 mut values: Option<super::Annotation>,
3645 output: DeserializerOutput<'de, super::Annotation>,
3646 fallback: &mut Option<Self>,
3647 ) -> Result<ElementHandlerOutput<'de>, Error>
3648 where
3649 R: DeserializeReader,
3650 {
3651 let DeserializerOutput {
3652 artifact,
3653 event,
3654 allow_any,
3655 } = output;
3656 if artifact.is_none() {
3657 *self = match fallback.take() {
3658 None => Self::Init__,
3659 Some(Self::Annotation(_, Some(deserializer))) => {
3660 Self::Annotation(values, Some(deserializer))
3661 }
3662 _ => unreachable!(),
3663 };
3664 return Ok(ElementHandlerOutput::break_(event, allow_any));
3665 }
3666 match fallback.take() {
3667 None => (),
3668 Some(Self::Annotation(_, Some(deserializer))) => {
3669 let data = deserializer.finish(reader)?;
3670 Self::store_annotation(&mut values, data)?;
3671 }
3672 Some(_) => unreachable!(),
3673 }
3674 Ok(match artifact {
3675 DeserializerArtifact::None => unreachable!(),
3676 DeserializerArtifact::Data(data) => {
3677 Self::store_annotation(&mut values, data)?;
3678 let data = Self::Annotation(values, None).finish(reader)?;
3679 *self = Self::Done__(data);
3680 ElementHandlerOutput::Break { event, allow_any }
3681 }
3682 DeserializerArtifact::Deserializer(deserializer) => {
3683 *self = Self::Annotation(values, Some(deserializer));
3684 ElementHandlerOutput::from_event_end(event, allow_any)
3685 }
3686 })
3687 }
3688 fn handle_simple_type<'de, R>(
3689 &mut self,
3690 reader: &R,
3691 mut values: Option<super::SimpleBaseType>,
3692 output: DeserializerOutput<'de, super::SimpleBaseType>,
3693 fallback: &mut Option<Self>,
3694 ) -> Result<ElementHandlerOutput<'de>, Error>
3695 where
3696 R: DeserializeReader,
3697 {
3698 let DeserializerOutput {
3699 artifact,
3700 event,
3701 allow_any,
3702 } = output;
3703 if artifact.is_none() {
3704 *self = match fallback.take() {
3705 None => Self::Init__,
3706 Some(Self::SimpleType(_, Some(deserializer))) => {
3707 Self::SimpleType(values, Some(deserializer))
3708 }
3709 _ => unreachable!(),
3710 };
3711 return Ok(ElementHandlerOutput::break_(event, allow_any));
3712 }
3713 match fallback.take() {
3714 None => (),
3715 Some(Self::SimpleType(_, Some(deserializer))) => {
3716 let data = deserializer.finish(reader)?;
3717 Self::store_simple_type(&mut values, data)?;
3718 }
3719 Some(_) => unreachable!(),
3720 }
3721 Ok(match artifact {
3722 DeserializerArtifact::None => unreachable!(),
3723 DeserializerArtifact::Data(data) => {
3724 Self::store_simple_type(&mut values, data)?;
3725 let data = Self::SimpleType(values, None).finish(reader)?;
3726 *self = Self::Done__(data);
3727 ElementHandlerOutput::Break { event, allow_any }
3728 }
3729 DeserializerArtifact::Deserializer(deserializer) => {
3730 *self = Self::SimpleType(values, Some(deserializer));
3731 ElementHandlerOutput::from_event_end(event, allow_any)
3732 }
3733 })
3734 }
3735 fn handle_complex_type<'de, R>(
3736 &mut self,
3737 reader: &R,
3738 mut values: Option<super::ComplexBaseType>,
3739 output: DeserializerOutput<'de, super::ComplexBaseType>,
3740 fallback: &mut Option<Self>,
3741 ) -> Result<ElementHandlerOutput<'de>, Error>
3742 where
3743 R: DeserializeReader,
3744 {
3745 let DeserializerOutput {
3746 artifact,
3747 event,
3748 allow_any,
3749 } = output;
3750 if artifact.is_none() {
3751 *self = match fallback.take() {
3752 None => Self::Init__,
3753 Some(Self::ComplexType(_, Some(deserializer))) => {
3754 Self::ComplexType(values, Some(deserializer))
3755 }
3756 _ => unreachable!(),
3757 };
3758 return Ok(ElementHandlerOutput::break_(event, allow_any));
3759 }
3760 match fallback.take() {
3761 None => (),
3762 Some(Self::ComplexType(_, Some(deserializer))) => {
3763 let data = deserializer.finish(reader)?;
3764 Self::store_complex_type(&mut values, data)?;
3765 }
3766 Some(_) => unreachable!(),
3767 }
3768 Ok(match artifact {
3769 DeserializerArtifact::None => unreachable!(),
3770 DeserializerArtifact::Data(data) => {
3771 Self::store_complex_type(&mut values, data)?;
3772 let data = Self::ComplexType(values, None).finish(reader)?;
3773 *self = Self::Done__(data);
3774 ElementHandlerOutput::Break { event, allow_any }
3775 }
3776 DeserializerArtifact::Deserializer(deserializer) => {
3777 *self = Self::ComplexType(values, Some(deserializer));
3778 ElementHandlerOutput::from_event_end(event, allow_any)
3779 }
3780 })
3781 }
3782 fn handle_group<'de, R>(
3783 &mut self,
3784 reader: &R,
3785 mut values: Option<super::GroupType>,
3786 output: DeserializerOutput<'de, super::GroupType>,
3787 fallback: &mut Option<Self>,
3788 ) -> Result<ElementHandlerOutput<'de>, Error>
3789 where
3790 R: DeserializeReader,
3791 {
3792 let DeserializerOutput {
3793 artifact,
3794 event,
3795 allow_any,
3796 } = output;
3797 if artifact.is_none() {
3798 *self = match fallback.take() {
3799 None => Self::Init__,
3800 Some(Self::Group(_, Some(deserializer))) => {
3801 Self::Group(values, Some(deserializer))
3802 }
3803 _ => unreachable!(),
3804 };
3805 return Ok(ElementHandlerOutput::break_(event, allow_any));
3806 }
3807 match fallback.take() {
3808 None => (),
3809 Some(Self::Group(_, Some(deserializer))) => {
3810 let data = deserializer.finish(reader)?;
3811 Self::store_group(&mut values, data)?;
3812 }
3813 Some(_) => unreachable!(),
3814 }
3815 Ok(match artifact {
3816 DeserializerArtifact::None => unreachable!(),
3817 DeserializerArtifact::Data(data) => {
3818 Self::store_group(&mut values, data)?;
3819 let data = Self::Group(values, None).finish(reader)?;
3820 *self = Self::Done__(data);
3821 ElementHandlerOutput::Break { event, allow_any }
3822 }
3823 DeserializerArtifact::Deserializer(deserializer) => {
3824 *self = Self::Group(values, Some(deserializer));
3825 ElementHandlerOutput::from_event_end(event, allow_any)
3826 }
3827 })
3828 }
3829 fn handle_attribute_group<'de, R>(
3830 &mut self,
3831 reader: &R,
3832 mut values: Option<super::AttributeGroupType>,
3833 output: DeserializerOutput<'de, super::AttributeGroupType>,
3834 fallback: &mut Option<Self>,
3835 ) -> Result<ElementHandlerOutput<'de>, Error>
3836 where
3837 R: DeserializeReader,
3838 {
3839 let DeserializerOutput {
3840 artifact,
3841 event,
3842 allow_any,
3843 } = output;
3844 if artifact.is_none() {
3845 *self = match fallback.take() {
3846 None => Self::Init__,
3847 Some(Self::AttributeGroup(_, Some(deserializer))) => {
3848 Self::AttributeGroup(values, Some(deserializer))
3849 }
3850 _ => unreachable!(),
3851 };
3852 return Ok(ElementHandlerOutput::break_(event, allow_any));
3853 }
3854 match fallback.take() {
3855 None => (),
3856 Some(Self::AttributeGroup(_, Some(deserializer))) => {
3857 let data = deserializer.finish(reader)?;
3858 Self::store_attribute_group(&mut values, data)?;
3859 }
3860 Some(_) => unreachable!(),
3861 }
3862 Ok(match artifact {
3863 DeserializerArtifact::None => unreachable!(),
3864 DeserializerArtifact::Data(data) => {
3865 Self::store_attribute_group(&mut values, data)?;
3866 let data = Self::AttributeGroup(values, None).finish(reader)?;
3867 *self = Self::Done__(data);
3868 ElementHandlerOutput::Break { event, allow_any }
3869 }
3870 DeserializerArtifact::Deserializer(deserializer) => {
3871 *self = Self::AttributeGroup(values, Some(deserializer));
3872 ElementHandlerOutput::from_event_end(event, allow_any)
3873 }
3874 })
3875 }
3876 }
3877 impl<'de> Deserializer<'de, super::RedefineContent> for RedefineContentDeserializer {
3878 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::RedefineContent>
3879 where
3880 R: DeserializeReader,
3881 {
3882 let deserializer = Self::Init__;
3883 let mut output = deserializer.next(reader, event)?;
3884 output.artifact = match output.artifact {
3885 DeserializerArtifact::Deserializer(Self::Init__) => DeserializerArtifact::None,
3886 artifact => artifact,
3887 };
3888 Ok(output)
3889 }
3890 fn next<R>(
3891 mut self,
3892 reader: &R,
3893 event: Event<'de>,
3894 ) -> DeserializerResult<'de, super::RedefineContent>
3895 where
3896 R: DeserializeReader,
3897 {
3898 let mut event = event;
3899 let mut fallback = None;
3900 let (event, allow_any) = loop {
3901 let state = replace(&mut self, Self::Unknown__);
3902 event = match (state, event) {
3903 (Self::Annotation(values, Some(deserializer)), event) => {
3904 let output = deserializer.next(reader, event)?;
3905 match self.handle_annotation(reader, values, output, &mut fallback)? {
3906 ElementHandlerOutput::Break { event, allow_any } => {
3907 break (event, allow_any)
3908 }
3909 ElementHandlerOutput::Continue { event, .. } => event,
3910 }
3911 }
3912 (Self::SimpleType(values, Some(deserializer)), event) => {
3913 let output = deserializer.next(reader, event)?;
3914 match self.handle_simple_type(reader, values, output, &mut fallback)? {
3915 ElementHandlerOutput::Break { event, allow_any } => {
3916 break (event, allow_any)
3917 }
3918 ElementHandlerOutput::Continue { event, .. } => event,
3919 }
3920 }
3921 (Self::ComplexType(values, Some(deserializer)), event) => {
3922 let output = deserializer.next(reader, event)?;
3923 match self.handle_complex_type(reader, values, output, &mut fallback)? {
3924 ElementHandlerOutput::Break { event, allow_any } => {
3925 break (event, allow_any)
3926 }
3927 ElementHandlerOutput::Continue { event, .. } => event,
3928 }
3929 }
3930 (Self::Group(values, Some(deserializer)), event) => {
3931 let output = deserializer.next(reader, event)?;
3932 match self.handle_group(reader, values, output, &mut fallback)? {
3933 ElementHandlerOutput::Break { event, allow_any } => {
3934 break (event, allow_any)
3935 }
3936 ElementHandlerOutput::Continue { event, .. } => event,
3937 }
3938 }
3939 (Self::AttributeGroup(values, Some(deserializer)), event) => {
3940 let output = deserializer.next(reader, event)?;
3941 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
3942 ElementHandlerOutput::Break { event, allow_any } => {
3943 break (event, allow_any)
3944 }
3945 ElementHandlerOutput::Continue { event, .. } => event,
3946 }
3947 }
3948 (state, event @ Event::End(_)) => {
3949 return Ok(DeserializerOutput {
3950 artifact: DeserializerArtifact::Data(state.finish(reader)?),
3951 event: DeserializerEvent::Continue(event),
3952 allow_any: false,
3953 });
3954 }
3955 (Self::Init__, event) => {
3956 match self.find_suitable(reader, event, &mut fallback)? {
3957 ElementHandlerOutput::Break { event, allow_any } => {
3958 break (event, allow_any)
3959 }
3960 ElementHandlerOutput::Continue { event, .. } => event,
3961 }
3962 }
3963 (Self::Annotation(values, None), event) => {
3964 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
3965 reader, event,
3966 )?;
3967 match self.handle_annotation(reader, values, output, &mut fallback)? {
3968 ElementHandlerOutput::Break { event, allow_any } => {
3969 break (event, allow_any)
3970 }
3971 ElementHandlerOutput::Continue { event, .. } => event,
3972 }
3973 }
3974 (Self::SimpleType(values, None), event) => {
3975 let output =
3976 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
3977 reader, event,
3978 )?;
3979 match self.handle_simple_type(reader, values, output, &mut fallback)? {
3980 ElementHandlerOutput::Break { event, allow_any } => {
3981 break (event, allow_any)
3982 }
3983 ElementHandlerOutput::Continue { event, .. } => event,
3984 }
3985 }
3986 (Self::ComplexType(values, None), event) => {
3987 let output =
3988 <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
3989 reader, event,
3990 )?;
3991 match self.handle_complex_type(reader, values, output, &mut fallback)? {
3992 ElementHandlerOutput::Break { event, allow_any } => {
3993 break (event, allow_any)
3994 }
3995 ElementHandlerOutput::Continue { event, .. } => event,
3996 }
3997 }
3998 (Self::Group(values, None), event) => {
3999 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
4000 reader, event,
4001 )?;
4002 match self.handle_group(reader, values, output, &mut fallback)? {
4003 ElementHandlerOutput::Break { event, allow_any } => {
4004 break (event, allow_any)
4005 }
4006 ElementHandlerOutput::Continue { event, .. } => event,
4007 }
4008 }
4009 (Self::AttributeGroup(values, None), event) => {
4010 let output =
4011 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
4012 reader, event,
4013 )?;
4014 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
4015 ElementHandlerOutput::Break { event, allow_any } => {
4016 break (event, allow_any)
4017 }
4018 ElementHandlerOutput::Continue { event, .. } => event,
4019 }
4020 }
4021 (s @ Self::Done__(_), event) => {
4022 self = s;
4023 break (DeserializerEvent::Continue(event), false);
4024 }
4025 (Self::Unknown__, _) => unreachable!(),
4026 }
4027 };
4028 let artifact = match self {
4029 Self::Done__(data) => DeserializerArtifact::Data(data),
4030 deserializer => DeserializerArtifact::Deserializer(deserializer),
4031 };
4032 Ok(DeserializerOutput {
4033 artifact,
4034 event,
4035 allow_any,
4036 })
4037 }
4038 fn finish<R>(self, reader: &R) -> Result<super::RedefineContent, Error>
4039 where
4040 R: DeserializeReader,
4041 {
4042 match self {
4043 Self::Init__ => Err(ErrorKind::MissingContent.into()),
4044 Self::Annotation(mut values, deserializer) => {
4045 if let Some(deserializer) = deserializer {
4046 let value = deserializer.finish(reader)?;
4047 Self::store_annotation(&mut values, value)?;
4048 }
4049 Ok(super::RedefineContent::Annotation(values.ok_or_else(
4050 || ErrorKind::MissingElement("annotation".into()),
4051 )?))
4052 }
4053 Self::SimpleType(mut values, deserializer) => {
4054 if let Some(deserializer) = deserializer {
4055 let value = deserializer.finish(reader)?;
4056 Self::store_simple_type(&mut values, value)?;
4057 }
4058 Ok(super::RedefineContent::SimpleType(values.ok_or_else(
4059 || ErrorKind::MissingElement("simpleType".into()),
4060 )?))
4061 }
4062 Self::ComplexType(mut values, deserializer) => {
4063 if let Some(deserializer) = deserializer {
4064 let value = deserializer.finish(reader)?;
4065 Self::store_complex_type(&mut values, value)?;
4066 }
4067 Ok(super::RedefineContent::ComplexType(values.ok_or_else(
4068 || ErrorKind::MissingElement("complexType".into()),
4069 )?))
4070 }
4071 Self::Group(mut values, deserializer) => {
4072 if let Some(deserializer) = deserializer {
4073 let value = deserializer.finish(reader)?;
4074 Self::store_group(&mut values, value)?;
4075 }
4076 Ok(super::RedefineContent::Group(values.ok_or_else(|| {
4077 ErrorKind::MissingElement("group".into())
4078 })?))
4079 }
4080 Self::AttributeGroup(mut values, deserializer) => {
4081 if let Some(deserializer) = deserializer {
4082 let value = deserializer.finish(reader)?;
4083 Self::store_attribute_group(&mut values, value)?;
4084 }
4085 Ok(super::RedefineContent::AttributeGroup(values.ok_or_else(
4086 || ErrorKind::MissingElement("attributeGroup".into()),
4087 )?))
4088 }
4089 Self::Done__(data) => Ok(data),
4090 Self::Unknown__ => unreachable!(),
4091 }
4092 }
4093 }
4094 #[derive(Debug)]
4095 pub struct OverrideDeserializer {
4096 schema_location: String,
4097 id: Option<String>,
4098 content: Vec<super::OverrideContent>,
4099 state: Box<OverrideDeserializerState>,
4100 }
4101 #[derive(Debug)]
4102 enum OverrideDeserializerState {
4103 Init__,
4104 Next__,
4105 Content__(<super::OverrideContent as WithDeserializer>::Deserializer),
4106 Unknown__,
4107 }
4108 impl OverrideDeserializer {
4109 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
4110 where
4111 R: DeserializeReader,
4112 {
4113 let mut schema_location: Option<String> = None;
4114 let mut id: Option<String> = None;
4115 for attrib in filter_xmlns_attributes(bytes_start) {
4116 let attrib = attrib?;
4117 if matches!(
4118 reader.resolve_local_name(attrib.key, &super::NS_XS),
4119 Some(b"schemaLocation")
4120 ) {
4121 reader.read_attrib(&mut schema_location, b"schemaLocation", &attrib.value)?;
4122 } else if matches!(
4123 reader.resolve_local_name(attrib.key, &super::NS_XS),
4124 Some(b"id")
4125 ) {
4126 reader.read_attrib(&mut id, b"id", &attrib.value)?;
4127 }
4128 }
4129 Ok(Self {
4130 schema_location: schema_location.ok_or_else(|| {
4131 reader.map_error(ErrorKind::MissingAttribute("schemaLocation".into()))
4132 })?,
4133 id: id,
4134 content: Vec::new(),
4135 state: Box::new(OverrideDeserializerState::Init__),
4136 })
4137 }
4138 fn finish_state<R>(
4139 &mut self,
4140 reader: &R,
4141 state: OverrideDeserializerState,
4142 ) -> Result<(), Error>
4143 where
4144 R: DeserializeReader,
4145 {
4146 if let OverrideDeserializerState::Content__(deserializer) = state {
4147 self.store_content(deserializer.finish(reader)?)?;
4148 }
4149 Ok(())
4150 }
4151 fn store_content(&mut self, value: super::OverrideContent) -> Result<(), Error> {
4152 self.content.push(value);
4153 Ok(())
4154 }
4155 fn handle_content<'de, R>(
4156 &mut self,
4157 reader: &R,
4158 output: DeserializerOutput<'de, super::OverrideContent>,
4159 fallback: &mut Option<OverrideDeserializerState>,
4160 ) -> Result<ElementHandlerOutput<'de>, Error>
4161 where
4162 R: DeserializeReader,
4163 {
4164 let DeserializerOutput {
4165 artifact,
4166 event,
4167 allow_any,
4168 } = output;
4169 if artifact.is_none() {
4170 *self.state = fallback.take().unwrap_or(OverrideDeserializerState::Next__);
4171 return Ok(ElementHandlerOutput::break_(event, allow_any));
4172 }
4173 if let Some(fallback) = fallback.take() {
4174 self.finish_state(reader, fallback)?;
4175 }
4176 Ok(match artifact {
4177 DeserializerArtifact::None => unreachable!(),
4178 DeserializerArtifact::Data(data) => {
4179 self.store_content(data)?;
4180 *self.state = OverrideDeserializerState::Next__;
4181 ElementHandlerOutput::from_event(event, allow_any)
4182 }
4183 DeserializerArtifact::Deserializer(deserializer) => {
4184 let ret = ElementHandlerOutput::from_event(event, allow_any);
4185 match &ret {
4186 ElementHandlerOutput::Continue { .. } => {
4187 fallback
4188 .get_or_insert(OverrideDeserializerState::Content__(deserializer));
4189 *self.state = OverrideDeserializerState::Next__;
4190 }
4191 ElementHandlerOutput::Break { .. } => {
4192 *self.state = OverrideDeserializerState::Content__(deserializer);
4193 }
4194 }
4195 ret
4196 }
4197 })
4198 }
4199 }
4200 impl<'de> Deserializer<'de, super::Override> for OverrideDeserializer {
4201 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Override>
4202 where
4203 R: DeserializeReader,
4204 {
4205 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
4206 }
4207 fn next<R>(
4208 mut self,
4209 reader: &R,
4210 event: Event<'de>,
4211 ) -> DeserializerResult<'de, super::Override>
4212 where
4213 R: DeserializeReader,
4214 {
4215 use OverrideDeserializerState as S;
4216 let mut event = event;
4217 let mut fallback = None;
4218 let (event, allow_any) = loop {
4219 let state = replace(&mut *self.state, S::Unknown__);
4220 event = match (state, event) {
4221 (S::Content__(deserializer), event) => {
4222 let output = deserializer.next(reader, event)?;
4223 match self.handle_content(reader, output, &mut fallback)? {
4224 ElementHandlerOutput::Break { event, allow_any } => {
4225 break (event, allow_any)
4226 }
4227 ElementHandlerOutput::Continue { event, .. } => event,
4228 }
4229 }
4230 (_, Event::End(_)) => {
4231 return Ok(DeserializerOutput {
4232 artifact: DeserializerArtifact::Data(self.finish(reader)?),
4233 event: DeserializerEvent::None,
4234 allow_any: false,
4235 });
4236 }
4237 (old_state @ (S::Init__ | S::Next__), event) => {
4238 let output =
4239 <super::OverrideContent as WithDeserializer>::Deserializer::init(
4240 reader, event,
4241 )?;
4242 match self.handle_content(reader, output, &mut fallback)? {
4243 ElementHandlerOutput::Break { event, allow_any } => {
4244 if matches!(&*self.state, S::Unknown__) {
4245 *self.state = old_state;
4246 }
4247 break (event, allow_any);
4248 }
4249 ElementHandlerOutput::Continue { event, .. } => event,
4250 }
4251 }
4252 (S::Unknown__, _) => unreachable!(),
4253 }
4254 };
4255 Ok(DeserializerOutput {
4256 artifact: DeserializerArtifact::Deserializer(self),
4257 event,
4258 allow_any,
4259 })
4260 }
4261 fn finish<R>(mut self, reader: &R) -> Result<super::Override, Error>
4262 where
4263 R: DeserializeReader,
4264 {
4265 let state = replace(&mut *self.state, OverrideDeserializerState::Unknown__);
4266 self.finish_state(reader, state)?;
4267 Ok(super::Override {
4268 schema_location: self.schema_location,
4269 id: self.id,
4270 content: self.content,
4271 })
4272 }
4273 }
4274 #[derive(Debug)]
4275 pub enum OverrideContentDeserializer {
4276 Init__,
4277 Annotation(
4278 Option<super::Annotation>,
4279 Option<<super::Annotation as WithDeserializer>::Deserializer>,
4280 ),
4281 SimpleType(
4282 Option<super::SimpleBaseType>,
4283 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
4284 ),
4285 ComplexType(
4286 Option<super::ComplexBaseType>,
4287 Option<<super::ComplexBaseType as WithDeserializer>::Deserializer>,
4288 ),
4289 Group(
4290 Option<super::GroupType>,
4291 Option<<super::GroupType as WithDeserializer>::Deserializer>,
4292 ),
4293 AttributeGroup(
4294 Option<super::AttributeGroupType>,
4295 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
4296 ),
4297 Element(
4298 Option<super::ElementType>,
4299 Option<<super::ElementType as WithDeserializer>::Deserializer>,
4300 ),
4301 Attribute(
4302 Option<super::AttributeType>,
4303 Option<<super::AttributeType as WithDeserializer>::Deserializer>,
4304 ),
4305 Notation(
4306 Option<super::Notation>,
4307 Option<<super::Notation as WithDeserializer>::Deserializer>,
4308 ),
4309 Done__(super::OverrideContent),
4310 Unknown__,
4311 }
4312 impl OverrideContentDeserializer {
4313 fn find_suitable<'de, R>(
4314 &mut self,
4315 reader: &R,
4316 event: Event<'de>,
4317 fallback: &mut Option<OverrideContentDeserializer>,
4318 ) -> Result<ElementHandlerOutput<'de>, Error>
4319 where
4320 R: DeserializeReader,
4321 {
4322 let (Event::Start(x) | Event::Empty(x)) = &event else {
4323 *self = Self::Init__;
4324 return Ok(ElementHandlerOutput::return_to_parent(event, false));
4325 };
4326 if matches!(
4327 reader.resolve_local_name(x.name(), &super::NS_XS),
4328 Some(b"annotation")
4329 ) {
4330 let output =
4331 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
4332 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
4333 }
4334 if matches!(
4335 reader.resolve_local_name(x.name(), &super::NS_XS),
4336 Some(b"simpleType")
4337 ) {
4338 let output =
4339 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(reader, event)?;
4340 return self.handle_simple_type(reader, Default::default(), output, &mut *fallback);
4341 }
4342 if matches!(
4343 reader.resolve_local_name(x.name(), &super::NS_XS),
4344 Some(b"complexType")
4345 ) {
4346 let output = <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
4347 reader, event,
4348 )?;
4349 return self.handle_complex_type(
4350 reader,
4351 Default::default(),
4352 output,
4353 &mut *fallback,
4354 );
4355 }
4356 if matches!(
4357 reader.resolve_local_name(x.name(), &super::NS_XS),
4358 Some(b"group")
4359 ) {
4360 let output =
4361 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
4362 return self.handle_group(reader, Default::default(), output, &mut *fallback);
4363 }
4364 if matches!(
4365 reader.resolve_local_name(x.name(), &super::NS_XS),
4366 Some(b"attributeGroup")
4367 ) {
4368 let output = <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
4369 reader, event,
4370 )?;
4371 return self.handle_attribute_group(
4372 reader,
4373 Default::default(),
4374 output,
4375 &mut *fallback,
4376 );
4377 }
4378 if matches!(
4379 reader.resolve_local_name(x.name(), &super::NS_XS),
4380 Some(b"element")
4381 ) {
4382 let output =
4383 <super::ElementType as WithDeserializer>::Deserializer::init(reader, event)?;
4384 return self.handle_element(reader, Default::default(), output, &mut *fallback);
4385 }
4386 if matches!(
4387 reader.resolve_local_name(x.name(), &super::NS_XS),
4388 Some(b"attribute")
4389 ) {
4390 let output =
4391 <super::AttributeType as WithDeserializer>::Deserializer::init(reader, event)?;
4392 return self.handle_attribute(reader, Default::default(), output, &mut *fallback);
4393 }
4394 if matches!(
4395 reader.resolve_local_name(x.name(), &super::NS_XS),
4396 Some(b"notation")
4397 ) {
4398 let output =
4399 <super::Notation as WithDeserializer>::Deserializer::init(reader, event)?;
4400 return self.handle_notation(reader, Default::default(), output, &mut *fallback);
4401 }
4402 *self = Self::Init__;
4403 Ok(ElementHandlerOutput::return_to_parent(event, false))
4404 }
4405 fn store_annotation(
4406 values: &mut Option<super::Annotation>,
4407 value: super::Annotation,
4408 ) -> Result<(), Error> {
4409 if values.is_some() {
4410 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4411 b"annotation",
4412 )))?;
4413 }
4414 *values = Some(value);
4415 Ok(())
4416 }
4417 fn store_simple_type(
4418 values: &mut Option<super::SimpleBaseType>,
4419 value: super::SimpleBaseType,
4420 ) -> Result<(), Error> {
4421 if values.is_some() {
4422 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4423 b"simpleType",
4424 )))?;
4425 }
4426 *values = Some(value);
4427 Ok(())
4428 }
4429 fn store_complex_type(
4430 values: &mut Option<super::ComplexBaseType>,
4431 value: super::ComplexBaseType,
4432 ) -> Result<(), Error> {
4433 if values.is_some() {
4434 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4435 b"complexType",
4436 )))?;
4437 }
4438 *values = Some(value);
4439 Ok(())
4440 }
4441 fn store_group(
4442 values: &mut Option<super::GroupType>,
4443 value: super::GroupType,
4444 ) -> Result<(), Error> {
4445 if values.is_some() {
4446 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4447 b"group",
4448 )))?;
4449 }
4450 *values = Some(value);
4451 Ok(())
4452 }
4453 fn store_attribute_group(
4454 values: &mut Option<super::AttributeGroupType>,
4455 value: super::AttributeGroupType,
4456 ) -> Result<(), Error> {
4457 if values.is_some() {
4458 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4459 b"attributeGroup",
4460 )))?;
4461 }
4462 *values = Some(value);
4463 Ok(())
4464 }
4465 fn store_element(
4466 values: &mut Option<super::ElementType>,
4467 value: super::ElementType,
4468 ) -> Result<(), Error> {
4469 if values.is_some() {
4470 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4471 b"element",
4472 )))?;
4473 }
4474 *values = Some(value);
4475 Ok(())
4476 }
4477 fn store_attribute(
4478 values: &mut Option<super::AttributeType>,
4479 value: super::AttributeType,
4480 ) -> Result<(), Error> {
4481 if values.is_some() {
4482 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4483 b"attribute",
4484 )))?;
4485 }
4486 *values = Some(value);
4487 Ok(())
4488 }
4489 fn store_notation(
4490 values: &mut Option<super::Notation>,
4491 value: super::Notation,
4492 ) -> Result<(), Error> {
4493 if values.is_some() {
4494 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
4495 b"notation",
4496 )))?;
4497 }
4498 *values = Some(value);
4499 Ok(())
4500 }
4501 fn handle_annotation<'de, R>(
4502 &mut self,
4503 reader: &R,
4504 mut values: Option<super::Annotation>,
4505 output: DeserializerOutput<'de, super::Annotation>,
4506 fallback: &mut Option<Self>,
4507 ) -> Result<ElementHandlerOutput<'de>, Error>
4508 where
4509 R: DeserializeReader,
4510 {
4511 let DeserializerOutput {
4512 artifact,
4513 event,
4514 allow_any,
4515 } = output;
4516 if artifact.is_none() {
4517 *self = match fallback.take() {
4518 None => Self::Init__,
4519 Some(Self::Annotation(_, Some(deserializer))) => {
4520 Self::Annotation(values, Some(deserializer))
4521 }
4522 _ => unreachable!(),
4523 };
4524 return Ok(ElementHandlerOutput::break_(event, allow_any));
4525 }
4526 match fallback.take() {
4527 None => (),
4528 Some(Self::Annotation(_, Some(deserializer))) => {
4529 let data = deserializer.finish(reader)?;
4530 Self::store_annotation(&mut values, data)?;
4531 }
4532 Some(_) => unreachable!(),
4533 }
4534 Ok(match artifact {
4535 DeserializerArtifact::None => unreachable!(),
4536 DeserializerArtifact::Data(data) => {
4537 Self::store_annotation(&mut values, data)?;
4538 let data = Self::Annotation(values, None).finish(reader)?;
4539 *self = Self::Done__(data);
4540 ElementHandlerOutput::Break { event, allow_any }
4541 }
4542 DeserializerArtifact::Deserializer(deserializer) => {
4543 *self = Self::Annotation(values, Some(deserializer));
4544 ElementHandlerOutput::from_event_end(event, allow_any)
4545 }
4546 })
4547 }
4548 fn handle_simple_type<'de, R>(
4549 &mut self,
4550 reader: &R,
4551 mut values: Option<super::SimpleBaseType>,
4552 output: DeserializerOutput<'de, super::SimpleBaseType>,
4553 fallback: &mut Option<Self>,
4554 ) -> Result<ElementHandlerOutput<'de>, Error>
4555 where
4556 R: DeserializeReader,
4557 {
4558 let DeserializerOutput {
4559 artifact,
4560 event,
4561 allow_any,
4562 } = output;
4563 if artifact.is_none() {
4564 *self = match fallback.take() {
4565 None => Self::Init__,
4566 Some(Self::SimpleType(_, Some(deserializer))) => {
4567 Self::SimpleType(values, Some(deserializer))
4568 }
4569 _ => unreachable!(),
4570 };
4571 return Ok(ElementHandlerOutput::break_(event, allow_any));
4572 }
4573 match fallback.take() {
4574 None => (),
4575 Some(Self::SimpleType(_, Some(deserializer))) => {
4576 let data = deserializer.finish(reader)?;
4577 Self::store_simple_type(&mut values, data)?;
4578 }
4579 Some(_) => unreachable!(),
4580 }
4581 Ok(match artifact {
4582 DeserializerArtifact::None => unreachable!(),
4583 DeserializerArtifact::Data(data) => {
4584 Self::store_simple_type(&mut values, data)?;
4585 let data = Self::SimpleType(values, None).finish(reader)?;
4586 *self = Self::Done__(data);
4587 ElementHandlerOutput::Break { event, allow_any }
4588 }
4589 DeserializerArtifact::Deserializer(deserializer) => {
4590 *self = Self::SimpleType(values, Some(deserializer));
4591 ElementHandlerOutput::from_event_end(event, allow_any)
4592 }
4593 })
4594 }
4595 fn handle_complex_type<'de, R>(
4596 &mut self,
4597 reader: &R,
4598 mut values: Option<super::ComplexBaseType>,
4599 output: DeserializerOutput<'de, super::ComplexBaseType>,
4600 fallback: &mut Option<Self>,
4601 ) -> Result<ElementHandlerOutput<'de>, Error>
4602 where
4603 R: DeserializeReader,
4604 {
4605 let DeserializerOutput {
4606 artifact,
4607 event,
4608 allow_any,
4609 } = output;
4610 if artifact.is_none() {
4611 *self = match fallback.take() {
4612 None => Self::Init__,
4613 Some(Self::ComplexType(_, Some(deserializer))) => {
4614 Self::ComplexType(values, Some(deserializer))
4615 }
4616 _ => unreachable!(),
4617 };
4618 return Ok(ElementHandlerOutput::break_(event, allow_any));
4619 }
4620 match fallback.take() {
4621 None => (),
4622 Some(Self::ComplexType(_, Some(deserializer))) => {
4623 let data = deserializer.finish(reader)?;
4624 Self::store_complex_type(&mut values, data)?;
4625 }
4626 Some(_) => unreachable!(),
4627 }
4628 Ok(match artifact {
4629 DeserializerArtifact::None => unreachable!(),
4630 DeserializerArtifact::Data(data) => {
4631 Self::store_complex_type(&mut values, data)?;
4632 let data = Self::ComplexType(values, None).finish(reader)?;
4633 *self = Self::Done__(data);
4634 ElementHandlerOutput::Break { event, allow_any }
4635 }
4636 DeserializerArtifact::Deserializer(deserializer) => {
4637 *self = Self::ComplexType(values, Some(deserializer));
4638 ElementHandlerOutput::from_event_end(event, allow_any)
4639 }
4640 })
4641 }
4642 fn handle_group<'de, R>(
4643 &mut self,
4644 reader: &R,
4645 mut values: Option<super::GroupType>,
4646 output: DeserializerOutput<'de, super::GroupType>,
4647 fallback: &mut Option<Self>,
4648 ) -> Result<ElementHandlerOutput<'de>, Error>
4649 where
4650 R: DeserializeReader,
4651 {
4652 let DeserializerOutput {
4653 artifact,
4654 event,
4655 allow_any,
4656 } = output;
4657 if artifact.is_none() {
4658 *self = match fallback.take() {
4659 None => Self::Init__,
4660 Some(Self::Group(_, Some(deserializer))) => {
4661 Self::Group(values, Some(deserializer))
4662 }
4663 _ => unreachable!(),
4664 };
4665 return Ok(ElementHandlerOutput::break_(event, allow_any));
4666 }
4667 match fallback.take() {
4668 None => (),
4669 Some(Self::Group(_, Some(deserializer))) => {
4670 let data = deserializer.finish(reader)?;
4671 Self::store_group(&mut values, data)?;
4672 }
4673 Some(_) => unreachable!(),
4674 }
4675 Ok(match artifact {
4676 DeserializerArtifact::None => unreachable!(),
4677 DeserializerArtifact::Data(data) => {
4678 Self::store_group(&mut values, data)?;
4679 let data = Self::Group(values, None).finish(reader)?;
4680 *self = Self::Done__(data);
4681 ElementHandlerOutput::Break { event, allow_any }
4682 }
4683 DeserializerArtifact::Deserializer(deserializer) => {
4684 *self = Self::Group(values, Some(deserializer));
4685 ElementHandlerOutput::from_event_end(event, allow_any)
4686 }
4687 })
4688 }
4689 fn handle_attribute_group<'de, R>(
4690 &mut self,
4691 reader: &R,
4692 mut values: Option<super::AttributeGroupType>,
4693 output: DeserializerOutput<'de, super::AttributeGroupType>,
4694 fallback: &mut Option<Self>,
4695 ) -> Result<ElementHandlerOutput<'de>, Error>
4696 where
4697 R: DeserializeReader,
4698 {
4699 let DeserializerOutput {
4700 artifact,
4701 event,
4702 allow_any,
4703 } = output;
4704 if artifact.is_none() {
4705 *self = match fallback.take() {
4706 None => Self::Init__,
4707 Some(Self::AttributeGroup(_, Some(deserializer))) => {
4708 Self::AttributeGroup(values, Some(deserializer))
4709 }
4710 _ => unreachable!(),
4711 };
4712 return Ok(ElementHandlerOutput::break_(event, allow_any));
4713 }
4714 match fallback.take() {
4715 None => (),
4716 Some(Self::AttributeGroup(_, Some(deserializer))) => {
4717 let data = deserializer.finish(reader)?;
4718 Self::store_attribute_group(&mut values, data)?;
4719 }
4720 Some(_) => unreachable!(),
4721 }
4722 Ok(match artifact {
4723 DeserializerArtifact::None => unreachable!(),
4724 DeserializerArtifact::Data(data) => {
4725 Self::store_attribute_group(&mut values, data)?;
4726 let data = Self::AttributeGroup(values, None).finish(reader)?;
4727 *self = Self::Done__(data);
4728 ElementHandlerOutput::Break { event, allow_any }
4729 }
4730 DeserializerArtifact::Deserializer(deserializer) => {
4731 *self = Self::AttributeGroup(values, Some(deserializer));
4732 ElementHandlerOutput::from_event_end(event, allow_any)
4733 }
4734 })
4735 }
4736 fn handle_element<'de, R>(
4737 &mut self,
4738 reader: &R,
4739 mut values: Option<super::ElementType>,
4740 output: DeserializerOutput<'de, super::ElementType>,
4741 fallback: &mut Option<Self>,
4742 ) -> Result<ElementHandlerOutput<'de>, Error>
4743 where
4744 R: DeserializeReader,
4745 {
4746 let DeserializerOutput {
4747 artifact,
4748 event,
4749 allow_any,
4750 } = output;
4751 if artifact.is_none() {
4752 *self = match fallback.take() {
4753 None => Self::Init__,
4754 Some(Self::Element(_, Some(deserializer))) => {
4755 Self::Element(values, Some(deserializer))
4756 }
4757 _ => unreachable!(),
4758 };
4759 return Ok(ElementHandlerOutput::break_(event, allow_any));
4760 }
4761 match fallback.take() {
4762 None => (),
4763 Some(Self::Element(_, Some(deserializer))) => {
4764 let data = deserializer.finish(reader)?;
4765 Self::store_element(&mut values, data)?;
4766 }
4767 Some(_) => unreachable!(),
4768 }
4769 Ok(match artifact {
4770 DeserializerArtifact::None => unreachable!(),
4771 DeserializerArtifact::Data(data) => {
4772 Self::store_element(&mut values, data)?;
4773 let data = Self::Element(values, None).finish(reader)?;
4774 *self = Self::Done__(data);
4775 ElementHandlerOutput::Break { event, allow_any }
4776 }
4777 DeserializerArtifact::Deserializer(deserializer) => {
4778 *self = Self::Element(values, Some(deserializer));
4779 ElementHandlerOutput::from_event_end(event, allow_any)
4780 }
4781 })
4782 }
4783 fn handle_attribute<'de, R>(
4784 &mut self,
4785 reader: &R,
4786 mut values: Option<super::AttributeType>,
4787 output: DeserializerOutput<'de, super::AttributeType>,
4788 fallback: &mut Option<Self>,
4789 ) -> Result<ElementHandlerOutput<'de>, Error>
4790 where
4791 R: DeserializeReader,
4792 {
4793 let DeserializerOutput {
4794 artifact,
4795 event,
4796 allow_any,
4797 } = output;
4798 if artifact.is_none() {
4799 *self = match fallback.take() {
4800 None => Self::Init__,
4801 Some(Self::Attribute(_, Some(deserializer))) => {
4802 Self::Attribute(values, Some(deserializer))
4803 }
4804 _ => unreachable!(),
4805 };
4806 return Ok(ElementHandlerOutput::break_(event, allow_any));
4807 }
4808 match fallback.take() {
4809 None => (),
4810 Some(Self::Attribute(_, Some(deserializer))) => {
4811 let data = deserializer.finish(reader)?;
4812 Self::store_attribute(&mut values, data)?;
4813 }
4814 Some(_) => unreachable!(),
4815 }
4816 Ok(match artifact {
4817 DeserializerArtifact::None => unreachable!(),
4818 DeserializerArtifact::Data(data) => {
4819 Self::store_attribute(&mut values, data)?;
4820 let data = Self::Attribute(values, None).finish(reader)?;
4821 *self = Self::Done__(data);
4822 ElementHandlerOutput::Break { event, allow_any }
4823 }
4824 DeserializerArtifact::Deserializer(deserializer) => {
4825 *self = Self::Attribute(values, Some(deserializer));
4826 ElementHandlerOutput::from_event_end(event, allow_any)
4827 }
4828 })
4829 }
4830 fn handle_notation<'de, R>(
4831 &mut self,
4832 reader: &R,
4833 mut values: Option<super::Notation>,
4834 output: DeserializerOutput<'de, super::Notation>,
4835 fallback: &mut Option<Self>,
4836 ) -> Result<ElementHandlerOutput<'de>, Error>
4837 where
4838 R: DeserializeReader,
4839 {
4840 let DeserializerOutput {
4841 artifact,
4842 event,
4843 allow_any,
4844 } = output;
4845 if artifact.is_none() {
4846 *self = match fallback.take() {
4847 None => Self::Init__,
4848 Some(Self::Notation(_, Some(deserializer))) => {
4849 Self::Notation(values, Some(deserializer))
4850 }
4851 _ => unreachable!(),
4852 };
4853 return Ok(ElementHandlerOutput::break_(event, allow_any));
4854 }
4855 match fallback.take() {
4856 None => (),
4857 Some(Self::Notation(_, Some(deserializer))) => {
4858 let data = deserializer.finish(reader)?;
4859 Self::store_notation(&mut values, data)?;
4860 }
4861 Some(_) => unreachable!(),
4862 }
4863 Ok(match artifact {
4864 DeserializerArtifact::None => unreachable!(),
4865 DeserializerArtifact::Data(data) => {
4866 Self::store_notation(&mut values, data)?;
4867 let data = Self::Notation(values, None).finish(reader)?;
4868 *self = Self::Done__(data);
4869 ElementHandlerOutput::Break { event, allow_any }
4870 }
4871 DeserializerArtifact::Deserializer(deserializer) => {
4872 *self = Self::Notation(values, Some(deserializer));
4873 ElementHandlerOutput::from_event_end(event, allow_any)
4874 }
4875 })
4876 }
4877 }
4878 impl<'de> Deserializer<'de, super::OverrideContent> for OverrideContentDeserializer {
4879 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::OverrideContent>
4880 where
4881 R: DeserializeReader,
4882 {
4883 let deserializer = Self::Init__;
4884 let mut output = deserializer.next(reader, event)?;
4885 output.artifact = match output.artifact {
4886 DeserializerArtifact::Deserializer(Self::Init__) => DeserializerArtifact::None,
4887 artifact => artifact,
4888 };
4889 Ok(output)
4890 }
4891 fn next<R>(
4892 mut self,
4893 reader: &R,
4894 event: Event<'de>,
4895 ) -> DeserializerResult<'de, super::OverrideContent>
4896 where
4897 R: DeserializeReader,
4898 {
4899 let mut event = event;
4900 let mut fallback = None;
4901 let (event, allow_any) = loop {
4902 let state = replace(&mut self, Self::Unknown__);
4903 event = match (state, event) {
4904 (Self::Annotation(values, Some(deserializer)), event) => {
4905 let output = deserializer.next(reader, event)?;
4906 match self.handle_annotation(reader, values, output, &mut fallback)? {
4907 ElementHandlerOutput::Break { event, allow_any } => {
4908 break (event, allow_any)
4909 }
4910 ElementHandlerOutput::Continue { event, .. } => event,
4911 }
4912 }
4913 (Self::SimpleType(values, Some(deserializer)), event) => {
4914 let output = deserializer.next(reader, event)?;
4915 match self.handle_simple_type(reader, values, output, &mut fallback)? {
4916 ElementHandlerOutput::Break { event, allow_any } => {
4917 break (event, allow_any)
4918 }
4919 ElementHandlerOutput::Continue { event, .. } => event,
4920 }
4921 }
4922 (Self::ComplexType(values, Some(deserializer)), event) => {
4923 let output = deserializer.next(reader, event)?;
4924 match self.handle_complex_type(reader, values, output, &mut fallback)? {
4925 ElementHandlerOutput::Break { event, allow_any } => {
4926 break (event, allow_any)
4927 }
4928 ElementHandlerOutput::Continue { event, .. } => event,
4929 }
4930 }
4931 (Self::Group(values, Some(deserializer)), event) => {
4932 let output = deserializer.next(reader, event)?;
4933 match self.handle_group(reader, values, output, &mut fallback)? {
4934 ElementHandlerOutput::Break { event, allow_any } => {
4935 break (event, allow_any)
4936 }
4937 ElementHandlerOutput::Continue { event, .. } => event,
4938 }
4939 }
4940 (Self::AttributeGroup(values, Some(deserializer)), event) => {
4941 let output = deserializer.next(reader, event)?;
4942 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
4943 ElementHandlerOutput::Break { event, allow_any } => {
4944 break (event, allow_any)
4945 }
4946 ElementHandlerOutput::Continue { event, .. } => event,
4947 }
4948 }
4949 (Self::Element(values, Some(deserializer)), event) => {
4950 let output = deserializer.next(reader, event)?;
4951 match self.handle_element(reader, values, output, &mut fallback)? {
4952 ElementHandlerOutput::Break { event, allow_any } => {
4953 break (event, allow_any)
4954 }
4955 ElementHandlerOutput::Continue { event, .. } => event,
4956 }
4957 }
4958 (Self::Attribute(values, Some(deserializer)), event) => {
4959 let output = deserializer.next(reader, event)?;
4960 match self.handle_attribute(reader, values, output, &mut fallback)? {
4961 ElementHandlerOutput::Break { event, allow_any } => {
4962 break (event, allow_any)
4963 }
4964 ElementHandlerOutput::Continue { event, .. } => event,
4965 }
4966 }
4967 (Self::Notation(values, Some(deserializer)), event) => {
4968 let output = deserializer.next(reader, event)?;
4969 match self.handle_notation(reader, values, output, &mut fallback)? {
4970 ElementHandlerOutput::Break { event, allow_any } => {
4971 break (event, allow_any)
4972 }
4973 ElementHandlerOutput::Continue { event, .. } => event,
4974 }
4975 }
4976 (state, event @ Event::End(_)) => {
4977 return Ok(DeserializerOutput {
4978 artifact: DeserializerArtifact::Data(state.finish(reader)?),
4979 event: DeserializerEvent::Continue(event),
4980 allow_any: false,
4981 });
4982 }
4983 (Self::Init__, event) => {
4984 match self.find_suitable(reader, event, &mut fallback)? {
4985 ElementHandlerOutput::Break { event, allow_any } => {
4986 break (event, allow_any)
4987 }
4988 ElementHandlerOutput::Continue { event, .. } => event,
4989 }
4990 }
4991 (Self::Annotation(values, None), event) => {
4992 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
4993 reader, event,
4994 )?;
4995 match self.handle_annotation(reader, values, output, &mut fallback)? {
4996 ElementHandlerOutput::Break { event, allow_any } => {
4997 break (event, allow_any)
4998 }
4999 ElementHandlerOutput::Continue { event, .. } => event,
5000 }
5001 }
5002 (Self::SimpleType(values, None), event) => {
5003 let output =
5004 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
5005 reader, event,
5006 )?;
5007 match self.handle_simple_type(reader, values, output, &mut fallback)? {
5008 ElementHandlerOutput::Break { event, allow_any } => {
5009 break (event, allow_any)
5010 }
5011 ElementHandlerOutput::Continue { event, .. } => event,
5012 }
5013 }
5014 (Self::ComplexType(values, None), event) => {
5015 let output =
5016 <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
5017 reader, event,
5018 )?;
5019 match self.handle_complex_type(reader, values, output, &mut fallback)? {
5020 ElementHandlerOutput::Break { event, allow_any } => {
5021 break (event, allow_any)
5022 }
5023 ElementHandlerOutput::Continue { event, .. } => event,
5024 }
5025 }
5026 (Self::Group(values, None), event) => {
5027 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
5028 reader, event,
5029 )?;
5030 match self.handle_group(reader, values, output, &mut fallback)? {
5031 ElementHandlerOutput::Break { event, allow_any } => {
5032 break (event, allow_any)
5033 }
5034 ElementHandlerOutput::Continue { event, .. } => event,
5035 }
5036 }
5037 (Self::AttributeGroup(values, None), event) => {
5038 let output =
5039 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
5040 reader, event,
5041 )?;
5042 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
5043 ElementHandlerOutput::Break { event, allow_any } => {
5044 break (event, allow_any)
5045 }
5046 ElementHandlerOutput::Continue { event, .. } => event,
5047 }
5048 }
5049 (Self::Element(values, None), event) => {
5050 let output = <super::ElementType as WithDeserializer>::Deserializer::init(
5051 reader, event,
5052 )?;
5053 match self.handle_element(reader, values, output, &mut fallback)? {
5054 ElementHandlerOutput::Break { event, allow_any } => {
5055 break (event, allow_any)
5056 }
5057 ElementHandlerOutput::Continue { event, .. } => event,
5058 }
5059 }
5060 (Self::Attribute(values, None), event) => {
5061 let output =
5062 <super::AttributeType as WithDeserializer>::Deserializer::init(
5063 reader, event,
5064 )?;
5065 match self.handle_attribute(reader, values, output, &mut fallback)? {
5066 ElementHandlerOutput::Break { event, allow_any } => {
5067 break (event, allow_any)
5068 }
5069 ElementHandlerOutput::Continue { event, .. } => event,
5070 }
5071 }
5072 (Self::Notation(values, None), event) => {
5073 let output = <super::Notation as WithDeserializer>::Deserializer::init(
5074 reader, event,
5075 )?;
5076 match self.handle_notation(reader, values, output, &mut fallback)? {
5077 ElementHandlerOutput::Break { event, allow_any } => {
5078 break (event, allow_any)
5079 }
5080 ElementHandlerOutput::Continue { event, .. } => event,
5081 }
5082 }
5083 (s @ Self::Done__(_), event) => {
5084 self = s;
5085 break (DeserializerEvent::Continue(event), false);
5086 }
5087 (Self::Unknown__, _) => unreachable!(),
5088 }
5089 };
5090 let artifact = match self {
5091 Self::Done__(data) => DeserializerArtifact::Data(data),
5092 deserializer => DeserializerArtifact::Deserializer(deserializer),
5093 };
5094 Ok(DeserializerOutput {
5095 artifact,
5096 event,
5097 allow_any,
5098 })
5099 }
5100 fn finish<R>(self, reader: &R) -> Result<super::OverrideContent, Error>
5101 where
5102 R: DeserializeReader,
5103 {
5104 match self {
5105 Self::Init__ => Err(ErrorKind::MissingContent.into()),
5106 Self::Annotation(mut values, deserializer) => {
5107 if let Some(deserializer) = deserializer {
5108 let value = deserializer.finish(reader)?;
5109 Self::store_annotation(&mut values, value)?;
5110 }
5111 Ok(super::OverrideContent::Annotation(values.ok_or_else(
5112 || ErrorKind::MissingElement("annotation".into()),
5113 )?))
5114 }
5115 Self::SimpleType(mut values, deserializer) => {
5116 if let Some(deserializer) = deserializer {
5117 let value = deserializer.finish(reader)?;
5118 Self::store_simple_type(&mut values, value)?;
5119 }
5120 Ok(super::OverrideContent::SimpleType(values.ok_or_else(
5121 || ErrorKind::MissingElement("simpleType".into()),
5122 )?))
5123 }
5124 Self::ComplexType(mut values, deserializer) => {
5125 if let Some(deserializer) = deserializer {
5126 let value = deserializer.finish(reader)?;
5127 Self::store_complex_type(&mut values, value)?;
5128 }
5129 Ok(super::OverrideContent::ComplexType(values.ok_or_else(
5130 || ErrorKind::MissingElement("complexType".into()),
5131 )?))
5132 }
5133 Self::Group(mut values, deserializer) => {
5134 if let Some(deserializer) = deserializer {
5135 let value = deserializer.finish(reader)?;
5136 Self::store_group(&mut values, value)?;
5137 }
5138 Ok(super::OverrideContent::Group(values.ok_or_else(|| {
5139 ErrorKind::MissingElement("group".into())
5140 })?))
5141 }
5142 Self::AttributeGroup(mut values, deserializer) => {
5143 if let Some(deserializer) = deserializer {
5144 let value = deserializer.finish(reader)?;
5145 Self::store_attribute_group(&mut values, value)?;
5146 }
5147 Ok(super::OverrideContent::AttributeGroup(values.ok_or_else(
5148 || ErrorKind::MissingElement("attributeGroup".into()),
5149 )?))
5150 }
5151 Self::Element(mut values, deserializer) => {
5152 if let Some(deserializer) = deserializer {
5153 let value = deserializer.finish(reader)?;
5154 Self::store_element(&mut values, value)?;
5155 }
5156 Ok(super::OverrideContent::Element(values.ok_or_else(
5157 || ErrorKind::MissingElement("element".into()),
5158 )?))
5159 }
5160 Self::Attribute(mut values, deserializer) => {
5161 if let Some(deserializer) = deserializer {
5162 let value = deserializer.finish(reader)?;
5163 Self::store_attribute(&mut values, value)?;
5164 }
5165 Ok(super::OverrideContent::Attribute(values.ok_or_else(
5166 || ErrorKind::MissingElement("attribute".into()),
5167 )?))
5168 }
5169 Self::Notation(mut values, deserializer) => {
5170 if let Some(deserializer) = deserializer {
5171 let value = deserializer.finish(reader)?;
5172 Self::store_notation(&mut values, value)?;
5173 }
5174 Ok(super::OverrideContent::Notation(values.ok_or_else(
5175 || ErrorKind::MissingElement("notation".into()),
5176 )?))
5177 }
5178 Self::Done__(data) => Ok(data),
5179 Self::Unknown__ => unreachable!(),
5180 }
5181 }
5182 }
5183 #[derive(Debug)]
5184 pub struct AnnotationDeserializer {
5185 id: Option<String>,
5186 content: Vec<super::AnnotationContent>,
5187 state: Box<AnnotationDeserializerState>,
5188 }
5189 #[derive(Debug)]
5190 enum AnnotationDeserializerState {
5191 Init__,
5192 Next__,
5193 Content__(<super::AnnotationContent as WithDeserializer>::Deserializer),
5194 Unknown__,
5195 }
5196 impl AnnotationDeserializer {
5197 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
5198 where
5199 R: DeserializeReader,
5200 {
5201 let mut id: Option<String> = None;
5202 for attrib in filter_xmlns_attributes(bytes_start) {
5203 let attrib = attrib?;
5204 if matches!(
5205 reader.resolve_local_name(attrib.key, &super::NS_XS),
5206 Some(b"id")
5207 ) {
5208 reader.read_attrib(&mut id, b"id", &attrib.value)?;
5209 }
5210 }
5211 Ok(Self {
5212 id: id,
5213 content: Vec::new(),
5214 state: Box::new(AnnotationDeserializerState::Init__),
5215 })
5216 }
5217 fn finish_state<R>(
5218 &mut self,
5219 reader: &R,
5220 state: AnnotationDeserializerState,
5221 ) -> Result<(), Error>
5222 where
5223 R: DeserializeReader,
5224 {
5225 if let AnnotationDeserializerState::Content__(deserializer) = state {
5226 self.store_content(deserializer.finish(reader)?)?;
5227 }
5228 Ok(())
5229 }
5230 fn store_content(&mut self, value: super::AnnotationContent) -> Result<(), Error> {
5231 self.content.push(value);
5232 Ok(())
5233 }
5234 fn handle_content<'de, R>(
5235 &mut self,
5236 reader: &R,
5237 output: DeserializerOutput<'de, super::AnnotationContent>,
5238 fallback: &mut Option<AnnotationDeserializerState>,
5239 ) -> Result<ElementHandlerOutput<'de>, Error>
5240 where
5241 R: DeserializeReader,
5242 {
5243 let DeserializerOutput {
5244 artifact,
5245 event,
5246 allow_any,
5247 } = output;
5248 if artifact.is_none() {
5249 *self.state = fallback
5250 .take()
5251 .unwrap_or(AnnotationDeserializerState::Next__);
5252 return Ok(ElementHandlerOutput::break_(event, allow_any));
5253 }
5254 if let Some(fallback) = fallback.take() {
5255 self.finish_state(reader, fallback)?;
5256 }
5257 Ok(match artifact {
5258 DeserializerArtifact::None => unreachable!(),
5259 DeserializerArtifact::Data(data) => {
5260 self.store_content(data)?;
5261 *self.state = AnnotationDeserializerState::Next__;
5262 ElementHandlerOutput::from_event(event, allow_any)
5263 }
5264 DeserializerArtifact::Deserializer(deserializer) => {
5265 let ret = ElementHandlerOutput::from_event(event, allow_any);
5266 match &ret {
5267 ElementHandlerOutput::Continue { .. } => {
5268 fallback.get_or_insert(AnnotationDeserializerState::Content__(
5269 deserializer,
5270 ));
5271 *self.state = AnnotationDeserializerState::Next__;
5272 }
5273 ElementHandlerOutput::Break { .. } => {
5274 *self.state = AnnotationDeserializerState::Content__(deserializer);
5275 }
5276 }
5277 ret
5278 }
5279 })
5280 }
5281 }
5282 impl<'de> Deserializer<'de, super::Annotation> for AnnotationDeserializer {
5283 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Annotation>
5284 where
5285 R: DeserializeReader,
5286 {
5287 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
5288 }
5289 fn next<R>(
5290 mut self,
5291 reader: &R,
5292 event: Event<'de>,
5293 ) -> DeserializerResult<'de, super::Annotation>
5294 where
5295 R: DeserializeReader,
5296 {
5297 use AnnotationDeserializerState as S;
5298 let mut event = event;
5299 let mut fallback = None;
5300 let (event, allow_any) = loop {
5301 let state = replace(&mut *self.state, S::Unknown__);
5302 event = match (state, event) {
5303 (S::Content__(deserializer), event) => {
5304 let output = deserializer.next(reader, event)?;
5305 match self.handle_content(reader, output, &mut fallback)? {
5306 ElementHandlerOutput::Break { event, allow_any } => {
5307 break (event, allow_any)
5308 }
5309 ElementHandlerOutput::Continue { event, .. } => event,
5310 }
5311 }
5312 (_, Event::End(_)) => {
5313 return Ok(DeserializerOutput {
5314 artifact: DeserializerArtifact::Data(self.finish(reader)?),
5315 event: DeserializerEvent::None,
5316 allow_any: false,
5317 });
5318 }
5319 (old_state @ (S::Init__ | S::Next__), event) => {
5320 let output =
5321 <super::AnnotationContent as WithDeserializer>::Deserializer::init(
5322 reader, event,
5323 )?;
5324 match self.handle_content(reader, output, &mut fallback)? {
5325 ElementHandlerOutput::Break { event, allow_any } => {
5326 if matches!(&*self.state, S::Unknown__) {
5327 *self.state = old_state;
5328 }
5329 break (event, allow_any);
5330 }
5331 ElementHandlerOutput::Continue { event, .. } => event,
5332 }
5333 }
5334 (S::Unknown__, _) => unreachable!(),
5335 }
5336 };
5337 Ok(DeserializerOutput {
5338 artifact: DeserializerArtifact::Deserializer(self),
5339 event,
5340 allow_any,
5341 })
5342 }
5343 fn finish<R>(mut self, reader: &R) -> Result<super::Annotation, Error>
5344 where
5345 R: DeserializeReader,
5346 {
5347 let state = replace(&mut *self.state, AnnotationDeserializerState::Unknown__);
5348 self.finish_state(reader, state)?;
5349 Ok(super::Annotation {
5350 id: self.id,
5351 content: self.content,
5352 })
5353 }
5354 }
5355 #[derive(Debug)]
5356 pub enum AnnotationContentDeserializer {
5357 Init__,
5358 Appinfo(
5359 Option<super::Appinfo>,
5360 Option<<super::Appinfo as WithDeserializer>::Deserializer>,
5361 ),
5362 Documentation(
5363 Option<super::Documentation>,
5364 Option<<super::Documentation as WithDeserializer>::Deserializer>,
5365 ),
5366 Done__(super::AnnotationContent),
5367 Unknown__,
5368 }
5369 impl AnnotationContentDeserializer {
5370 fn find_suitable<'de, R>(
5371 &mut self,
5372 reader: &R,
5373 event: Event<'de>,
5374 fallback: &mut Option<AnnotationContentDeserializer>,
5375 ) -> Result<ElementHandlerOutput<'de>, Error>
5376 where
5377 R: DeserializeReader,
5378 {
5379 let (Event::Start(x) | Event::Empty(x)) = &event else {
5380 *self = Self::Init__;
5381 return Ok(ElementHandlerOutput::return_to_parent(event, false));
5382 };
5383 if matches!(
5384 reader.resolve_local_name(x.name(), &super::NS_XS),
5385 Some(b"appinfo")
5386 ) {
5387 let output =
5388 <super::Appinfo as WithDeserializer>::Deserializer::init(reader, event)?;
5389 return self.handle_appinfo(reader, Default::default(), output, &mut *fallback);
5390 }
5391 if matches!(
5392 reader.resolve_local_name(x.name(), &super::NS_XS),
5393 Some(b"documentation")
5394 ) {
5395 let output =
5396 <super::Documentation as WithDeserializer>::Deserializer::init(reader, event)?;
5397 return self.handle_documentation(
5398 reader,
5399 Default::default(),
5400 output,
5401 &mut *fallback,
5402 );
5403 }
5404 *self = Self::Init__;
5405 Ok(ElementHandlerOutput::return_to_parent(event, false))
5406 }
5407 fn store_appinfo(
5408 values: &mut Option<super::Appinfo>,
5409 value: super::Appinfo,
5410 ) -> Result<(), Error> {
5411 if values.is_some() {
5412 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
5413 b"appinfo",
5414 )))?;
5415 }
5416 *values = Some(value);
5417 Ok(())
5418 }
5419 fn store_documentation(
5420 values: &mut Option<super::Documentation>,
5421 value: super::Documentation,
5422 ) -> Result<(), Error> {
5423 if values.is_some() {
5424 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
5425 b"documentation",
5426 )))?;
5427 }
5428 *values = Some(value);
5429 Ok(())
5430 }
5431 fn handle_appinfo<'de, R>(
5432 &mut self,
5433 reader: &R,
5434 mut values: Option<super::Appinfo>,
5435 output: DeserializerOutput<'de, super::Appinfo>,
5436 fallback: &mut Option<Self>,
5437 ) -> Result<ElementHandlerOutput<'de>, Error>
5438 where
5439 R: DeserializeReader,
5440 {
5441 let DeserializerOutput {
5442 artifact,
5443 event,
5444 allow_any,
5445 } = output;
5446 if artifact.is_none() {
5447 *self = match fallback.take() {
5448 None => Self::Init__,
5449 Some(Self::Appinfo(_, Some(deserializer))) => {
5450 Self::Appinfo(values, Some(deserializer))
5451 }
5452 _ => unreachable!(),
5453 };
5454 return Ok(ElementHandlerOutput::break_(event, allow_any));
5455 }
5456 match fallback.take() {
5457 None => (),
5458 Some(Self::Appinfo(_, Some(deserializer))) => {
5459 let data = deserializer.finish(reader)?;
5460 Self::store_appinfo(&mut values, data)?;
5461 }
5462 Some(_) => unreachable!(),
5463 }
5464 Ok(match artifact {
5465 DeserializerArtifact::None => unreachable!(),
5466 DeserializerArtifact::Data(data) => {
5467 Self::store_appinfo(&mut values, data)?;
5468 let data = Self::Appinfo(values, None).finish(reader)?;
5469 *self = Self::Done__(data);
5470 ElementHandlerOutput::Break { event, allow_any }
5471 }
5472 DeserializerArtifact::Deserializer(deserializer) => {
5473 *self = Self::Appinfo(values, Some(deserializer));
5474 ElementHandlerOutput::from_event_end(event, allow_any)
5475 }
5476 })
5477 }
5478 fn handle_documentation<'de, R>(
5479 &mut self,
5480 reader: &R,
5481 mut values: Option<super::Documentation>,
5482 output: DeserializerOutput<'de, super::Documentation>,
5483 fallback: &mut Option<Self>,
5484 ) -> Result<ElementHandlerOutput<'de>, Error>
5485 where
5486 R: DeserializeReader,
5487 {
5488 let DeserializerOutput {
5489 artifact,
5490 event,
5491 allow_any,
5492 } = output;
5493 if artifact.is_none() {
5494 *self = match fallback.take() {
5495 None => Self::Init__,
5496 Some(Self::Documentation(_, Some(deserializer))) => {
5497 Self::Documentation(values, Some(deserializer))
5498 }
5499 _ => unreachable!(),
5500 };
5501 return Ok(ElementHandlerOutput::break_(event, allow_any));
5502 }
5503 match fallback.take() {
5504 None => (),
5505 Some(Self::Documentation(_, Some(deserializer))) => {
5506 let data = deserializer.finish(reader)?;
5507 Self::store_documentation(&mut values, data)?;
5508 }
5509 Some(_) => unreachable!(),
5510 }
5511 Ok(match artifact {
5512 DeserializerArtifact::None => unreachable!(),
5513 DeserializerArtifact::Data(data) => {
5514 Self::store_documentation(&mut values, data)?;
5515 let data = Self::Documentation(values, None).finish(reader)?;
5516 *self = Self::Done__(data);
5517 ElementHandlerOutput::Break { event, allow_any }
5518 }
5519 DeserializerArtifact::Deserializer(deserializer) => {
5520 *self = Self::Documentation(values, Some(deserializer));
5521 ElementHandlerOutput::from_event_end(event, allow_any)
5522 }
5523 })
5524 }
5525 }
5526 impl<'de> Deserializer<'de, super::AnnotationContent> for AnnotationContentDeserializer {
5527 fn init<R>(
5528 reader: &R,
5529 event: Event<'de>,
5530 ) -> DeserializerResult<'de, super::AnnotationContent>
5531 where
5532 R: DeserializeReader,
5533 {
5534 let deserializer = Self::Init__;
5535 let mut output = deserializer.next(reader, event)?;
5536 output.artifact = match output.artifact {
5537 DeserializerArtifact::Deserializer(Self::Init__) => DeserializerArtifact::None,
5538 artifact => artifact,
5539 };
5540 Ok(output)
5541 }
5542 fn next<R>(
5543 mut self,
5544 reader: &R,
5545 event: Event<'de>,
5546 ) -> DeserializerResult<'de, super::AnnotationContent>
5547 where
5548 R: DeserializeReader,
5549 {
5550 let mut event = event;
5551 let mut fallback = None;
5552 let (event, allow_any) = loop {
5553 let state = replace(&mut self, Self::Unknown__);
5554 event = match (state, event) {
5555 (Self::Appinfo(values, Some(deserializer)), event) => {
5556 let output = deserializer.next(reader, event)?;
5557 match self.handle_appinfo(reader, values, output, &mut fallback)? {
5558 ElementHandlerOutput::Break { event, allow_any } => {
5559 break (event, allow_any)
5560 }
5561 ElementHandlerOutput::Continue { event, .. } => event,
5562 }
5563 }
5564 (Self::Documentation(values, Some(deserializer)), event) => {
5565 let output = deserializer.next(reader, event)?;
5566 match self.handle_documentation(reader, values, output, &mut fallback)? {
5567 ElementHandlerOutput::Break { event, allow_any } => {
5568 break (event, allow_any)
5569 }
5570 ElementHandlerOutput::Continue { event, .. } => event,
5571 }
5572 }
5573 (state, event @ Event::End(_)) => {
5574 return Ok(DeserializerOutput {
5575 artifact: DeserializerArtifact::Data(state.finish(reader)?),
5576 event: DeserializerEvent::Continue(event),
5577 allow_any: false,
5578 });
5579 }
5580 (Self::Init__, event) => {
5581 match self.find_suitable(reader, event, &mut fallback)? {
5582 ElementHandlerOutput::Break { event, allow_any } => {
5583 break (event, allow_any)
5584 }
5585 ElementHandlerOutput::Continue { event, .. } => event,
5586 }
5587 }
5588 (Self::Appinfo(values, None), event) => {
5589 let output = <super::Appinfo as WithDeserializer>::Deserializer::init(
5590 reader, event,
5591 )?;
5592 match self.handle_appinfo(reader, values, output, &mut fallback)? {
5593 ElementHandlerOutput::Break { event, allow_any } => {
5594 break (event, allow_any)
5595 }
5596 ElementHandlerOutput::Continue { event, .. } => event,
5597 }
5598 }
5599 (Self::Documentation(values, None), event) => {
5600 let output =
5601 <super::Documentation as WithDeserializer>::Deserializer::init(
5602 reader, event,
5603 )?;
5604 match self.handle_documentation(reader, values, output, &mut fallback)? {
5605 ElementHandlerOutput::Break { event, allow_any } => {
5606 break (event, allow_any)
5607 }
5608 ElementHandlerOutput::Continue { event, .. } => event,
5609 }
5610 }
5611 (s @ Self::Done__(_), event) => {
5612 self = s;
5613 break (DeserializerEvent::Continue(event), false);
5614 }
5615 (Self::Unknown__, _) => unreachable!(),
5616 }
5617 };
5618 let artifact = match self {
5619 Self::Done__(data) => DeserializerArtifact::Data(data),
5620 deserializer => DeserializerArtifact::Deserializer(deserializer),
5621 };
5622 Ok(DeserializerOutput {
5623 artifact,
5624 event,
5625 allow_any,
5626 })
5627 }
5628 fn finish<R>(self, reader: &R) -> Result<super::AnnotationContent, Error>
5629 where
5630 R: DeserializeReader,
5631 {
5632 match self {
5633 Self::Init__ => Err(ErrorKind::MissingContent.into()),
5634 Self::Appinfo(mut values, deserializer) => {
5635 if let Some(deserializer) = deserializer {
5636 let value = deserializer.finish(reader)?;
5637 Self::store_appinfo(&mut values, value)?;
5638 }
5639 Ok(super::AnnotationContent::Appinfo(values.ok_or_else(
5640 || ErrorKind::MissingElement("appinfo".into()),
5641 )?))
5642 }
5643 Self::Documentation(mut values, deserializer) => {
5644 if let Some(deserializer) = deserializer {
5645 let value = deserializer.finish(reader)?;
5646 Self::store_documentation(&mut values, value)?;
5647 }
5648 Ok(super::AnnotationContent::Documentation(values.ok_or_else(
5649 || ErrorKind::MissingElement("documentation".into()),
5650 )?))
5651 }
5652 Self::Done__(data) => Ok(data),
5653 Self::Unknown__ => unreachable!(),
5654 }
5655 }
5656 }
5657 #[derive(Debug)]
5658 pub struct DefaultOpenContentDeserializer {
5659 id: Option<String>,
5660 applies_to_empty: bool,
5661 mode: super::DefaultOpenContentModeType,
5662 annotation: Option<super::Annotation>,
5663 any: Option<super::WildcardType>,
5664 state: Box<DefaultOpenContentDeserializerState>,
5665 }
5666 #[derive(Debug)]
5667 enum DefaultOpenContentDeserializerState {
5668 Init__,
5669 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
5670 Any(Option<<super::WildcardType as WithDeserializer>::Deserializer>),
5671 Done__,
5672 Unknown__,
5673 }
5674 impl DefaultOpenContentDeserializer {
5675 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
5676 where
5677 R: DeserializeReader,
5678 {
5679 let mut id: Option<String> = None;
5680 let mut applies_to_empty: Option<bool> = None;
5681 let mut mode: Option<super::DefaultOpenContentModeType> = None;
5682 for attrib in filter_xmlns_attributes(bytes_start) {
5683 let attrib = attrib?;
5684 if matches!(
5685 reader.resolve_local_name(attrib.key, &super::NS_XS),
5686 Some(b"id")
5687 ) {
5688 reader.read_attrib(&mut id, b"id", &attrib.value)?;
5689 } else if matches!(
5690 reader.resolve_local_name(attrib.key, &super::NS_XS),
5691 Some(b"appliesToEmpty")
5692 ) {
5693 reader.read_attrib(&mut applies_to_empty, b"appliesToEmpty", &attrib.value)?;
5694 } else if matches!(
5695 reader.resolve_local_name(attrib.key, &super::NS_XS),
5696 Some(b"mode")
5697 ) {
5698 reader.read_attrib(&mut mode, b"mode", &attrib.value)?;
5699 }
5700 }
5701 Ok(Self {
5702 id: id,
5703 applies_to_empty: applies_to_empty
5704 .unwrap_or_else(super::DefaultOpenContent::default_applies_to_empty),
5705 mode: mode.unwrap_or_else(super::DefaultOpenContent::default_mode),
5706 annotation: None,
5707 any: None,
5708 state: Box::new(DefaultOpenContentDeserializerState::Init__),
5709 })
5710 }
5711 fn finish_state<R>(
5712 &mut self,
5713 reader: &R,
5714 state: DefaultOpenContentDeserializerState,
5715 ) -> Result<(), Error>
5716 where
5717 R: DeserializeReader,
5718 {
5719 use DefaultOpenContentDeserializerState as S;
5720 match state {
5721 S::Annotation(Some(deserializer)) => {
5722 self.store_annotation(deserializer.finish(reader)?)?
5723 }
5724 S::Any(Some(deserializer)) => self.store_any(deserializer.finish(reader)?)?,
5725 _ => (),
5726 }
5727 Ok(())
5728 }
5729 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
5730 if self.annotation.is_some() {
5731 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
5732 b"annotation",
5733 )))?;
5734 }
5735 self.annotation = Some(value);
5736 Ok(())
5737 }
5738 fn store_any(&mut self, value: super::WildcardType) -> Result<(), Error> {
5739 if self.any.is_some() {
5740 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"any")))?;
5741 }
5742 self.any = Some(value);
5743 Ok(())
5744 }
5745 fn handle_annotation<'de, R>(
5746 &mut self,
5747 reader: &R,
5748 output: DeserializerOutput<'de, super::Annotation>,
5749 fallback: &mut Option<DefaultOpenContentDeserializerState>,
5750 ) -> Result<ElementHandlerOutput<'de>, Error>
5751 where
5752 R: DeserializeReader,
5753 {
5754 let DeserializerOutput {
5755 artifact,
5756 event,
5757 allow_any,
5758 } = output;
5759 if artifact.is_none() {
5760 fallback.get_or_insert(DefaultOpenContentDeserializerState::Annotation(None));
5761 *self.state = DefaultOpenContentDeserializerState::Any(None);
5762 return Ok(ElementHandlerOutput::from_event(event, allow_any));
5763 }
5764 if let Some(fallback) = fallback.take() {
5765 self.finish_state(reader, fallback)?;
5766 }
5767 Ok(match artifact {
5768 DeserializerArtifact::None => unreachable!(),
5769 DeserializerArtifact::Data(data) => {
5770 self.store_annotation(data)?;
5771 *self.state = DefaultOpenContentDeserializerState::Any(None);
5772 ElementHandlerOutput::from_event(event, allow_any)
5773 }
5774 DeserializerArtifact::Deserializer(deserializer) => {
5775 let ret = ElementHandlerOutput::from_event(event, allow_any);
5776 match &ret {
5777 ElementHandlerOutput::Continue { .. } => {
5778 fallback.get_or_insert(
5779 DefaultOpenContentDeserializerState::Annotation(Some(deserializer)),
5780 );
5781 *self.state = DefaultOpenContentDeserializerState::Any(None);
5782 }
5783 ElementHandlerOutput::Break { .. } => {
5784 *self.state =
5785 DefaultOpenContentDeserializerState::Annotation(Some(deserializer));
5786 }
5787 }
5788 ret
5789 }
5790 })
5791 }
5792 fn handle_any<'de, R>(
5793 &mut self,
5794 reader: &R,
5795 output: DeserializerOutput<'de, super::WildcardType>,
5796 fallback: &mut Option<DefaultOpenContentDeserializerState>,
5797 ) -> Result<ElementHandlerOutput<'de>, Error>
5798 where
5799 R: DeserializeReader,
5800 {
5801 let DeserializerOutput {
5802 artifact,
5803 event,
5804 allow_any,
5805 } = output;
5806 if artifact.is_none() {
5807 if self.any.is_some() {
5808 fallback.get_or_insert(DefaultOpenContentDeserializerState::Any(None));
5809 *self.state = DefaultOpenContentDeserializerState::Done__;
5810 return Ok(ElementHandlerOutput::from_event(event, allow_any));
5811 } else {
5812 *self.state = DefaultOpenContentDeserializerState::Any(None);
5813 return Ok(ElementHandlerOutput::break_(event, allow_any));
5814 }
5815 }
5816 if let Some(fallback) = fallback.take() {
5817 self.finish_state(reader, fallback)?;
5818 }
5819 Ok(match artifact {
5820 DeserializerArtifact::None => unreachable!(),
5821 DeserializerArtifact::Data(data) => {
5822 self.store_any(data)?;
5823 *self.state = DefaultOpenContentDeserializerState::Done__;
5824 ElementHandlerOutput::from_event(event, allow_any)
5825 }
5826 DeserializerArtifact::Deserializer(deserializer) => {
5827 let ret = ElementHandlerOutput::from_event(event, allow_any);
5828 match &ret {
5829 ElementHandlerOutput::Continue { .. } => {
5830 fallback.get_or_insert(DefaultOpenContentDeserializerState::Any(Some(
5831 deserializer,
5832 )));
5833 *self.state = DefaultOpenContentDeserializerState::Done__;
5834 }
5835 ElementHandlerOutput::Break { .. } => {
5836 *self.state =
5837 DefaultOpenContentDeserializerState::Any(Some(deserializer));
5838 }
5839 }
5840 ret
5841 }
5842 })
5843 }
5844 }
5845 impl<'de> Deserializer<'de, super::DefaultOpenContent> for DefaultOpenContentDeserializer {
5846 fn init<R>(
5847 reader: &R,
5848 event: Event<'de>,
5849 ) -> DeserializerResult<'de, super::DefaultOpenContent>
5850 where
5851 R: DeserializeReader,
5852 {
5853 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
5854 }
5855 fn next<R>(
5856 mut self,
5857 reader: &R,
5858 event: Event<'de>,
5859 ) -> DeserializerResult<'de, super::DefaultOpenContent>
5860 where
5861 R: DeserializeReader,
5862 {
5863 use DefaultOpenContentDeserializerState as S;
5864 let mut event = event;
5865 let mut fallback = None;
5866 let mut allow_any_element = false;
5867 let (event, allow_any) = loop {
5868 let state = replace(&mut *self.state, S::Unknown__);
5869 event = match (state, event) {
5870 (S::Annotation(Some(deserializer)), event) => {
5871 let output = deserializer.next(reader, event)?;
5872 match self.handle_annotation(reader, output, &mut fallback)? {
5873 ElementHandlerOutput::Continue { event, allow_any } => {
5874 allow_any_element = allow_any_element || allow_any;
5875 event
5876 }
5877 ElementHandlerOutput::Break { event, allow_any } => {
5878 break (event, allow_any)
5879 }
5880 }
5881 }
5882 (S::Any(Some(deserializer)), event) => {
5883 let output = deserializer.next(reader, event)?;
5884 match self.handle_any(reader, output, &mut fallback)? {
5885 ElementHandlerOutput::Continue { event, allow_any } => {
5886 allow_any_element = allow_any_element || allow_any;
5887 event
5888 }
5889 ElementHandlerOutput::Break { event, allow_any } => {
5890 break (event, allow_any)
5891 }
5892 }
5893 }
5894 (_, Event::End(_)) => {
5895 if let Some(fallback) = fallback.take() {
5896 self.finish_state(reader, fallback)?;
5897 }
5898 return Ok(DeserializerOutput {
5899 artifact: DeserializerArtifact::Data(self.finish(reader)?),
5900 event: DeserializerEvent::None,
5901 allow_any: false,
5902 });
5903 }
5904 (S::Init__, event) => {
5905 fallback.get_or_insert(S::Init__);
5906 *self.state = DefaultOpenContentDeserializerState::Annotation(None);
5907 event
5908 }
5909 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
5910 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
5911 let output =
5912 <super::Annotation as WithDeserializer>::Deserializer::init(
5913 reader, event,
5914 )?;
5915 match self.handle_annotation(reader, output, &mut fallback)? {
5916 ElementHandlerOutput::Continue { event, allow_any } => {
5917 allow_any_element = allow_any_element || allow_any;
5918 event
5919 }
5920 ElementHandlerOutput::Break { event, allow_any } => {
5921 break (event, allow_any)
5922 }
5923 }
5924 } else {
5925 *self.state = S::Any(None);
5926 allow_any_element = true;
5927 fallback.get_or_insert(S::Annotation(None));
5928 event
5929 }
5930 }
5931 (S::Any(None), event @ (Event::Start(_) | Event::Empty(_))) => {
5932 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"any") {
5933 let output =
5934 <super::WildcardType as WithDeserializer>::Deserializer::init(
5935 reader, event,
5936 )?;
5937 match self.handle_any(reader, output, &mut fallback)? {
5938 ElementHandlerOutput::Continue { event, allow_any } => {
5939 allow_any_element = allow_any_element || allow_any;
5940 event
5941 }
5942 ElementHandlerOutput::Break { event, allow_any } => {
5943 break (event, allow_any)
5944 }
5945 }
5946 } else {
5947 *self.state = S::Done__;
5948 allow_any_element = true;
5949 fallback.get_or_insert(S::Any(None));
5950 event
5951 }
5952 }
5953 (S::Done__, event) => {
5954 fallback.get_or_insert(S::Done__);
5955 break (DeserializerEvent::Continue(event), allow_any_element);
5956 }
5957 (S::Unknown__, _) => unreachable!(),
5958 (state, event) => {
5959 *self.state = state;
5960 break (DeserializerEvent::Break(event), false);
5961 }
5962 }
5963 };
5964 if let Some(fallback) = fallback {
5965 *self.state = fallback;
5966 }
5967 Ok(DeserializerOutput {
5968 artifact: DeserializerArtifact::Deserializer(self),
5969 event,
5970 allow_any,
5971 })
5972 }
5973 fn finish<R>(mut self, reader: &R) -> Result<super::DefaultOpenContent, Error>
5974 where
5975 R: DeserializeReader,
5976 {
5977 let state = replace(
5978 &mut *self.state,
5979 DefaultOpenContentDeserializerState::Unknown__,
5980 );
5981 self.finish_state(reader, state)?;
5982 Ok(super::DefaultOpenContent {
5983 id: self.id,
5984 applies_to_empty: self.applies_to_empty,
5985 mode: self.mode,
5986 annotation: self.annotation,
5987 any: self
5988 .any
5989 .ok_or_else(|| ErrorKind::MissingElement("any".into()))?,
5990 })
5991 }
5992 }
5993 #[derive(Debug)]
5994 pub struct SimpleBaseTypeDeserializer {
5995 id: Option<String>,
5996 final_: Option<super::SimpleDerivationSetType>,
5997 name: Option<String>,
5998 content: Vec<super::SimpleBaseTypeContent>,
5999 state: Box<SimpleBaseTypeDeserializerState>,
6000 }
6001 #[derive(Debug)]
6002 enum SimpleBaseTypeDeserializerState {
6003 Init__,
6004 Next__,
6005 Content__(<super::SimpleBaseTypeContent as WithDeserializer>::Deserializer),
6006 Unknown__,
6007 }
6008 impl SimpleBaseTypeDeserializer {
6009 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
6010 where
6011 R: DeserializeReader,
6012 {
6013 let mut id: Option<String> = None;
6014 let mut final_: Option<super::SimpleDerivationSetType> = None;
6015 let mut name: Option<String> = None;
6016 for attrib in filter_xmlns_attributes(bytes_start) {
6017 let attrib = attrib?;
6018 if matches!(
6019 reader.resolve_local_name(attrib.key, &super::NS_XS),
6020 Some(b"id")
6021 ) {
6022 reader.read_attrib(&mut id, b"id", &attrib.value)?;
6023 } else if matches!(
6024 reader.resolve_local_name(attrib.key, &super::NS_XS),
6025 Some(b"final")
6026 ) {
6027 reader.read_attrib(&mut final_, b"final", &attrib.value)?;
6028 } else if matches!(
6029 reader.resolve_local_name(attrib.key, &super::NS_XS),
6030 Some(b"name")
6031 ) {
6032 reader.read_attrib(&mut name, b"name", &attrib.value)?;
6033 }
6034 }
6035 Ok(Self {
6036 id: id,
6037 final_: final_,
6038 name: name,
6039 content: Vec::new(),
6040 state: Box::new(SimpleBaseTypeDeserializerState::Init__),
6041 })
6042 }
6043 fn finish_state<R>(
6044 &mut self,
6045 reader: &R,
6046 state: SimpleBaseTypeDeserializerState,
6047 ) -> Result<(), Error>
6048 where
6049 R: DeserializeReader,
6050 {
6051 if let SimpleBaseTypeDeserializerState::Content__(deserializer) = state {
6052 self.store_content(deserializer.finish(reader)?)?;
6053 }
6054 Ok(())
6055 }
6056 fn store_content(&mut self, value: super::SimpleBaseTypeContent) -> Result<(), Error> {
6057 self.content.push(value);
6058 Ok(())
6059 }
6060 fn handle_content<'de, R>(
6061 &mut self,
6062 reader: &R,
6063 output: DeserializerOutput<'de, super::SimpleBaseTypeContent>,
6064 fallback: &mut Option<SimpleBaseTypeDeserializerState>,
6065 ) -> Result<ElementHandlerOutput<'de>, Error>
6066 where
6067 R: DeserializeReader,
6068 {
6069 let DeserializerOutput {
6070 artifact,
6071 event,
6072 allow_any,
6073 } = output;
6074 if artifact.is_none() {
6075 *self.state = fallback
6076 .take()
6077 .unwrap_or(SimpleBaseTypeDeserializerState::Next__);
6078 return Ok(ElementHandlerOutput::break_(event, allow_any));
6079 }
6080 if let Some(fallback) = fallback.take() {
6081 self.finish_state(reader, fallback)?;
6082 }
6083 Ok(match artifact {
6084 DeserializerArtifact::None => unreachable!(),
6085 DeserializerArtifact::Data(data) => {
6086 self.store_content(data)?;
6087 *self.state = SimpleBaseTypeDeserializerState::Next__;
6088 ElementHandlerOutput::from_event(event, allow_any)
6089 }
6090 DeserializerArtifact::Deserializer(deserializer) => {
6091 let ret = ElementHandlerOutput::from_event(event, allow_any);
6092 match &ret {
6093 ElementHandlerOutput::Continue { .. } => {
6094 fallback.get_or_insert(SimpleBaseTypeDeserializerState::Content__(
6095 deserializer,
6096 ));
6097 *self.state = SimpleBaseTypeDeserializerState::Next__;
6098 }
6099 ElementHandlerOutput::Break { .. } => {
6100 *self.state = SimpleBaseTypeDeserializerState::Content__(deserializer);
6101 }
6102 }
6103 ret
6104 }
6105 })
6106 }
6107 }
6108 impl<'de> Deserializer<'de, super::SimpleBaseType> for SimpleBaseTypeDeserializer {
6109 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::SimpleBaseType>
6110 where
6111 R: DeserializeReader,
6112 {
6113 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
6114 }
6115 fn next<R>(
6116 mut self,
6117 reader: &R,
6118 event: Event<'de>,
6119 ) -> DeserializerResult<'de, super::SimpleBaseType>
6120 where
6121 R: DeserializeReader,
6122 {
6123 use SimpleBaseTypeDeserializerState as S;
6124 let mut event = event;
6125 let mut fallback = None;
6126 let (event, allow_any) = loop {
6127 let state = replace(&mut *self.state, S::Unknown__);
6128 event = match (state, event) {
6129 (S::Content__(deserializer), event) => {
6130 let output = deserializer.next(reader, event)?;
6131 match self.handle_content(reader, output, &mut fallback)? {
6132 ElementHandlerOutput::Break { event, allow_any } => {
6133 break (event, allow_any)
6134 }
6135 ElementHandlerOutput::Continue { event, .. } => event,
6136 }
6137 }
6138 (_, Event::End(_)) => {
6139 return Ok(DeserializerOutput {
6140 artifact: DeserializerArtifact::Data(self.finish(reader)?),
6141 event: DeserializerEvent::None,
6142 allow_any: false,
6143 });
6144 }
6145 (old_state @ (S::Init__ | S::Next__), event) => {
6146 let output =
6147 <super::SimpleBaseTypeContent as WithDeserializer>::Deserializer::init(
6148 reader, event,
6149 )?;
6150 match self.handle_content(reader, output, &mut fallback)? {
6151 ElementHandlerOutput::Break { event, allow_any } => {
6152 if matches!(&*self.state, S::Unknown__) {
6153 *self.state = old_state;
6154 }
6155 break (event, allow_any);
6156 }
6157 ElementHandlerOutput::Continue { event, .. } => event,
6158 }
6159 }
6160 (S::Unknown__, _) => unreachable!(),
6161 }
6162 };
6163 Ok(DeserializerOutput {
6164 artifact: DeserializerArtifact::Deserializer(self),
6165 event,
6166 allow_any,
6167 })
6168 }
6169 fn finish<R>(mut self, reader: &R) -> Result<super::SimpleBaseType, Error>
6170 where
6171 R: DeserializeReader,
6172 {
6173 let state = replace(&mut *self.state, SimpleBaseTypeDeserializerState::Unknown__);
6174 self.finish_state(reader, state)?;
6175 Ok(super::SimpleBaseType {
6176 id: self.id,
6177 final_: self.final_,
6178 name: self.name,
6179 content: self.content,
6180 })
6181 }
6182 }
6183 #[derive(Debug)]
6184 pub enum SimpleBaseTypeContentDeserializer {
6185 Init__,
6186 Annotation(
6187 Option<super::Annotation>,
6188 Option<<super::Annotation as WithDeserializer>::Deserializer>,
6189 ),
6190 Restriction(
6191 Option<super::Restriction>,
6192 Option<<super::Restriction as WithDeserializer>::Deserializer>,
6193 ),
6194 List(
6195 Option<super::List>,
6196 Option<<super::List as WithDeserializer>::Deserializer>,
6197 ),
6198 Union(
6199 Option<super::Union>,
6200 Option<<super::Union as WithDeserializer>::Deserializer>,
6201 ),
6202 Done__(super::SimpleBaseTypeContent),
6203 Unknown__,
6204 }
6205 impl SimpleBaseTypeContentDeserializer {
6206 fn find_suitable<'de, R>(
6207 &mut self,
6208 reader: &R,
6209 event: Event<'de>,
6210 fallback: &mut Option<SimpleBaseTypeContentDeserializer>,
6211 ) -> Result<ElementHandlerOutput<'de>, Error>
6212 where
6213 R: DeserializeReader,
6214 {
6215 let (Event::Start(x) | Event::Empty(x)) = &event else {
6216 *self = Self::Init__;
6217 return Ok(ElementHandlerOutput::return_to_parent(event, false));
6218 };
6219 if matches!(
6220 reader.resolve_local_name(x.name(), &super::NS_XS),
6221 Some(b"annotation")
6222 ) {
6223 let output =
6224 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
6225 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
6226 }
6227 if matches!(
6228 reader.resolve_local_name(x.name(), &super::NS_XS),
6229 Some(b"restriction")
6230 ) {
6231 let output =
6232 <super::Restriction as WithDeserializer>::Deserializer::init(reader, event)?;
6233 return self.handle_restriction(reader, Default::default(), output, &mut *fallback);
6234 }
6235 if matches!(
6236 reader.resolve_local_name(x.name(), &super::NS_XS),
6237 Some(b"list")
6238 ) {
6239 let output = <super::List as WithDeserializer>::Deserializer::init(reader, event)?;
6240 return self.handle_list(reader, Default::default(), output, &mut *fallback);
6241 }
6242 if matches!(
6243 reader.resolve_local_name(x.name(), &super::NS_XS),
6244 Some(b"union")
6245 ) {
6246 let output = <super::Union as WithDeserializer>::Deserializer::init(reader, event)?;
6247 return self.handle_union_(reader, Default::default(), output, &mut *fallback);
6248 }
6249 *self = Self::Init__;
6250 Ok(ElementHandlerOutput::return_to_parent(event, false))
6251 }
6252 fn store_annotation(
6253 values: &mut Option<super::Annotation>,
6254 value: super::Annotation,
6255 ) -> Result<(), Error> {
6256 if values.is_some() {
6257 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
6258 b"annotation",
6259 )))?;
6260 }
6261 *values = Some(value);
6262 Ok(())
6263 }
6264 fn store_restriction(
6265 values: &mut Option<super::Restriction>,
6266 value: super::Restriction,
6267 ) -> Result<(), Error> {
6268 if values.is_some() {
6269 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
6270 b"restriction",
6271 )))?;
6272 }
6273 *values = Some(value);
6274 Ok(())
6275 }
6276 fn store_list(values: &mut Option<super::List>, value: super::List) -> Result<(), Error> {
6277 if values.is_some() {
6278 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"list")))?;
6279 }
6280 *values = Some(value);
6281 Ok(())
6282 }
6283 fn store_union_(
6284 values: &mut Option<super::Union>,
6285 value: super::Union,
6286 ) -> Result<(), Error> {
6287 if values.is_some() {
6288 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
6289 b"union",
6290 )))?;
6291 }
6292 *values = Some(value);
6293 Ok(())
6294 }
6295 fn handle_annotation<'de, R>(
6296 &mut self,
6297 reader: &R,
6298 mut values: Option<super::Annotation>,
6299 output: DeserializerOutput<'de, super::Annotation>,
6300 fallback: &mut Option<Self>,
6301 ) -> Result<ElementHandlerOutput<'de>, Error>
6302 where
6303 R: DeserializeReader,
6304 {
6305 let DeserializerOutput {
6306 artifact,
6307 event,
6308 allow_any,
6309 } = output;
6310 if artifact.is_none() {
6311 *self = match fallback.take() {
6312 None => Self::Init__,
6313 Some(Self::Annotation(_, Some(deserializer))) => {
6314 Self::Annotation(values, Some(deserializer))
6315 }
6316 _ => unreachable!(),
6317 };
6318 return Ok(ElementHandlerOutput::break_(event, allow_any));
6319 }
6320 match fallback.take() {
6321 None => (),
6322 Some(Self::Annotation(_, Some(deserializer))) => {
6323 let data = deserializer.finish(reader)?;
6324 Self::store_annotation(&mut values, data)?;
6325 }
6326 Some(_) => unreachable!(),
6327 }
6328 Ok(match artifact {
6329 DeserializerArtifact::None => unreachable!(),
6330 DeserializerArtifact::Data(data) => {
6331 Self::store_annotation(&mut values, data)?;
6332 let data = Self::Annotation(values, None).finish(reader)?;
6333 *self = Self::Done__(data);
6334 ElementHandlerOutput::Break { event, allow_any }
6335 }
6336 DeserializerArtifact::Deserializer(deserializer) => {
6337 *self = Self::Annotation(values, Some(deserializer));
6338 ElementHandlerOutput::from_event_end(event, allow_any)
6339 }
6340 })
6341 }
6342 fn handle_restriction<'de, R>(
6343 &mut self,
6344 reader: &R,
6345 mut values: Option<super::Restriction>,
6346 output: DeserializerOutput<'de, super::Restriction>,
6347 fallback: &mut Option<Self>,
6348 ) -> Result<ElementHandlerOutput<'de>, Error>
6349 where
6350 R: DeserializeReader,
6351 {
6352 let DeserializerOutput {
6353 artifact,
6354 event,
6355 allow_any,
6356 } = output;
6357 if artifact.is_none() {
6358 *self = match fallback.take() {
6359 None => Self::Init__,
6360 Some(Self::Restriction(_, Some(deserializer))) => {
6361 Self::Restriction(values, Some(deserializer))
6362 }
6363 _ => unreachable!(),
6364 };
6365 return Ok(ElementHandlerOutput::break_(event, allow_any));
6366 }
6367 match fallback.take() {
6368 None => (),
6369 Some(Self::Restriction(_, Some(deserializer))) => {
6370 let data = deserializer.finish(reader)?;
6371 Self::store_restriction(&mut values, data)?;
6372 }
6373 Some(_) => unreachable!(),
6374 }
6375 Ok(match artifact {
6376 DeserializerArtifact::None => unreachable!(),
6377 DeserializerArtifact::Data(data) => {
6378 Self::store_restriction(&mut values, data)?;
6379 let data = Self::Restriction(values, None).finish(reader)?;
6380 *self = Self::Done__(data);
6381 ElementHandlerOutput::Break { event, allow_any }
6382 }
6383 DeserializerArtifact::Deserializer(deserializer) => {
6384 *self = Self::Restriction(values, Some(deserializer));
6385 ElementHandlerOutput::from_event_end(event, allow_any)
6386 }
6387 })
6388 }
6389 fn handle_list<'de, R>(
6390 &mut self,
6391 reader: &R,
6392 mut values: Option<super::List>,
6393 output: DeserializerOutput<'de, super::List>,
6394 fallback: &mut Option<Self>,
6395 ) -> Result<ElementHandlerOutput<'de>, Error>
6396 where
6397 R: DeserializeReader,
6398 {
6399 let DeserializerOutput {
6400 artifact,
6401 event,
6402 allow_any,
6403 } = output;
6404 if artifact.is_none() {
6405 *self = match fallback.take() {
6406 None => Self::Init__,
6407 Some(Self::List(_, Some(deserializer))) => {
6408 Self::List(values, Some(deserializer))
6409 }
6410 _ => unreachable!(),
6411 };
6412 return Ok(ElementHandlerOutput::break_(event, allow_any));
6413 }
6414 match fallback.take() {
6415 None => (),
6416 Some(Self::List(_, Some(deserializer))) => {
6417 let data = deserializer.finish(reader)?;
6418 Self::store_list(&mut values, data)?;
6419 }
6420 Some(_) => unreachable!(),
6421 }
6422 Ok(match artifact {
6423 DeserializerArtifact::None => unreachable!(),
6424 DeserializerArtifact::Data(data) => {
6425 Self::store_list(&mut values, data)?;
6426 let data = Self::List(values, None).finish(reader)?;
6427 *self = Self::Done__(data);
6428 ElementHandlerOutput::Break { event, allow_any }
6429 }
6430 DeserializerArtifact::Deserializer(deserializer) => {
6431 *self = Self::List(values, Some(deserializer));
6432 ElementHandlerOutput::from_event_end(event, allow_any)
6433 }
6434 })
6435 }
6436 fn handle_union_<'de, R>(
6437 &mut self,
6438 reader: &R,
6439 mut values: Option<super::Union>,
6440 output: DeserializerOutput<'de, super::Union>,
6441 fallback: &mut Option<Self>,
6442 ) -> Result<ElementHandlerOutput<'de>, Error>
6443 where
6444 R: DeserializeReader,
6445 {
6446 let DeserializerOutput {
6447 artifact,
6448 event,
6449 allow_any,
6450 } = output;
6451 if artifact.is_none() {
6452 *self = match fallback.take() {
6453 None => Self::Init__,
6454 Some(Self::Union(_, Some(deserializer))) => {
6455 Self::Union(values, Some(deserializer))
6456 }
6457 _ => unreachable!(),
6458 };
6459 return Ok(ElementHandlerOutput::break_(event, allow_any));
6460 }
6461 match fallback.take() {
6462 None => (),
6463 Some(Self::Union(_, Some(deserializer))) => {
6464 let data = deserializer.finish(reader)?;
6465 Self::store_union_(&mut values, data)?;
6466 }
6467 Some(_) => unreachable!(),
6468 }
6469 Ok(match artifact {
6470 DeserializerArtifact::None => unreachable!(),
6471 DeserializerArtifact::Data(data) => {
6472 Self::store_union_(&mut values, data)?;
6473 let data = Self::Union(values, None).finish(reader)?;
6474 *self = Self::Done__(data);
6475 ElementHandlerOutput::Break { event, allow_any }
6476 }
6477 DeserializerArtifact::Deserializer(deserializer) => {
6478 *self = Self::Union(values, Some(deserializer));
6479 ElementHandlerOutput::from_event_end(event, allow_any)
6480 }
6481 })
6482 }
6483 }
6484 impl<'de> Deserializer<'de, super::SimpleBaseTypeContent> for SimpleBaseTypeContentDeserializer {
6485 fn init<R>(
6486 reader: &R,
6487 event: Event<'de>,
6488 ) -> DeserializerResult<'de, super::SimpleBaseTypeContent>
6489 where
6490 R: DeserializeReader,
6491 {
6492 let deserializer = Self::Init__;
6493 let mut output = deserializer.next(reader, event)?;
6494 output.artifact = match output.artifact {
6495 DeserializerArtifact::Deserializer(Self::Init__) => DeserializerArtifact::None,
6496 artifact => artifact,
6497 };
6498 Ok(output)
6499 }
6500 fn next<R>(
6501 mut self,
6502 reader: &R,
6503 event: Event<'de>,
6504 ) -> DeserializerResult<'de, super::SimpleBaseTypeContent>
6505 where
6506 R: DeserializeReader,
6507 {
6508 let mut event = event;
6509 let mut fallback = None;
6510 let (event, allow_any) = loop {
6511 let state = replace(&mut self, Self::Unknown__);
6512 event = match (state, event) {
6513 (Self::Annotation(values, Some(deserializer)), event) => {
6514 let output = deserializer.next(reader, event)?;
6515 match self.handle_annotation(reader, values, output, &mut fallback)? {
6516 ElementHandlerOutput::Break { event, allow_any } => {
6517 break (event, allow_any)
6518 }
6519 ElementHandlerOutput::Continue { event, .. } => event,
6520 }
6521 }
6522 (Self::Restriction(values, Some(deserializer)), event) => {
6523 let output = deserializer.next(reader, event)?;
6524 match self.handle_restriction(reader, values, output, &mut fallback)? {
6525 ElementHandlerOutput::Break { event, allow_any } => {
6526 break (event, allow_any)
6527 }
6528 ElementHandlerOutput::Continue { event, .. } => event,
6529 }
6530 }
6531 (Self::List(values, Some(deserializer)), event) => {
6532 let output = deserializer.next(reader, event)?;
6533 match self.handle_list(reader, values, output, &mut fallback)? {
6534 ElementHandlerOutput::Break { event, allow_any } => {
6535 break (event, allow_any)
6536 }
6537 ElementHandlerOutput::Continue { event, .. } => event,
6538 }
6539 }
6540 (Self::Union(values, Some(deserializer)), event) => {
6541 let output = deserializer.next(reader, event)?;
6542 match self.handle_union_(reader, values, output, &mut fallback)? {
6543 ElementHandlerOutput::Break { event, allow_any } => {
6544 break (event, allow_any)
6545 }
6546 ElementHandlerOutput::Continue { event, .. } => event,
6547 }
6548 }
6549 (state, event @ Event::End(_)) => {
6550 return Ok(DeserializerOutput {
6551 artifact: DeserializerArtifact::Data(state.finish(reader)?),
6552 event: DeserializerEvent::Continue(event),
6553 allow_any: false,
6554 });
6555 }
6556 (Self::Init__, event) => {
6557 match self.find_suitable(reader, event, &mut fallback)? {
6558 ElementHandlerOutput::Break { event, allow_any } => {
6559 break (event, allow_any)
6560 }
6561 ElementHandlerOutput::Continue { event, .. } => event,
6562 }
6563 }
6564 (Self::Annotation(values, None), event) => {
6565 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
6566 reader, event,
6567 )?;
6568 match self.handle_annotation(reader, values, output, &mut fallback)? {
6569 ElementHandlerOutput::Break { event, allow_any } => {
6570 break (event, allow_any)
6571 }
6572 ElementHandlerOutput::Continue { event, .. } => event,
6573 }
6574 }
6575 (Self::Restriction(values, None), event) => {
6576 let output = <super::Restriction as WithDeserializer>::Deserializer::init(
6577 reader, event,
6578 )?;
6579 match self.handle_restriction(reader, values, output, &mut fallback)? {
6580 ElementHandlerOutput::Break { event, allow_any } => {
6581 break (event, allow_any)
6582 }
6583 ElementHandlerOutput::Continue { event, .. } => event,
6584 }
6585 }
6586 (Self::List(values, None), event) => {
6587 let output =
6588 <super::List as WithDeserializer>::Deserializer::init(reader, event)?;
6589 match self.handle_list(reader, values, output, &mut fallback)? {
6590 ElementHandlerOutput::Break { event, allow_any } => {
6591 break (event, allow_any)
6592 }
6593 ElementHandlerOutput::Continue { event, .. } => event,
6594 }
6595 }
6596 (Self::Union(values, None), event) => {
6597 let output =
6598 <super::Union as WithDeserializer>::Deserializer::init(reader, event)?;
6599 match self.handle_union_(reader, values, output, &mut fallback)? {
6600 ElementHandlerOutput::Break { event, allow_any } => {
6601 break (event, allow_any)
6602 }
6603 ElementHandlerOutput::Continue { event, .. } => event,
6604 }
6605 }
6606 (s @ Self::Done__(_), event) => {
6607 self = s;
6608 break (DeserializerEvent::Continue(event), false);
6609 }
6610 (Self::Unknown__, _) => unreachable!(),
6611 }
6612 };
6613 let artifact = match self {
6614 Self::Done__(data) => DeserializerArtifact::Data(data),
6615 deserializer => DeserializerArtifact::Deserializer(deserializer),
6616 };
6617 Ok(DeserializerOutput {
6618 artifact,
6619 event,
6620 allow_any,
6621 })
6622 }
6623 fn finish<R>(self, reader: &R) -> Result<super::SimpleBaseTypeContent, Error>
6624 where
6625 R: DeserializeReader,
6626 {
6627 match self {
6628 Self::Init__ => Err(ErrorKind::MissingContent.into()),
6629 Self::Annotation(mut values, deserializer) => {
6630 if let Some(deserializer) = deserializer {
6631 let value = deserializer.finish(reader)?;
6632 Self::store_annotation(&mut values, value)?;
6633 }
6634 Ok(super::SimpleBaseTypeContent::Annotation(
6635 values.ok_or_else(|| ErrorKind::MissingElement("annotation".into()))?,
6636 ))
6637 }
6638 Self::Restriction(mut values, deserializer) => {
6639 if let Some(deserializer) = deserializer {
6640 let value = deserializer.finish(reader)?;
6641 Self::store_restriction(&mut values, value)?;
6642 }
6643 Ok(super::SimpleBaseTypeContent::Restriction(
6644 values.ok_or_else(|| ErrorKind::MissingElement("restriction".into()))?,
6645 ))
6646 }
6647 Self::List(mut values, deserializer) => {
6648 if let Some(deserializer) = deserializer {
6649 let value = deserializer.finish(reader)?;
6650 Self::store_list(&mut values, value)?;
6651 }
6652 Ok(super::SimpleBaseTypeContent::List(
6653 values.ok_or_else(|| ErrorKind::MissingElement("list".into()))?,
6654 ))
6655 }
6656 Self::Union(mut values, deserializer) => {
6657 if let Some(deserializer) = deserializer {
6658 let value = deserializer.finish(reader)?;
6659 Self::store_union_(&mut values, value)?;
6660 }
6661 Ok(super::SimpleBaseTypeContent::Union(values.ok_or_else(
6662 || ErrorKind::MissingElement("union".into()),
6663 )?))
6664 }
6665 Self::Done__(data) => Ok(data),
6666 Self::Unknown__ => unreachable!(),
6667 }
6668 }
6669 }
6670 #[derive(Debug)]
6671 pub struct ComplexBaseTypeDeserializer {
6672 id: Option<String>,
6673 name: Option<String>,
6674 mixed: Option<bool>,
6675 abstract_: bool,
6676 final_: Option<super::DerivationSetType>,
6677 block: Option<super::DerivationSetType>,
6678 default_attributes_apply: bool,
6679 content: Vec<super::ComplexBaseTypeContent>,
6680 state: Box<ComplexBaseTypeDeserializerState>,
6681 }
6682 #[derive(Debug)]
6683 enum ComplexBaseTypeDeserializerState {
6684 Init__,
6685 Next__,
6686 Content__(<super::ComplexBaseTypeContent as WithDeserializer>::Deserializer),
6687 Unknown__,
6688 }
6689 impl ComplexBaseTypeDeserializer {
6690 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
6691 where
6692 R: DeserializeReader,
6693 {
6694 let mut id: Option<String> = None;
6695 let mut name: Option<String> = None;
6696 let mut mixed: Option<bool> = None;
6697 let mut abstract_: Option<bool> = None;
6698 let mut final_: Option<super::DerivationSetType> = None;
6699 let mut block: Option<super::DerivationSetType> = None;
6700 let mut default_attributes_apply: Option<bool> = None;
6701 for attrib in filter_xmlns_attributes(bytes_start) {
6702 let attrib = attrib?;
6703 if matches!(
6704 reader.resolve_local_name(attrib.key, &super::NS_XS),
6705 Some(b"id")
6706 ) {
6707 reader.read_attrib(&mut id, b"id", &attrib.value)?;
6708 } else if matches!(
6709 reader.resolve_local_name(attrib.key, &super::NS_XS),
6710 Some(b"name")
6711 ) {
6712 reader.read_attrib(&mut name, b"name", &attrib.value)?;
6713 } else if matches!(
6714 reader.resolve_local_name(attrib.key, &super::NS_XS),
6715 Some(b"mixed")
6716 ) {
6717 reader.read_attrib(&mut mixed, b"mixed", &attrib.value)?;
6718 } else if matches!(
6719 reader.resolve_local_name(attrib.key, &super::NS_XS),
6720 Some(b"abstract")
6721 ) {
6722 reader.read_attrib(&mut abstract_, b"abstract", &attrib.value)?;
6723 } else if matches!(
6724 reader.resolve_local_name(attrib.key, &super::NS_XS),
6725 Some(b"final")
6726 ) {
6727 reader.read_attrib(&mut final_, b"final", &attrib.value)?;
6728 } else if matches!(
6729 reader.resolve_local_name(attrib.key, &super::NS_XS),
6730 Some(b"block")
6731 ) {
6732 reader.read_attrib(&mut block, b"block", &attrib.value)?;
6733 } else if matches!(
6734 reader.resolve_local_name(attrib.key, &super::NS_XS),
6735 Some(b"defaultAttributesApply")
6736 ) {
6737 reader.read_attrib(
6738 &mut default_attributes_apply,
6739 b"defaultAttributesApply",
6740 &attrib.value,
6741 )?;
6742 }
6743 }
6744 Ok(Self {
6745 id: id,
6746 name: name,
6747 mixed: mixed,
6748 abstract_: abstract_.unwrap_or_else(super::ComplexBaseType::default_abstract_),
6749 final_: final_,
6750 block: block,
6751 default_attributes_apply: default_attributes_apply
6752 .unwrap_or_else(super::ComplexBaseType::default_default_attributes_apply),
6753 content: Vec::new(),
6754 state: Box::new(ComplexBaseTypeDeserializerState::Init__),
6755 })
6756 }
6757 fn finish_state<R>(
6758 &mut self,
6759 reader: &R,
6760 state: ComplexBaseTypeDeserializerState,
6761 ) -> Result<(), Error>
6762 where
6763 R: DeserializeReader,
6764 {
6765 if let ComplexBaseTypeDeserializerState::Content__(deserializer) = state {
6766 self.store_content(deserializer.finish(reader)?)?;
6767 }
6768 Ok(())
6769 }
6770 fn store_content(&mut self, value: super::ComplexBaseTypeContent) -> Result<(), Error> {
6771 self.content.push(value);
6772 Ok(())
6773 }
6774 fn handle_content<'de, R>(
6775 &mut self,
6776 reader: &R,
6777 output: DeserializerOutput<'de, super::ComplexBaseTypeContent>,
6778 fallback: &mut Option<ComplexBaseTypeDeserializerState>,
6779 ) -> Result<ElementHandlerOutput<'de>, Error>
6780 where
6781 R: DeserializeReader,
6782 {
6783 let DeserializerOutput {
6784 artifact,
6785 event,
6786 allow_any,
6787 } = output;
6788 if artifact.is_none() {
6789 *self.state = fallback
6790 .take()
6791 .unwrap_or(ComplexBaseTypeDeserializerState::Next__);
6792 return Ok(ElementHandlerOutput::break_(event, allow_any));
6793 }
6794 if let Some(fallback) = fallback.take() {
6795 self.finish_state(reader, fallback)?;
6796 }
6797 Ok(match artifact {
6798 DeserializerArtifact::None => unreachable!(),
6799 DeserializerArtifact::Data(data) => {
6800 self.store_content(data)?;
6801 *self.state = ComplexBaseTypeDeserializerState::Next__;
6802 ElementHandlerOutput::from_event(event, allow_any)
6803 }
6804 DeserializerArtifact::Deserializer(deserializer) => {
6805 let ret = ElementHandlerOutput::from_event(event, allow_any);
6806 match &ret {
6807 ElementHandlerOutput::Continue { .. } => {
6808 fallback.get_or_insert(ComplexBaseTypeDeserializerState::Content__(
6809 deserializer,
6810 ));
6811 *self.state = ComplexBaseTypeDeserializerState::Next__;
6812 }
6813 ElementHandlerOutput::Break { .. } => {
6814 *self.state = ComplexBaseTypeDeserializerState::Content__(deserializer);
6815 }
6816 }
6817 ret
6818 }
6819 })
6820 }
6821 }
6822 impl<'de> Deserializer<'de, super::ComplexBaseType> for ComplexBaseTypeDeserializer {
6823 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::ComplexBaseType>
6824 where
6825 R: DeserializeReader,
6826 {
6827 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
6828 }
6829 fn next<R>(
6830 mut self,
6831 reader: &R,
6832 event: Event<'de>,
6833 ) -> DeserializerResult<'de, super::ComplexBaseType>
6834 where
6835 R: DeserializeReader,
6836 {
6837 use ComplexBaseTypeDeserializerState as S;
6838 let mut event = event;
6839 let mut fallback = None;
6840 let (event, allow_any) = loop {
6841 let state = replace(&mut *self.state, S::Unknown__);
6842 event = match (state, event) {
6843 (S::Content__(deserializer), event) => {
6844 let output = deserializer.next(reader, event)?;
6845 match self.handle_content(reader, output, &mut fallback)? {
6846 ElementHandlerOutput::Break { event, allow_any } => {
6847 break (event, allow_any)
6848 }
6849 ElementHandlerOutput::Continue { event, .. } => event,
6850 }
6851 }
6852 (_, Event::End(_)) => {
6853 return Ok(DeserializerOutput {
6854 artifact: DeserializerArtifact::Data(self.finish(reader)?),
6855 event: DeserializerEvent::None,
6856 allow_any: false,
6857 });
6858 }
6859 (old_state @ (S::Init__ | S::Next__), event) => {
6860 let output = < super :: ComplexBaseTypeContent as WithDeserializer > :: Deserializer :: init (reader , event) ? ;
6861 match self.handle_content(reader, output, &mut fallback)? {
6862 ElementHandlerOutput::Break { event, allow_any } => {
6863 if matches!(&*self.state, S::Unknown__) {
6864 *self.state = old_state;
6865 }
6866 break (event, allow_any);
6867 }
6868 ElementHandlerOutput::Continue { event, .. } => event,
6869 }
6870 }
6871 (S::Unknown__, _) => unreachable!(),
6872 }
6873 };
6874 Ok(DeserializerOutput {
6875 artifact: DeserializerArtifact::Deserializer(self),
6876 event,
6877 allow_any,
6878 })
6879 }
6880 fn finish<R>(mut self, reader: &R) -> Result<super::ComplexBaseType, Error>
6881 where
6882 R: DeserializeReader,
6883 {
6884 let state = replace(
6885 &mut *self.state,
6886 ComplexBaseTypeDeserializerState::Unknown__,
6887 );
6888 self.finish_state(reader, state)?;
6889 Ok(super::ComplexBaseType {
6890 id: self.id,
6891 name: self.name,
6892 mixed: self.mixed,
6893 abstract_: self.abstract_,
6894 final_: self.final_,
6895 block: self.block,
6896 default_attributes_apply: self.default_attributes_apply,
6897 content: self.content,
6898 })
6899 }
6900 }
6901 #[derive(Debug)]
6902 pub enum ComplexBaseTypeContentDeserializer {
6903 Init__,
6904 Annotation(
6905 Option<super::Annotation>,
6906 Option<<super::Annotation as WithDeserializer>::Deserializer>,
6907 ),
6908 SimpleContent(
6909 Option<super::SimpleContent>,
6910 Option<<super::SimpleContent as WithDeserializer>::Deserializer>,
6911 ),
6912 ComplexContent(
6913 Option<super::ComplexContent>,
6914 Option<<super::ComplexContent as WithDeserializer>::Deserializer>,
6915 ),
6916 OpenContent(
6917 Option<super::OpenContent>,
6918 Option<<super::OpenContent as WithDeserializer>::Deserializer>,
6919 ),
6920 Group(
6921 Option<super::GroupType>,
6922 Option<<super::GroupType as WithDeserializer>::Deserializer>,
6923 ),
6924 All(
6925 Option<super::GroupType>,
6926 Option<<super::GroupType as WithDeserializer>::Deserializer>,
6927 ),
6928 Choice(
6929 Option<super::GroupType>,
6930 Option<<super::GroupType as WithDeserializer>::Deserializer>,
6931 ),
6932 Sequence(
6933 Option<super::GroupType>,
6934 Option<<super::GroupType as WithDeserializer>::Deserializer>,
6935 ),
6936 Attribute(
6937 Option<super::AttributeType>,
6938 Option<<super::AttributeType as WithDeserializer>::Deserializer>,
6939 ),
6940 AttributeGroup(
6941 Option<super::AttributeGroupType>,
6942 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
6943 ),
6944 AnyAttribute(
6945 Option<super::AnyAttribute>,
6946 Option<<super::AnyAttribute as WithDeserializer>::Deserializer>,
6947 ),
6948 Assert(
6949 Option<super::AssertionType>,
6950 Option<<super::AssertionType as WithDeserializer>::Deserializer>,
6951 ),
6952 Done__(super::ComplexBaseTypeContent),
6953 Unknown__,
6954 }
6955 impl ComplexBaseTypeContentDeserializer {
6956 fn find_suitable<'de, R>(
6957 &mut self,
6958 reader: &R,
6959 event: Event<'de>,
6960 fallback: &mut Option<ComplexBaseTypeContentDeserializer>,
6961 ) -> Result<ElementHandlerOutput<'de>, Error>
6962 where
6963 R: DeserializeReader,
6964 {
6965 let (Event::Start(x) | Event::Empty(x)) = &event else {
6966 *self = Self::Init__;
6967 return Ok(ElementHandlerOutput::return_to_parent(event, false));
6968 };
6969 if matches!(
6970 reader.resolve_local_name(x.name(), &super::NS_XS),
6971 Some(b"annotation")
6972 ) {
6973 let output =
6974 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
6975 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
6976 }
6977 if matches!(
6978 reader.resolve_local_name(x.name(), &super::NS_XS),
6979 Some(b"simpleContent")
6980 ) {
6981 let output =
6982 <super::SimpleContent as WithDeserializer>::Deserializer::init(reader, event)?;
6983 return self.handle_simple_content(
6984 reader,
6985 Default::default(),
6986 output,
6987 &mut *fallback,
6988 );
6989 }
6990 if matches!(
6991 reader.resolve_local_name(x.name(), &super::NS_XS),
6992 Some(b"complexContent")
6993 ) {
6994 let output =
6995 <super::ComplexContent as WithDeserializer>::Deserializer::init(reader, event)?;
6996 return self.handle_complex_content(
6997 reader,
6998 Default::default(),
6999 output,
7000 &mut *fallback,
7001 );
7002 }
7003 if matches!(
7004 reader.resolve_local_name(x.name(), &super::NS_XS),
7005 Some(b"openContent")
7006 ) {
7007 let output =
7008 <super::OpenContent as WithDeserializer>::Deserializer::init(reader, event)?;
7009 return self.handle_open_content(
7010 reader,
7011 Default::default(),
7012 output,
7013 &mut *fallback,
7014 );
7015 }
7016 if matches!(
7017 reader.resolve_local_name(x.name(), &super::NS_XS),
7018 Some(b"group")
7019 ) {
7020 let output =
7021 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
7022 return self.handle_group(reader, Default::default(), output, &mut *fallback);
7023 }
7024 if matches!(
7025 reader.resolve_local_name(x.name(), &super::NS_XS),
7026 Some(b"all")
7027 ) {
7028 let output =
7029 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
7030 return self.handle_all(reader, Default::default(), output, &mut *fallback);
7031 }
7032 if matches!(
7033 reader.resolve_local_name(x.name(), &super::NS_XS),
7034 Some(b"choice")
7035 ) {
7036 let output =
7037 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
7038 return self.handle_choice(reader, Default::default(), output, &mut *fallback);
7039 }
7040 if matches!(
7041 reader.resolve_local_name(x.name(), &super::NS_XS),
7042 Some(b"sequence")
7043 ) {
7044 let output =
7045 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
7046 return self.handle_sequence(reader, Default::default(), output, &mut *fallback);
7047 }
7048 if matches!(
7049 reader.resolve_local_name(x.name(), &super::NS_XS),
7050 Some(b"attribute")
7051 ) {
7052 let output =
7053 <super::AttributeType as WithDeserializer>::Deserializer::init(reader, event)?;
7054 return self.handle_attribute(reader, Default::default(), output, &mut *fallback);
7055 }
7056 if matches!(
7057 reader.resolve_local_name(x.name(), &super::NS_XS),
7058 Some(b"attributeGroup")
7059 ) {
7060 let output = <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
7061 reader, event,
7062 )?;
7063 return self.handle_attribute_group(
7064 reader,
7065 Default::default(),
7066 output,
7067 &mut *fallback,
7068 );
7069 }
7070 if matches!(
7071 reader.resolve_local_name(x.name(), &super::NS_XS),
7072 Some(b"anyAttribute")
7073 ) {
7074 let output =
7075 <super::AnyAttribute as WithDeserializer>::Deserializer::init(reader, event)?;
7076 return self.handle_any_attribute(
7077 reader,
7078 Default::default(),
7079 output,
7080 &mut *fallback,
7081 );
7082 }
7083 if matches!(
7084 reader.resolve_local_name(x.name(), &super::NS_XS),
7085 Some(b"assert")
7086 ) {
7087 let output =
7088 <super::AssertionType as WithDeserializer>::Deserializer::init(reader, event)?;
7089 return self.handle_assert(reader, Default::default(), output, &mut *fallback);
7090 }
7091 *self = Self::Init__;
7092 Ok(ElementHandlerOutput::return_to_parent(event, false))
7093 }
7094 fn store_annotation(
7095 values: &mut Option<super::Annotation>,
7096 value: super::Annotation,
7097 ) -> Result<(), Error> {
7098 if values.is_some() {
7099 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7100 b"annotation",
7101 )))?;
7102 }
7103 *values = Some(value);
7104 Ok(())
7105 }
7106 fn store_simple_content(
7107 values: &mut Option<super::SimpleContent>,
7108 value: super::SimpleContent,
7109 ) -> Result<(), Error> {
7110 if values.is_some() {
7111 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7112 b"simpleContent",
7113 )))?;
7114 }
7115 *values = Some(value);
7116 Ok(())
7117 }
7118 fn store_complex_content(
7119 values: &mut Option<super::ComplexContent>,
7120 value: super::ComplexContent,
7121 ) -> Result<(), Error> {
7122 if values.is_some() {
7123 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7124 b"complexContent",
7125 )))?;
7126 }
7127 *values = Some(value);
7128 Ok(())
7129 }
7130 fn store_open_content(
7131 values: &mut Option<super::OpenContent>,
7132 value: super::OpenContent,
7133 ) -> Result<(), Error> {
7134 if values.is_some() {
7135 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7136 b"openContent",
7137 )))?;
7138 }
7139 *values = Some(value);
7140 Ok(())
7141 }
7142 fn store_group(
7143 values: &mut Option<super::GroupType>,
7144 value: super::GroupType,
7145 ) -> Result<(), Error> {
7146 if values.is_some() {
7147 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7148 b"group",
7149 )))?;
7150 }
7151 *values = Some(value);
7152 Ok(())
7153 }
7154 fn store_all(
7155 values: &mut Option<super::GroupType>,
7156 value: super::GroupType,
7157 ) -> Result<(), Error> {
7158 if values.is_some() {
7159 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"all")))?;
7160 }
7161 *values = Some(value);
7162 Ok(())
7163 }
7164 fn store_choice(
7165 values: &mut Option<super::GroupType>,
7166 value: super::GroupType,
7167 ) -> Result<(), Error> {
7168 if values.is_some() {
7169 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7170 b"choice",
7171 )))?;
7172 }
7173 *values = Some(value);
7174 Ok(())
7175 }
7176 fn store_sequence(
7177 values: &mut Option<super::GroupType>,
7178 value: super::GroupType,
7179 ) -> Result<(), Error> {
7180 if values.is_some() {
7181 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7182 b"sequence",
7183 )))?;
7184 }
7185 *values = Some(value);
7186 Ok(())
7187 }
7188 fn store_attribute(
7189 values: &mut Option<super::AttributeType>,
7190 value: super::AttributeType,
7191 ) -> Result<(), Error> {
7192 if values.is_some() {
7193 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7194 b"attribute",
7195 )))?;
7196 }
7197 *values = Some(value);
7198 Ok(())
7199 }
7200 fn store_attribute_group(
7201 values: &mut Option<super::AttributeGroupType>,
7202 value: super::AttributeGroupType,
7203 ) -> Result<(), Error> {
7204 if values.is_some() {
7205 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7206 b"attributeGroup",
7207 )))?;
7208 }
7209 *values = Some(value);
7210 Ok(())
7211 }
7212 fn store_any_attribute(
7213 values: &mut Option<super::AnyAttribute>,
7214 value: super::AnyAttribute,
7215 ) -> Result<(), Error> {
7216 if values.is_some() {
7217 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7218 b"anyAttribute",
7219 )))?;
7220 }
7221 *values = Some(value);
7222 Ok(())
7223 }
7224 fn store_assert(
7225 values: &mut Option<super::AssertionType>,
7226 value: super::AssertionType,
7227 ) -> Result<(), Error> {
7228 if values.is_some() {
7229 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
7230 b"assert",
7231 )))?;
7232 }
7233 *values = Some(value);
7234 Ok(())
7235 }
7236 fn handle_annotation<'de, R>(
7237 &mut self,
7238 reader: &R,
7239 mut values: Option<super::Annotation>,
7240 output: DeserializerOutput<'de, super::Annotation>,
7241 fallback: &mut Option<Self>,
7242 ) -> Result<ElementHandlerOutput<'de>, Error>
7243 where
7244 R: DeserializeReader,
7245 {
7246 let DeserializerOutput {
7247 artifact,
7248 event,
7249 allow_any,
7250 } = output;
7251 if artifact.is_none() {
7252 *self = match fallback.take() {
7253 None => Self::Init__,
7254 Some(Self::Annotation(_, Some(deserializer))) => {
7255 Self::Annotation(values, Some(deserializer))
7256 }
7257 _ => unreachable!(),
7258 };
7259 return Ok(ElementHandlerOutput::break_(event, allow_any));
7260 }
7261 match fallback.take() {
7262 None => (),
7263 Some(Self::Annotation(_, Some(deserializer))) => {
7264 let data = deserializer.finish(reader)?;
7265 Self::store_annotation(&mut values, data)?;
7266 }
7267 Some(_) => unreachable!(),
7268 }
7269 Ok(match artifact {
7270 DeserializerArtifact::None => unreachable!(),
7271 DeserializerArtifact::Data(data) => {
7272 Self::store_annotation(&mut values, data)?;
7273 let data = Self::Annotation(values, None).finish(reader)?;
7274 *self = Self::Done__(data);
7275 ElementHandlerOutput::Break { event, allow_any }
7276 }
7277 DeserializerArtifact::Deserializer(deserializer) => {
7278 *self = Self::Annotation(values, Some(deserializer));
7279 ElementHandlerOutput::from_event_end(event, allow_any)
7280 }
7281 })
7282 }
7283 fn handle_simple_content<'de, R>(
7284 &mut self,
7285 reader: &R,
7286 mut values: Option<super::SimpleContent>,
7287 output: DeserializerOutput<'de, super::SimpleContent>,
7288 fallback: &mut Option<Self>,
7289 ) -> Result<ElementHandlerOutput<'de>, Error>
7290 where
7291 R: DeserializeReader,
7292 {
7293 let DeserializerOutput {
7294 artifact,
7295 event,
7296 allow_any,
7297 } = output;
7298 if artifact.is_none() {
7299 *self = match fallback.take() {
7300 None => Self::Init__,
7301 Some(Self::SimpleContent(_, Some(deserializer))) => {
7302 Self::SimpleContent(values, Some(deserializer))
7303 }
7304 _ => unreachable!(),
7305 };
7306 return Ok(ElementHandlerOutput::break_(event, allow_any));
7307 }
7308 match fallback.take() {
7309 None => (),
7310 Some(Self::SimpleContent(_, Some(deserializer))) => {
7311 let data = deserializer.finish(reader)?;
7312 Self::store_simple_content(&mut values, data)?;
7313 }
7314 Some(_) => unreachable!(),
7315 }
7316 Ok(match artifact {
7317 DeserializerArtifact::None => unreachable!(),
7318 DeserializerArtifact::Data(data) => {
7319 Self::store_simple_content(&mut values, data)?;
7320 let data = Self::SimpleContent(values, None).finish(reader)?;
7321 *self = Self::Done__(data);
7322 ElementHandlerOutput::Break { event, allow_any }
7323 }
7324 DeserializerArtifact::Deserializer(deserializer) => {
7325 *self = Self::SimpleContent(values, Some(deserializer));
7326 ElementHandlerOutput::from_event_end(event, allow_any)
7327 }
7328 })
7329 }
7330 fn handle_complex_content<'de, R>(
7331 &mut self,
7332 reader: &R,
7333 mut values: Option<super::ComplexContent>,
7334 output: DeserializerOutput<'de, super::ComplexContent>,
7335 fallback: &mut Option<Self>,
7336 ) -> Result<ElementHandlerOutput<'de>, Error>
7337 where
7338 R: DeserializeReader,
7339 {
7340 let DeserializerOutput {
7341 artifact,
7342 event,
7343 allow_any,
7344 } = output;
7345 if artifact.is_none() {
7346 *self = match fallback.take() {
7347 None => Self::Init__,
7348 Some(Self::ComplexContent(_, Some(deserializer))) => {
7349 Self::ComplexContent(values, Some(deserializer))
7350 }
7351 _ => unreachable!(),
7352 };
7353 return Ok(ElementHandlerOutput::break_(event, allow_any));
7354 }
7355 match fallback.take() {
7356 None => (),
7357 Some(Self::ComplexContent(_, Some(deserializer))) => {
7358 let data = deserializer.finish(reader)?;
7359 Self::store_complex_content(&mut values, data)?;
7360 }
7361 Some(_) => unreachable!(),
7362 }
7363 Ok(match artifact {
7364 DeserializerArtifact::None => unreachable!(),
7365 DeserializerArtifact::Data(data) => {
7366 Self::store_complex_content(&mut values, data)?;
7367 let data = Self::ComplexContent(values, None).finish(reader)?;
7368 *self = Self::Done__(data);
7369 ElementHandlerOutput::Break { event, allow_any }
7370 }
7371 DeserializerArtifact::Deserializer(deserializer) => {
7372 *self = Self::ComplexContent(values, Some(deserializer));
7373 ElementHandlerOutput::from_event_end(event, allow_any)
7374 }
7375 })
7376 }
7377 fn handle_open_content<'de, R>(
7378 &mut self,
7379 reader: &R,
7380 mut values: Option<super::OpenContent>,
7381 output: DeserializerOutput<'de, super::OpenContent>,
7382 fallback: &mut Option<Self>,
7383 ) -> Result<ElementHandlerOutput<'de>, Error>
7384 where
7385 R: DeserializeReader,
7386 {
7387 let DeserializerOutput {
7388 artifact,
7389 event,
7390 allow_any,
7391 } = output;
7392 if artifact.is_none() {
7393 *self = match fallback.take() {
7394 None => Self::Init__,
7395 Some(Self::OpenContent(_, Some(deserializer))) => {
7396 Self::OpenContent(values, Some(deserializer))
7397 }
7398 _ => unreachable!(),
7399 };
7400 return Ok(ElementHandlerOutput::break_(event, allow_any));
7401 }
7402 match fallback.take() {
7403 None => (),
7404 Some(Self::OpenContent(_, Some(deserializer))) => {
7405 let data = deserializer.finish(reader)?;
7406 Self::store_open_content(&mut values, data)?;
7407 }
7408 Some(_) => unreachable!(),
7409 }
7410 Ok(match artifact {
7411 DeserializerArtifact::None => unreachable!(),
7412 DeserializerArtifact::Data(data) => {
7413 Self::store_open_content(&mut values, data)?;
7414 let data = Self::OpenContent(values, None).finish(reader)?;
7415 *self = Self::Done__(data);
7416 ElementHandlerOutput::Break { event, allow_any }
7417 }
7418 DeserializerArtifact::Deserializer(deserializer) => {
7419 *self = Self::OpenContent(values, Some(deserializer));
7420 ElementHandlerOutput::from_event_end(event, allow_any)
7421 }
7422 })
7423 }
7424 fn handle_group<'de, R>(
7425 &mut self,
7426 reader: &R,
7427 mut values: Option<super::GroupType>,
7428 output: DeserializerOutput<'de, super::GroupType>,
7429 fallback: &mut Option<Self>,
7430 ) -> Result<ElementHandlerOutput<'de>, Error>
7431 where
7432 R: DeserializeReader,
7433 {
7434 let DeserializerOutput {
7435 artifact,
7436 event,
7437 allow_any,
7438 } = output;
7439 if artifact.is_none() {
7440 *self = match fallback.take() {
7441 None => Self::Init__,
7442 Some(Self::Group(_, Some(deserializer))) => {
7443 Self::Group(values, Some(deserializer))
7444 }
7445 _ => unreachable!(),
7446 };
7447 return Ok(ElementHandlerOutput::break_(event, allow_any));
7448 }
7449 match fallback.take() {
7450 None => (),
7451 Some(Self::Group(_, Some(deserializer))) => {
7452 let data = deserializer.finish(reader)?;
7453 Self::store_group(&mut values, data)?;
7454 }
7455 Some(_) => unreachable!(),
7456 }
7457 Ok(match artifact {
7458 DeserializerArtifact::None => unreachable!(),
7459 DeserializerArtifact::Data(data) => {
7460 Self::store_group(&mut values, data)?;
7461 let data = Self::Group(values, None).finish(reader)?;
7462 *self = Self::Done__(data);
7463 ElementHandlerOutput::Break { event, allow_any }
7464 }
7465 DeserializerArtifact::Deserializer(deserializer) => {
7466 *self = Self::Group(values, Some(deserializer));
7467 ElementHandlerOutput::from_event_end(event, allow_any)
7468 }
7469 })
7470 }
7471 fn handle_all<'de, R>(
7472 &mut self,
7473 reader: &R,
7474 mut values: Option<super::GroupType>,
7475 output: DeserializerOutput<'de, super::GroupType>,
7476 fallback: &mut Option<Self>,
7477 ) -> Result<ElementHandlerOutput<'de>, Error>
7478 where
7479 R: DeserializeReader,
7480 {
7481 let DeserializerOutput {
7482 artifact,
7483 event,
7484 allow_any,
7485 } = output;
7486 if artifact.is_none() {
7487 *self = match fallback.take() {
7488 None => Self::Init__,
7489 Some(Self::All(_, Some(deserializer))) => Self::All(values, Some(deserializer)),
7490 _ => unreachable!(),
7491 };
7492 return Ok(ElementHandlerOutput::break_(event, allow_any));
7493 }
7494 match fallback.take() {
7495 None => (),
7496 Some(Self::All(_, Some(deserializer))) => {
7497 let data = deserializer.finish(reader)?;
7498 Self::store_all(&mut values, data)?;
7499 }
7500 Some(_) => unreachable!(),
7501 }
7502 Ok(match artifact {
7503 DeserializerArtifact::None => unreachable!(),
7504 DeserializerArtifact::Data(data) => {
7505 Self::store_all(&mut values, data)?;
7506 let data = Self::All(values, None).finish(reader)?;
7507 *self = Self::Done__(data);
7508 ElementHandlerOutput::Break { event, allow_any }
7509 }
7510 DeserializerArtifact::Deserializer(deserializer) => {
7511 *self = Self::All(values, Some(deserializer));
7512 ElementHandlerOutput::from_event_end(event, allow_any)
7513 }
7514 })
7515 }
7516 fn handle_choice<'de, R>(
7517 &mut self,
7518 reader: &R,
7519 mut values: Option<super::GroupType>,
7520 output: DeserializerOutput<'de, super::GroupType>,
7521 fallback: &mut Option<Self>,
7522 ) -> Result<ElementHandlerOutput<'de>, Error>
7523 where
7524 R: DeserializeReader,
7525 {
7526 let DeserializerOutput {
7527 artifact,
7528 event,
7529 allow_any,
7530 } = output;
7531 if artifact.is_none() {
7532 *self = match fallback.take() {
7533 None => Self::Init__,
7534 Some(Self::Choice(_, Some(deserializer))) => {
7535 Self::Choice(values, Some(deserializer))
7536 }
7537 _ => unreachable!(),
7538 };
7539 return Ok(ElementHandlerOutput::break_(event, allow_any));
7540 }
7541 match fallback.take() {
7542 None => (),
7543 Some(Self::Choice(_, Some(deserializer))) => {
7544 let data = deserializer.finish(reader)?;
7545 Self::store_choice(&mut values, data)?;
7546 }
7547 Some(_) => unreachable!(),
7548 }
7549 Ok(match artifact {
7550 DeserializerArtifact::None => unreachable!(),
7551 DeserializerArtifact::Data(data) => {
7552 Self::store_choice(&mut values, data)?;
7553 let data = Self::Choice(values, None).finish(reader)?;
7554 *self = Self::Done__(data);
7555 ElementHandlerOutput::Break { event, allow_any }
7556 }
7557 DeserializerArtifact::Deserializer(deserializer) => {
7558 *self = Self::Choice(values, Some(deserializer));
7559 ElementHandlerOutput::from_event_end(event, allow_any)
7560 }
7561 })
7562 }
7563 fn handle_sequence<'de, R>(
7564 &mut self,
7565 reader: &R,
7566 mut values: Option<super::GroupType>,
7567 output: DeserializerOutput<'de, super::GroupType>,
7568 fallback: &mut Option<Self>,
7569 ) -> Result<ElementHandlerOutput<'de>, Error>
7570 where
7571 R: DeserializeReader,
7572 {
7573 let DeserializerOutput {
7574 artifact,
7575 event,
7576 allow_any,
7577 } = output;
7578 if artifact.is_none() {
7579 *self = match fallback.take() {
7580 None => Self::Init__,
7581 Some(Self::Sequence(_, Some(deserializer))) => {
7582 Self::Sequence(values, Some(deserializer))
7583 }
7584 _ => unreachable!(),
7585 };
7586 return Ok(ElementHandlerOutput::break_(event, allow_any));
7587 }
7588 match fallback.take() {
7589 None => (),
7590 Some(Self::Sequence(_, Some(deserializer))) => {
7591 let data = deserializer.finish(reader)?;
7592 Self::store_sequence(&mut values, data)?;
7593 }
7594 Some(_) => unreachable!(),
7595 }
7596 Ok(match artifact {
7597 DeserializerArtifact::None => unreachable!(),
7598 DeserializerArtifact::Data(data) => {
7599 Self::store_sequence(&mut values, data)?;
7600 let data = Self::Sequence(values, None).finish(reader)?;
7601 *self = Self::Done__(data);
7602 ElementHandlerOutput::Break { event, allow_any }
7603 }
7604 DeserializerArtifact::Deserializer(deserializer) => {
7605 *self = Self::Sequence(values, Some(deserializer));
7606 ElementHandlerOutput::from_event_end(event, allow_any)
7607 }
7608 })
7609 }
7610 fn handle_attribute<'de, R>(
7611 &mut self,
7612 reader: &R,
7613 mut values: Option<super::AttributeType>,
7614 output: DeserializerOutput<'de, super::AttributeType>,
7615 fallback: &mut Option<Self>,
7616 ) -> Result<ElementHandlerOutput<'de>, Error>
7617 where
7618 R: DeserializeReader,
7619 {
7620 let DeserializerOutput {
7621 artifact,
7622 event,
7623 allow_any,
7624 } = output;
7625 if artifact.is_none() {
7626 *self = match fallback.take() {
7627 None => Self::Init__,
7628 Some(Self::Attribute(_, Some(deserializer))) => {
7629 Self::Attribute(values, Some(deserializer))
7630 }
7631 _ => unreachable!(),
7632 };
7633 return Ok(ElementHandlerOutput::break_(event, allow_any));
7634 }
7635 match fallback.take() {
7636 None => (),
7637 Some(Self::Attribute(_, Some(deserializer))) => {
7638 let data = deserializer.finish(reader)?;
7639 Self::store_attribute(&mut values, data)?;
7640 }
7641 Some(_) => unreachable!(),
7642 }
7643 Ok(match artifact {
7644 DeserializerArtifact::None => unreachable!(),
7645 DeserializerArtifact::Data(data) => {
7646 Self::store_attribute(&mut values, data)?;
7647 let data = Self::Attribute(values, None).finish(reader)?;
7648 *self = Self::Done__(data);
7649 ElementHandlerOutput::Break { event, allow_any }
7650 }
7651 DeserializerArtifact::Deserializer(deserializer) => {
7652 *self = Self::Attribute(values, Some(deserializer));
7653 ElementHandlerOutput::from_event_end(event, allow_any)
7654 }
7655 })
7656 }
7657 fn handle_attribute_group<'de, R>(
7658 &mut self,
7659 reader: &R,
7660 mut values: Option<super::AttributeGroupType>,
7661 output: DeserializerOutput<'de, super::AttributeGroupType>,
7662 fallback: &mut Option<Self>,
7663 ) -> Result<ElementHandlerOutput<'de>, Error>
7664 where
7665 R: DeserializeReader,
7666 {
7667 let DeserializerOutput {
7668 artifact,
7669 event,
7670 allow_any,
7671 } = output;
7672 if artifact.is_none() {
7673 *self = match fallback.take() {
7674 None => Self::Init__,
7675 Some(Self::AttributeGroup(_, Some(deserializer))) => {
7676 Self::AttributeGroup(values, Some(deserializer))
7677 }
7678 _ => unreachable!(),
7679 };
7680 return Ok(ElementHandlerOutput::break_(event, allow_any));
7681 }
7682 match fallback.take() {
7683 None => (),
7684 Some(Self::AttributeGroup(_, Some(deserializer))) => {
7685 let data = deserializer.finish(reader)?;
7686 Self::store_attribute_group(&mut values, data)?;
7687 }
7688 Some(_) => unreachable!(),
7689 }
7690 Ok(match artifact {
7691 DeserializerArtifact::None => unreachable!(),
7692 DeserializerArtifact::Data(data) => {
7693 Self::store_attribute_group(&mut values, data)?;
7694 let data = Self::AttributeGroup(values, None).finish(reader)?;
7695 *self = Self::Done__(data);
7696 ElementHandlerOutput::Break { event, allow_any }
7697 }
7698 DeserializerArtifact::Deserializer(deserializer) => {
7699 *self = Self::AttributeGroup(values, Some(deserializer));
7700 ElementHandlerOutput::from_event_end(event, allow_any)
7701 }
7702 })
7703 }
7704 fn handle_any_attribute<'de, R>(
7705 &mut self,
7706 reader: &R,
7707 mut values: Option<super::AnyAttribute>,
7708 output: DeserializerOutput<'de, super::AnyAttribute>,
7709 fallback: &mut Option<Self>,
7710 ) -> Result<ElementHandlerOutput<'de>, Error>
7711 where
7712 R: DeserializeReader,
7713 {
7714 let DeserializerOutput {
7715 artifact,
7716 event,
7717 allow_any,
7718 } = output;
7719 if artifact.is_none() {
7720 *self = match fallback.take() {
7721 None => Self::Init__,
7722 Some(Self::AnyAttribute(_, Some(deserializer))) => {
7723 Self::AnyAttribute(values, Some(deserializer))
7724 }
7725 _ => unreachable!(),
7726 };
7727 return Ok(ElementHandlerOutput::break_(event, allow_any));
7728 }
7729 match fallback.take() {
7730 None => (),
7731 Some(Self::AnyAttribute(_, Some(deserializer))) => {
7732 let data = deserializer.finish(reader)?;
7733 Self::store_any_attribute(&mut values, data)?;
7734 }
7735 Some(_) => unreachable!(),
7736 }
7737 Ok(match artifact {
7738 DeserializerArtifact::None => unreachable!(),
7739 DeserializerArtifact::Data(data) => {
7740 Self::store_any_attribute(&mut values, data)?;
7741 let data = Self::AnyAttribute(values, None).finish(reader)?;
7742 *self = Self::Done__(data);
7743 ElementHandlerOutput::Break { event, allow_any }
7744 }
7745 DeserializerArtifact::Deserializer(deserializer) => {
7746 *self = Self::AnyAttribute(values, Some(deserializer));
7747 ElementHandlerOutput::from_event_end(event, allow_any)
7748 }
7749 })
7750 }
7751 fn handle_assert<'de, R>(
7752 &mut self,
7753 reader: &R,
7754 mut values: Option<super::AssertionType>,
7755 output: DeserializerOutput<'de, super::AssertionType>,
7756 fallback: &mut Option<Self>,
7757 ) -> Result<ElementHandlerOutput<'de>, Error>
7758 where
7759 R: DeserializeReader,
7760 {
7761 let DeserializerOutput {
7762 artifact,
7763 event,
7764 allow_any,
7765 } = output;
7766 if artifact.is_none() {
7767 *self = match fallback.take() {
7768 None => Self::Init__,
7769 Some(Self::Assert(_, Some(deserializer))) => {
7770 Self::Assert(values, Some(deserializer))
7771 }
7772 _ => unreachable!(),
7773 };
7774 return Ok(ElementHandlerOutput::break_(event, allow_any));
7775 }
7776 match fallback.take() {
7777 None => (),
7778 Some(Self::Assert(_, Some(deserializer))) => {
7779 let data = deserializer.finish(reader)?;
7780 Self::store_assert(&mut values, data)?;
7781 }
7782 Some(_) => unreachable!(),
7783 }
7784 Ok(match artifact {
7785 DeserializerArtifact::None => unreachable!(),
7786 DeserializerArtifact::Data(data) => {
7787 Self::store_assert(&mut values, data)?;
7788 let data = Self::Assert(values, None).finish(reader)?;
7789 *self = Self::Done__(data);
7790 ElementHandlerOutput::Break { event, allow_any }
7791 }
7792 DeserializerArtifact::Deserializer(deserializer) => {
7793 *self = Self::Assert(values, Some(deserializer));
7794 ElementHandlerOutput::from_event_end(event, allow_any)
7795 }
7796 })
7797 }
7798 }
7799 impl<'de> Deserializer<'de, super::ComplexBaseTypeContent> for ComplexBaseTypeContentDeserializer {
7800 fn init<R>(
7801 reader: &R,
7802 event: Event<'de>,
7803 ) -> DeserializerResult<'de, super::ComplexBaseTypeContent>
7804 where
7805 R: DeserializeReader,
7806 {
7807 let deserializer = Self::Init__;
7808 let mut output = deserializer.next(reader, event)?;
7809 output.artifact = match output.artifact {
7810 DeserializerArtifact::Deserializer(Self::Init__) => DeserializerArtifact::None,
7811 artifact => artifact,
7812 };
7813 Ok(output)
7814 }
7815 fn next<R>(
7816 mut self,
7817 reader: &R,
7818 event: Event<'de>,
7819 ) -> DeserializerResult<'de, super::ComplexBaseTypeContent>
7820 where
7821 R: DeserializeReader,
7822 {
7823 let mut event = event;
7824 let mut fallback = None;
7825 let (event, allow_any) = loop {
7826 let state = replace(&mut self, Self::Unknown__);
7827 event = match (state, event) {
7828 (Self::Annotation(values, Some(deserializer)), event) => {
7829 let output = deserializer.next(reader, event)?;
7830 match self.handle_annotation(reader, values, output, &mut fallback)? {
7831 ElementHandlerOutput::Break { event, allow_any } => {
7832 break (event, allow_any)
7833 }
7834 ElementHandlerOutput::Continue { event, .. } => event,
7835 }
7836 }
7837 (Self::SimpleContent(values, Some(deserializer)), event) => {
7838 let output = deserializer.next(reader, event)?;
7839 match self.handle_simple_content(reader, values, output, &mut fallback)? {
7840 ElementHandlerOutput::Break { event, allow_any } => {
7841 break (event, allow_any)
7842 }
7843 ElementHandlerOutput::Continue { event, .. } => event,
7844 }
7845 }
7846 (Self::ComplexContent(values, Some(deserializer)), event) => {
7847 let output = deserializer.next(reader, event)?;
7848 match self.handle_complex_content(reader, values, output, &mut fallback)? {
7849 ElementHandlerOutput::Break { event, allow_any } => {
7850 break (event, allow_any)
7851 }
7852 ElementHandlerOutput::Continue { event, .. } => event,
7853 }
7854 }
7855 (Self::OpenContent(values, Some(deserializer)), event) => {
7856 let output = deserializer.next(reader, event)?;
7857 match self.handle_open_content(reader, values, output, &mut fallback)? {
7858 ElementHandlerOutput::Break { event, allow_any } => {
7859 break (event, allow_any)
7860 }
7861 ElementHandlerOutput::Continue { event, .. } => event,
7862 }
7863 }
7864 (Self::Group(values, Some(deserializer)), event) => {
7865 let output = deserializer.next(reader, event)?;
7866 match self.handle_group(reader, values, output, &mut fallback)? {
7867 ElementHandlerOutput::Break { event, allow_any } => {
7868 break (event, allow_any)
7869 }
7870 ElementHandlerOutput::Continue { event, .. } => event,
7871 }
7872 }
7873 (Self::All(values, Some(deserializer)), event) => {
7874 let output = deserializer.next(reader, event)?;
7875 match self.handle_all(reader, values, output, &mut fallback)? {
7876 ElementHandlerOutput::Break { event, allow_any } => {
7877 break (event, allow_any)
7878 }
7879 ElementHandlerOutput::Continue { event, .. } => event,
7880 }
7881 }
7882 (Self::Choice(values, Some(deserializer)), event) => {
7883 let output = deserializer.next(reader, event)?;
7884 match self.handle_choice(reader, values, output, &mut fallback)? {
7885 ElementHandlerOutput::Break { event, allow_any } => {
7886 break (event, allow_any)
7887 }
7888 ElementHandlerOutput::Continue { event, .. } => event,
7889 }
7890 }
7891 (Self::Sequence(values, Some(deserializer)), event) => {
7892 let output = deserializer.next(reader, event)?;
7893 match self.handle_sequence(reader, values, output, &mut fallback)? {
7894 ElementHandlerOutput::Break { event, allow_any } => {
7895 break (event, allow_any)
7896 }
7897 ElementHandlerOutput::Continue { event, .. } => event,
7898 }
7899 }
7900 (Self::Attribute(values, Some(deserializer)), event) => {
7901 let output = deserializer.next(reader, event)?;
7902 match self.handle_attribute(reader, values, output, &mut fallback)? {
7903 ElementHandlerOutput::Break { event, allow_any } => {
7904 break (event, allow_any)
7905 }
7906 ElementHandlerOutput::Continue { event, .. } => event,
7907 }
7908 }
7909 (Self::AttributeGroup(values, Some(deserializer)), event) => {
7910 let output = deserializer.next(reader, event)?;
7911 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
7912 ElementHandlerOutput::Break { event, allow_any } => {
7913 break (event, allow_any)
7914 }
7915 ElementHandlerOutput::Continue { event, .. } => event,
7916 }
7917 }
7918 (Self::AnyAttribute(values, Some(deserializer)), event) => {
7919 let output = deserializer.next(reader, event)?;
7920 match self.handle_any_attribute(reader, values, output, &mut fallback)? {
7921 ElementHandlerOutput::Break { event, allow_any } => {
7922 break (event, allow_any)
7923 }
7924 ElementHandlerOutput::Continue { event, .. } => event,
7925 }
7926 }
7927 (Self::Assert(values, Some(deserializer)), event) => {
7928 let output = deserializer.next(reader, event)?;
7929 match self.handle_assert(reader, values, output, &mut fallback)? {
7930 ElementHandlerOutput::Break { event, allow_any } => {
7931 break (event, allow_any)
7932 }
7933 ElementHandlerOutput::Continue { event, .. } => event,
7934 }
7935 }
7936 (state, event @ Event::End(_)) => {
7937 return Ok(DeserializerOutput {
7938 artifact: DeserializerArtifact::Data(state.finish(reader)?),
7939 event: DeserializerEvent::Continue(event),
7940 allow_any: false,
7941 });
7942 }
7943 (Self::Init__, event) => {
7944 match self.find_suitable(reader, event, &mut fallback)? {
7945 ElementHandlerOutput::Break { event, allow_any } => {
7946 break (event, allow_any)
7947 }
7948 ElementHandlerOutput::Continue { event, .. } => event,
7949 }
7950 }
7951 (Self::Annotation(values, None), event) => {
7952 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
7953 reader, event,
7954 )?;
7955 match self.handle_annotation(reader, values, output, &mut fallback)? {
7956 ElementHandlerOutput::Break { event, allow_any } => {
7957 break (event, allow_any)
7958 }
7959 ElementHandlerOutput::Continue { event, .. } => event,
7960 }
7961 }
7962 (Self::SimpleContent(values, None), event) => {
7963 let output =
7964 <super::SimpleContent as WithDeserializer>::Deserializer::init(
7965 reader, event,
7966 )?;
7967 match self.handle_simple_content(reader, values, output, &mut fallback)? {
7968 ElementHandlerOutput::Break { event, allow_any } => {
7969 break (event, allow_any)
7970 }
7971 ElementHandlerOutput::Continue { event, .. } => event,
7972 }
7973 }
7974 (Self::ComplexContent(values, None), event) => {
7975 let output =
7976 <super::ComplexContent as WithDeserializer>::Deserializer::init(
7977 reader, event,
7978 )?;
7979 match self.handle_complex_content(reader, values, output, &mut fallback)? {
7980 ElementHandlerOutput::Break { event, allow_any } => {
7981 break (event, allow_any)
7982 }
7983 ElementHandlerOutput::Continue { event, .. } => event,
7984 }
7985 }
7986 (Self::OpenContent(values, None), event) => {
7987 let output = <super::OpenContent as WithDeserializer>::Deserializer::init(
7988 reader, event,
7989 )?;
7990 match self.handle_open_content(reader, values, output, &mut fallback)? {
7991 ElementHandlerOutput::Break { event, allow_any } => {
7992 break (event, allow_any)
7993 }
7994 ElementHandlerOutput::Continue { event, .. } => event,
7995 }
7996 }
7997 (Self::Group(values, None), event) => {
7998 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
7999 reader, event,
8000 )?;
8001 match self.handle_group(reader, values, output, &mut fallback)? {
8002 ElementHandlerOutput::Break { event, allow_any } => {
8003 break (event, allow_any)
8004 }
8005 ElementHandlerOutput::Continue { event, .. } => event,
8006 }
8007 }
8008 (Self::All(values, None), event) => {
8009 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
8010 reader, event,
8011 )?;
8012 match self.handle_all(reader, values, output, &mut fallback)? {
8013 ElementHandlerOutput::Break { event, allow_any } => {
8014 break (event, allow_any)
8015 }
8016 ElementHandlerOutput::Continue { event, .. } => event,
8017 }
8018 }
8019 (Self::Choice(values, None), event) => {
8020 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
8021 reader, event,
8022 )?;
8023 match self.handle_choice(reader, values, output, &mut fallback)? {
8024 ElementHandlerOutput::Break { event, allow_any } => {
8025 break (event, allow_any)
8026 }
8027 ElementHandlerOutput::Continue { event, .. } => event,
8028 }
8029 }
8030 (Self::Sequence(values, None), event) => {
8031 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
8032 reader, event,
8033 )?;
8034 match self.handle_sequence(reader, values, output, &mut fallback)? {
8035 ElementHandlerOutput::Break { event, allow_any } => {
8036 break (event, allow_any)
8037 }
8038 ElementHandlerOutput::Continue { event, .. } => event,
8039 }
8040 }
8041 (Self::Attribute(values, None), event) => {
8042 let output =
8043 <super::AttributeType as WithDeserializer>::Deserializer::init(
8044 reader, event,
8045 )?;
8046 match self.handle_attribute(reader, values, output, &mut fallback)? {
8047 ElementHandlerOutput::Break { event, allow_any } => {
8048 break (event, allow_any)
8049 }
8050 ElementHandlerOutput::Continue { event, .. } => event,
8051 }
8052 }
8053 (Self::AttributeGroup(values, None), event) => {
8054 let output =
8055 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
8056 reader, event,
8057 )?;
8058 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
8059 ElementHandlerOutput::Break { event, allow_any } => {
8060 break (event, allow_any)
8061 }
8062 ElementHandlerOutput::Continue { event, .. } => event,
8063 }
8064 }
8065 (Self::AnyAttribute(values, None), event) => {
8066 let output = <super::AnyAttribute as WithDeserializer>::Deserializer::init(
8067 reader, event,
8068 )?;
8069 match self.handle_any_attribute(reader, values, output, &mut fallback)? {
8070 ElementHandlerOutput::Break { event, allow_any } => {
8071 break (event, allow_any)
8072 }
8073 ElementHandlerOutput::Continue { event, .. } => event,
8074 }
8075 }
8076 (Self::Assert(values, None), event) => {
8077 let output =
8078 <super::AssertionType as WithDeserializer>::Deserializer::init(
8079 reader, event,
8080 )?;
8081 match self.handle_assert(reader, values, output, &mut fallback)? {
8082 ElementHandlerOutput::Break { event, allow_any } => {
8083 break (event, allow_any)
8084 }
8085 ElementHandlerOutput::Continue { event, .. } => event,
8086 }
8087 }
8088 (s @ Self::Done__(_), event) => {
8089 self = s;
8090 break (DeserializerEvent::Continue(event), false);
8091 }
8092 (Self::Unknown__, _) => unreachable!(),
8093 }
8094 };
8095 let artifact = match self {
8096 Self::Done__(data) => DeserializerArtifact::Data(data),
8097 deserializer => DeserializerArtifact::Deserializer(deserializer),
8098 };
8099 Ok(DeserializerOutput {
8100 artifact,
8101 event,
8102 allow_any,
8103 })
8104 }
8105 fn finish<R>(self, reader: &R) -> Result<super::ComplexBaseTypeContent, Error>
8106 where
8107 R: DeserializeReader,
8108 {
8109 match self {
8110 Self::Init__ => Err(ErrorKind::MissingContent.into()),
8111 Self::Annotation(mut values, deserializer) => {
8112 if let Some(deserializer) = deserializer {
8113 let value = deserializer.finish(reader)?;
8114 Self::store_annotation(&mut values, value)?;
8115 }
8116 Ok(super::ComplexBaseTypeContent::Annotation(
8117 values.ok_or_else(|| ErrorKind::MissingElement("annotation".into()))?,
8118 ))
8119 }
8120 Self::SimpleContent(mut values, deserializer) => {
8121 if let Some(deserializer) = deserializer {
8122 let value = deserializer.finish(reader)?;
8123 Self::store_simple_content(&mut values, value)?;
8124 }
8125 Ok(super::ComplexBaseTypeContent::SimpleContent(
8126 values.ok_or_else(|| ErrorKind::MissingElement("simpleContent".into()))?,
8127 ))
8128 }
8129 Self::ComplexContent(mut values, deserializer) => {
8130 if let Some(deserializer) = deserializer {
8131 let value = deserializer.finish(reader)?;
8132 Self::store_complex_content(&mut values, value)?;
8133 }
8134 Ok(super::ComplexBaseTypeContent::ComplexContent(
8135 values.ok_or_else(|| ErrorKind::MissingElement("complexContent".into()))?,
8136 ))
8137 }
8138 Self::OpenContent(mut values, deserializer) => {
8139 if let Some(deserializer) = deserializer {
8140 let value = deserializer.finish(reader)?;
8141 Self::store_open_content(&mut values, value)?;
8142 }
8143 Ok(super::ComplexBaseTypeContent::OpenContent(
8144 values.ok_or_else(|| ErrorKind::MissingElement("openContent".into()))?,
8145 ))
8146 }
8147 Self::Group(mut values, deserializer) => {
8148 if let Some(deserializer) = deserializer {
8149 let value = deserializer.finish(reader)?;
8150 Self::store_group(&mut values, value)?;
8151 }
8152 Ok(super::ComplexBaseTypeContent::Group(values.ok_or_else(
8153 || ErrorKind::MissingElement("group".into()),
8154 )?))
8155 }
8156 Self::All(mut values, deserializer) => {
8157 if let Some(deserializer) = deserializer {
8158 let value = deserializer.finish(reader)?;
8159 Self::store_all(&mut values, value)?;
8160 }
8161 Ok(super::ComplexBaseTypeContent::All(
8162 values.ok_or_else(|| ErrorKind::MissingElement("all".into()))?,
8163 ))
8164 }
8165 Self::Choice(mut values, deserializer) => {
8166 if let Some(deserializer) = deserializer {
8167 let value = deserializer.finish(reader)?;
8168 Self::store_choice(&mut values, value)?;
8169 }
8170 Ok(super::ComplexBaseTypeContent::Choice(values.ok_or_else(
8171 || ErrorKind::MissingElement("choice".into()),
8172 )?))
8173 }
8174 Self::Sequence(mut values, deserializer) => {
8175 if let Some(deserializer) = deserializer {
8176 let value = deserializer.finish(reader)?;
8177 Self::store_sequence(&mut values, value)?;
8178 }
8179 Ok(super::ComplexBaseTypeContent::Sequence(values.ok_or_else(
8180 || ErrorKind::MissingElement("sequence".into()),
8181 )?))
8182 }
8183 Self::Attribute(mut values, deserializer) => {
8184 if let Some(deserializer) = deserializer {
8185 let value = deserializer.finish(reader)?;
8186 Self::store_attribute(&mut values, value)?;
8187 }
8188 Ok(super::ComplexBaseTypeContent::Attribute(
8189 values.ok_or_else(|| ErrorKind::MissingElement("attribute".into()))?,
8190 ))
8191 }
8192 Self::AttributeGroup(mut values, deserializer) => {
8193 if let Some(deserializer) = deserializer {
8194 let value = deserializer.finish(reader)?;
8195 Self::store_attribute_group(&mut values, value)?;
8196 }
8197 Ok(super::ComplexBaseTypeContent::AttributeGroup(
8198 values.ok_or_else(|| ErrorKind::MissingElement("attributeGroup".into()))?,
8199 ))
8200 }
8201 Self::AnyAttribute(mut values, deserializer) => {
8202 if let Some(deserializer) = deserializer {
8203 let value = deserializer.finish(reader)?;
8204 Self::store_any_attribute(&mut values, value)?;
8205 }
8206 Ok(super::ComplexBaseTypeContent::AnyAttribute(
8207 values.ok_or_else(|| ErrorKind::MissingElement("anyAttribute".into()))?,
8208 ))
8209 }
8210 Self::Assert(mut values, deserializer) => {
8211 if let Some(deserializer) = deserializer {
8212 let value = deserializer.finish(reader)?;
8213 Self::store_assert(&mut values, value)?;
8214 }
8215 Ok(super::ComplexBaseTypeContent::Assert(values.ok_or_else(
8216 || ErrorKind::MissingElement("assert".into()),
8217 )?))
8218 }
8219 Self::Done__(data) => Ok(data),
8220 Self::Unknown__ => unreachable!(),
8221 }
8222 }
8223 }
8224 #[derive(Debug)]
8225 pub struct GroupTypeDeserializer {
8226 id: Option<String>,
8227 name: Option<String>,
8228 ref_: Option<super::QName>,
8229 min_occurs: usize,
8230 max_occurs: super::MaxOccurs,
8231 content: Vec<super::GroupTypeContent>,
8232 state: Box<GroupTypeDeserializerState>,
8233 }
8234 #[derive(Debug)]
8235 enum GroupTypeDeserializerState {
8236 Init__,
8237 Next__,
8238 Content__(<super::GroupTypeContent as WithDeserializer>::Deserializer),
8239 Unknown__,
8240 }
8241 impl GroupTypeDeserializer {
8242 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
8243 where
8244 R: DeserializeReader,
8245 {
8246 let mut id: Option<String> = None;
8247 let mut name: Option<String> = None;
8248 let mut ref_: Option<super::QName> = None;
8249 let mut min_occurs: Option<usize> = None;
8250 let mut max_occurs: Option<super::MaxOccurs> = None;
8251 for attrib in filter_xmlns_attributes(bytes_start) {
8252 let attrib = attrib?;
8253 if matches!(
8254 reader.resolve_local_name(attrib.key, &super::NS_XS),
8255 Some(b"id")
8256 ) {
8257 reader.read_attrib(&mut id, b"id", &attrib.value)?;
8258 } else if matches!(
8259 reader.resolve_local_name(attrib.key, &super::NS_XS),
8260 Some(b"name")
8261 ) {
8262 reader.read_attrib(&mut name, b"name", &attrib.value)?;
8263 } else if matches!(
8264 reader.resolve_local_name(attrib.key, &super::NS_XS),
8265 Some(b"ref")
8266 ) {
8267 reader.read_attrib(&mut ref_, b"ref", &attrib.value)?;
8268 } else if matches!(
8269 reader.resolve_local_name(attrib.key, &super::NS_XS),
8270 Some(b"minOccurs")
8271 ) {
8272 reader.read_attrib(&mut min_occurs, b"minOccurs", &attrib.value)?;
8273 } else if matches!(
8274 reader.resolve_local_name(attrib.key, &super::NS_XS),
8275 Some(b"maxOccurs")
8276 ) {
8277 reader.read_attrib(&mut max_occurs, b"maxOccurs", &attrib.value)?;
8278 }
8279 }
8280 Ok(Self {
8281 id: id,
8282 name: name,
8283 ref_: ref_,
8284 min_occurs: min_occurs.unwrap_or_else(super::GroupType::default_min_occurs),
8285 max_occurs: max_occurs.unwrap_or_else(super::GroupType::default_max_occurs),
8286 content: Vec::new(),
8287 state: Box::new(GroupTypeDeserializerState::Init__),
8288 })
8289 }
8290 fn finish_state<R>(
8291 &mut self,
8292 reader: &R,
8293 state: GroupTypeDeserializerState,
8294 ) -> Result<(), Error>
8295 where
8296 R: DeserializeReader,
8297 {
8298 if let GroupTypeDeserializerState::Content__(deserializer) = state {
8299 self.store_content(deserializer.finish(reader)?)?;
8300 }
8301 Ok(())
8302 }
8303 fn store_content(&mut self, value: super::GroupTypeContent) -> Result<(), Error> {
8304 self.content.push(value);
8305 Ok(())
8306 }
8307 fn handle_content<'de, R>(
8308 &mut self,
8309 reader: &R,
8310 output: DeserializerOutput<'de, super::GroupTypeContent>,
8311 fallback: &mut Option<GroupTypeDeserializerState>,
8312 ) -> Result<ElementHandlerOutput<'de>, Error>
8313 where
8314 R: DeserializeReader,
8315 {
8316 let DeserializerOutput {
8317 artifact,
8318 event,
8319 allow_any,
8320 } = output;
8321 if artifact.is_none() {
8322 *self.state = fallback
8323 .take()
8324 .unwrap_or(GroupTypeDeserializerState::Next__);
8325 return Ok(ElementHandlerOutput::break_(event, allow_any));
8326 }
8327 if let Some(fallback) = fallback.take() {
8328 self.finish_state(reader, fallback)?;
8329 }
8330 Ok(match artifact {
8331 DeserializerArtifact::None => unreachable!(),
8332 DeserializerArtifact::Data(data) => {
8333 self.store_content(data)?;
8334 *self.state = GroupTypeDeserializerState::Next__;
8335 ElementHandlerOutput::from_event(event, allow_any)
8336 }
8337 DeserializerArtifact::Deserializer(deserializer) => {
8338 let ret = ElementHandlerOutput::from_event(event, allow_any);
8339 match &ret {
8340 ElementHandlerOutput::Continue { .. } => {
8341 fallback
8342 .get_or_insert(GroupTypeDeserializerState::Content__(deserializer));
8343 *self.state = GroupTypeDeserializerState::Next__;
8344 }
8345 ElementHandlerOutput::Break { .. } => {
8346 *self.state = GroupTypeDeserializerState::Content__(deserializer);
8347 }
8348 }
8349 ret
8350 }
8351 })
8352 }
8353 }
8354 impl<'de> Deserializer<'de, super::GroupType> for GroupTypeDeserializer {
8355 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::GroupType>
8356 where
8357 R: DeserializeReader,
8358 {
8359 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
8360 }
8361 fn next<R>(
8362 mut self,
8363 reader: &R,
8364 event: Event<'de>,
8365 ) -> DeserializerResult<'de, super::GroupType>
8366 where
8367 R: DeserializeReader,
8368 {
8369 use GroupTypeDeserializerState as S;
8370 let mut event = event;
8371 let mut fallback = None;
8372 let (event, allow_any) = loop {
8373 let state = replace(&mut *self.state, S::Unknown__);
8374 event = match (state, event) {
8375 (S::Content__(deserializer), event) => {
8376 let output = deserializer.next(reader, event)?;
8377 match self.handle_content(reader, output, &mut fallback)? {
8378 ElementHandlerOutput::Break { event, allow_any } => {
8379 break (event, allow_any)
8380 }
8381 ElementHandlerOutput::Continue { event, .. } => event,
8382 }
8383 }
8384 (_, Event::End(_)) => {
8385 return Ok(DeserializerOutput {
8386 artifact: DeserializerArtifact::Data(self.finish(reader)?),
8387 event: DeserializerEvent::None,
8388 allow_any: false,
8389 });
8390 }
8391 (old_state @ (S::Init__ | S::Next__), event) => {
8392 let output =
8393 <super::GroupTypeContent as WithDeserializer>::Deserializer::init(
8394 reader, event,
8395 )?;
8396 match self.handle_content(reader, output, &mut fallback)? {
8397 ElementHandlerOutput::Break { event, allow_any } => {
8398 if matches!(&*self.state, S::Unknown__) {
8399 *self.state = old_state;
8400 }
8401 break (event, allow_any);
8402 }
8403 ElementHandlerOutput::Continue { event, .. } => event,
8404 }
8405 }
8406 (S::Unknown__, _) => unreachable!(),
8407 }
8408 };
8409 Ok(DeserializerOutput {
8410 artifact: DeserializerArtifact::Deserializer(self),
8411 event,
8412 allow_any,
8413 })
8414 }
8415 fn finish<R>(mut self, reader: &R) -> Result<super::GroupType, Error>
8416 where
8417 R: DeserializeReader,
8418 {
8419 let state = replace(&mut *self.state, GroupTypeDeserializerState::Unknown__);
8420 self.finish_state(reader, state)?;
8421 Ok(super::GroupType {
8422 id: self.id,
8423 name: self.name,
8424 ref_: self.ref_,
8425 min_occurs: self.min_occurs,
8426 max_occurs: self.max_occurs,
8427 content: self.content,
8428 })
8429 }
8430 }
8431 #[derive(Debug)]
8432 pub enum GroupTypeContentDeserializer {
8433 Init__,
8434 Annotation(
8435 Option<super::Annotation>,
8436 Option<<super::Annotation as WithDeserializer>::Deserializer>,
8437 ),
8438 Element(
8439 Option<super::ElementType>,
8440 Option<<super::ElementType as WithDeserializer>::Deserializer>,
8441 ),
8442 Group(
8443 Option<super::GroupType>,
8444 Option<<super::GroupType as WithDeserializer>::Deserializer>,
8445 ),
8446 All(
8447 Option<super::GroupType>,
8448 Option<<super::GroupType as WithDeserializer>::Deserializer>,
8449 ),
8450 Choice(
8451 Option<super::GroupType>,
8452 Option<<super::GroupType as WithDeserializer>::Deserializer>,
8453 ),
8454 Sequence(
8455 Option<super::GroupType>,
8456 Option<<super::GroupType as WithDeserializer>::Deserializer>,
8457 ),
8458 Any(
8459 Option<super::Any>,
8460 Option<<super::Any as WithDeserializer>::Deserializer>,
8461 ),
8462 Done__(super::GroupTypeContent),
8463 Unknown__,
8464 }
8465 impl GroupTypeContentDeserializer {
8466 fn find_suitable<'de, R>(
8467 &mut self,
8468 reader: &R,
8469 event: Event<'de>,
8470 fallback: &mut Option<GroupTypeContentDeserializer>,
8471 ) -> Result<ElementHandlerOutput<'de>, Error>
8472 where
8473 R: DeserializeReader,
8474 {
8475 let (Event::Start(x) | Event::Empty(x)) = &event else {
8476 *self = Self::Init__;
8477 return Ok(ElementHandlerOutput::return_to_parent(event, false));
8478 };
8479 if matches!(
8480 reader.resolve_local_name(x.name(), &super::NS_XS),
8481 Some(b"annotation")
8482 ) {
8483 let output =
8484 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
8485 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
8486 }
8487 if matches!(
8488 reader.resolve_local_name(x.name(), &super::NS_XS),
8489 Some(b"element")
8490 ) {
8491 let output =
8492 <super::ElementType as WithDeserializer>::Deserializer::init(reader, event)?;
8493 return self.handle_element(reader, Default::default(), output, &mut *fallback);
8494 }
8495 if matches!(
8496 reader.resolve_local_name(x.name(), &super::NS_XS),
8497 Some(b"group")
8498 ) {
8499 let output =
8500 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
8501 return self.handle_group(reader, Default::default(), output, &mut *fallback);
8502 }
8503 if matches!(
8504 reader.resolve_local_name(x.name(), &super::NS_XS),
8505 Some(b"all")
8506 ) {
8507 let output =
8508 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
8509 return self.handle_all(reader, Default::default(), output, &mut *fallback);
8510 }
8511 if matches!(
8512 reader.resolve_local_name(x.name(), &super::NS_XS),
8513 Some(b"choice")
8514 ) {
8515 let output =
8516 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
8517 return self.handle_choice(reader, Default::default(), output, &mut *fallback);
8518 }
8519 if matches!(
8520 reader.resolve_local_name(x.name(), &super::NS_XS),
8521 Some(b"sequence")
8522 ) {
8523 let output =
8524 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
8525 return self.handle_sequence(reader, Default::default(), output, &mut *fallback);
8526 }
8527 if matches!(
8528 reader.resolve_local_name(x.name(), &super::NS_XS),
8529 Some(b"any")
8530 ) {
8531 let output = <super::Any as WithDeserializer>::Deserializer::init(reader, event)?;
8532 return self.handle_any(reader, Default::default(), output, &mut *fallback);
8533 }
8534 *self = Self::Init__;
8535 Ok(ElementHandlerOutput::return_to_parent(event, false))
8536 }
8537 fn store_annotation(
8538 values: &mut Option<super::Annotation>,
8539 value: super::Annotation,
8540 ) -> Result<(), Error> {
8541 if values.is_some() {
8542 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
8543 b"annotation",
8544 )))?;
8545 }
8546 *values = Some(value);
8547 Ok(())
8548 }
8549 fn store_element(
8550 values: &mut Option<super::ElementType>,
8551 value: super::ElementType,
8552 ) -> Result<(), Error> {
8553 if values.is_some() {
8554 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
8555 b"element",
8556 )))?;
8557 }
8558 *values = Some(value);
8559 Ok(())
8560 }
8561 fn store_group(
8562 values: &mut Option<super::GroupType>,
8563 value: super::GroupType,
8564 ) -> Result<(), Error> {
8565 if values.is_some() {
8566 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
8567 b"group",
8568 )))?;
8569 }
8570 *values = Some(value);
8571 Ok(())
8572 }
8573 fn store_all(
8574 values: &mut Option<super::GroupType>,
8575 value: super::GroupType,
8576 ) -> Result<(), Error> {
8577 if values.is_some() {
8578 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"all")))?;
8579 }
8580 *values = Some(value);
8581 Ok(())
8582 }
8583 fn store_choice(
8584 values: &mut Option<super::GroupType>,
8585 value: super::GroupType,
8586 ) -> Result<(), Error> {
8587 if values.is_some() {
8588 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
8589 b"choice",
8590 )))?;
8591 }
8592 *values = Some(value);
8593 Ok(())
8594 }
8595 fn store_sequence(
8596 values: &mut Option<super::GroupType>,
8597 value: super::GroupType,
8598 ) -> Result<(), Error> {
8599 if values.is_some() {
8600 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
8601 b"sequence",
8602 )))?;
8603 }
8604 *values = Some(value);
8605 Ok(())
8606 }
8607 fn store_any(values: &mut Option<super::Any>, value: super::Any) -> Result<(), Error> {
8608 if values.is_some() {
8609 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"any")))?;
8610 }
8611 *values = Some(value);
8612 Ok(())
8613 }
8614 fn handle_annotation<'de, R>(
8615 &mut self,
8616 reader: &R,
8617 mut values: Option<super::Annotation>,
8618 output: DeserializerOutput<'de, super::Annotation>,
8619 fallback: &mut Option<Self>,
8620 ) -> Result<ElementHandlerOutput<'de>, Error>
8621 where
8622 R: DeserializeReader,
8623 {
8624 let DeserializerOutput {
8625 artifact,
8626 event,
8627 allow_any,
8628 } = output;
8629 if artifact.is_none() {
8630 *self = match fallback.take() {
8631 None => Self::Init__,
8632 Some(Self::Annotation(_, Some(deserializer))) => {
8633 Self::Annotation(values, Some(deserializer))
8634 }
8635 _ => unreachable!(),
8636 };
8637 return Ok(ElementHandlerOutput::break_(event, allow_any));
8638 }
8639 match fallback.take() {
8640 None => (),
8641 Some(Self::Annotation(_, Some(deserializer))) => {
8642 let data = deserializer.finish(reader)?;
8643 Self::store_annotation(&mut values, data)?;
8644 }
8645 Some(_) => unreachable!(),
8646 }
8647 Ok(match artifact {
8648 DeserializerArtifact::None => unreachable!(),
8649 DeserializerArtifact::Data(data) => {
8650 Self::store_annotation(&mut values, data)?;
8651 let data = Self::Annotation(values, None).finish(reader)?;
8652 *self = Self::Done__(data);
8653 ElementHandlerOutput::Break { event, allow_any }
8654 }
8655 DeserializerArtifact::Deserializer(deserializer) => {
8656 *self = Self::Annotation(values, Some(deserializer));
8657 ElementHandlerOutput::from_event_end(event, allow_any)
8658 }
8659 })
8660 }
8661 fn handle_element<'de, R>(
8662 &mut self,
8663 reader: &R,
8664 mut values: Option<super::ElementType>,
8665 output: DeserializerOutput<'de, super::ElementType>,
8666 fallback: &mut Option<Self>,
8667 ) -> Result<ElementHandlerOutput<'de>, Error>
8668 where
8669 R: DeserializeReader,
8670 {
8671 let DeserializerOutput {
8672 artifact,
8673 event,
8674 allow_any,
8675 } = output;
8676 if artifact.is_none() {
8677 *self = match fallback.take() {
8678 None => Self::Init__,
8679 Some(Self::Element(_, Some(deserializer))) => {
8680 Self::Element(values, Some(deserializer))
8681 }
8682 _ => unreachable!(),
8683 };
8684 return Ok(ElementHandlerOutput::break_(event, allow_any));
8685 }
8686 match fallback.take() {
8687 None => (),
8688 Some(Self::Element(_, Some(deserializer))) => {
8689 let data = deserializer.finish(reader)?;
8690 Self::store_element(&mut values, data)?;
8691 }
8692 Some(_) => unreachable!(),
8693 }
8694 Ok(match artifact {
8695 DeserializerArtifact::None => unreachable!(),
8696 DeserializerArtifact::Data(data) => {
8697 Self::store_element(&mut values, data)?;
8698 let data = Self::Element(values, None).finish(reader)?;
8699 *self = Self::Done__(data);
8700 ElementHandlerOutput::Break { event, allow_any }
8701 }
8702 DeserializerArtifact::Deserializer(deserializer) => {
8703 *self = Self::Element(values, Some(deserializer));
8704 ElementHandlerOutput::from_event_end(event, allow_any)
8705 }
8706 })
8707 }
8708 fn handle_group<'de, R>(
8709 &mut self,
8710 reader: &R,
8711 mut values: Option<super::GroupType>,
8712 output: DeserializerOutput<'de, super::GroupType>,
8713 fallback: &mut Option<Self>,
8714 ) -> Result<ElementHandlerOutput<'de>, Error>
8715 where
8716 R: DeserializeReader,
8717 {
8718 let DeserializerOutput {
8719 artifact,
8720 event,
8721 allow_any,
8722 } = output;
8723 if artifact.is_none() {
8724 *self = match fallback.take() {
8725 None => Self::Init__,
8726 Some(Self::Group(_, Some(deserializer))) => {
8727 Self::Group(values, Some(deserializer))
8728 }
8729 _ => unreachable!(),
8730 };
8731 return Ok(ElementHandlerOutput::break_(event, allow_any));
8732 }
8733 match fallback.take() {
8734 None => (),
8735 Some(Self::Group(_, Some(deserializer))) => {
8736 let data = deserializer.finish(reader)?;
8737 Self::store_group(&mut values, data)?;
8738 }
8739 Some(_) => unreachable!(),
8740 }
8741 Ok(match artifact {
8742 DeserializerArtifact::None => unreachable!(),
8743 DeserializerArtifact::Data(data) => {
8744 Self::store_group(&mut values, data)?;
8745 let data = Self::Group(values, None).finish(reader)?;
8746 *self = Self::Done__(data);
8747 ElementHandlerOutput::Break { event, allow_any }
8748 }
8749 DeserializerArtifact::Deserializer(deserializer) => {
8750 *self = Self::Group(values, Some(deserializer));
8751 ElementHandlerOutput::from_event_end(event, allow_any)
8752 }
8753 })
8754 }
8755 fn handle_all<'de, R>(
8756 &mut self,
8757 reader: &R,
8758 mut values: Option<super::GroupType>,
8759 output: DeserializerOutput<'de, super::GroupType>,
8760 fallback: &mut Option<Self>,
8761 ) -> Result<ElementHandlerOutput<'de>, Error>
8762 where
8763 R: DeserializeReader,
8764 {
8765 let DeserializerOutput {
8766 artifact,
8767 event,
8768 allow_any,
8769 } = output;
8770 if artifact.is_none() {
8771 *self = match fallback.take() {
8772 None => Self::Init__,
8773 Some(Self::All(_, Some(deserializer))) => Self::All(values, Some(deserializer)),
8774 _ => unreachable!(),
8775 };
8776 return Ok(ElementHandlerOutput::break_(event, allow_any));
8777 }
8778 match fallback.take() {
8779 None => (),
8780 Some(Self::All(_, Some(deserializer))) => {
8781 let data = deserializer.finish(reader)?;
8782 Self::store_all(&mut values, data)?;
8783 }
8784 Some(_) => unreachable!(),
8785 }
8786 Ok(match artifact {
8787 DeserializerArtifact::None => unreachable!(),
8788 DeserializerArtifact::Data(data) => {
8789 Self::store_all(&mut values, data)?;
8790 let data = Self::All(values, None).finish(reader)?;
8791 *self = Self::Done__(data);
8792 ElementHandlerOutput::Break { event, allow_any }
8793 }
8794 DeserializerArtifact::Deserializer(deserializer) => {
8795 *self = Self::All(values, Some(deserializer));
8796 ElementHandlerOutput::from_event_end(event, allow_any)
8797 }
8798 })
8799 }
8800 fn handle_choice<'de, R>(
8801 &mut self,
8802 reader: &R,
8803 mut values: Option<super::GroupType>,
8804 output: DeserializerOutput<'de, super::GroupType>,
8805 fallback: &mut Option<Self>,
8806 ) -> Result<ElementHandlerOutput<'de>, Error>
8807 where
8808 R: DeserializeReader,
8809 {
8810 let DeserializerOutput {
8811 artifact,
8812 event,
8813 allow_any,
8814 } = output;
8815 if artifact.is_none() {
8816 *self = match fallback.take() {
8817 None => Self::Init__,
8818 Some(Self::Choice(_, Some(deserializer))) => {
8819 Self::Choice(values, Some(deserializer))
8820 }
8821 _ => unreachable!(),
8822 };
8823 return Ok(ElementHandlerOutput::break_(event, allow_any));
8824 }
8825 match fallback.take() {
8826 None => (),
8827 Some(Self::Choice(_, Some(deserializer))) => {
8828 let data = deserializer.finish(reader)?;
8829 Self::store_choice(&mut values, data)?;
8830 }
8831 Some(_) => unreachable!(),
8832 }
8833 Ok(match artifact {
8834 DeserializerArtifact::None => unreachable!(),
8835 DeserializerArtifact::Data(data) => {
8836 Self::store_choice(&mut values, data)?;
8837 let data = Self::Choice(values, None).finish(reader)?;
8838 *self = Self::Done__(data);
8839 ElementHandlerOutput::Break { event, allow_any }
8840 }
8841 DeserializerArtifact::Deserializer(deserializer) => {
8842 *self = Self::Choice(values, Some(deserializer));
8843 ElementHandlerOutput::from_event_end(event, allow_any)
8844 }
8845 })
8846 }
8847 fn handle_sequence<'de, R>(
8848 &mut self,
8849 reader: &R,
8850 mut values: Option<super::GroupType>,
8851 output: DeserializerOutput<'de, super::GroupType>,
8852 fallback: &mut Option<Self>,
8853 ) -> Result<ElementHandlerOutput<'de>, Error>
8854 where
8855 R: DeserializeReader,
8856 {
8857 let DeserializerOutput {
8858 artifact,
8859 event,
8860 allow_any,
8861 } = output;
8862 if artifact.is_none() {
8863 *self = match fallback.take() {
8864 None => Self::Init__,
8865 Some(Self::Sequence(_, Some(deserializer))) => {
8866 Self::Sequence(values, Some(deserializer))
8867 }
8868 _ => unreachable!(),
8869 };
8870 return Ok(ElementHandlerOutput::break_(event, allow_any));
8871 }
8872 match fallback.take() {
8873 None => (),
8874 Some(Self::Sequence(_, Some(deserializer))) => {
8875 let data = deserializer.finish(reader)?;
8876 Self::store_sequence(&mut values, data)?;
8877 }
8878 Some(_) => unreachable!(),
8879 }
8880 Ok(match artifact {
8881 DeserializerArtifact::None => unreachable!(),
8882 DeserializerArtifact::Data(data) => {
8883 Self::store_sequence(&mut values, data)?;
8884 let data = Self::Sequence(values, None).finish(reader)?;
8885 *self = Self::Done__(data);
8886 ElementHandlerOutput::Break { event, allow_any }
8887 }
8888 DeserializerArtifact::Deserializer(deserializer) => {
8889 *self = Self::Sequence(values, Some(deserializer));
8890 ElementHandlerOutput::from_event_end(event, allow_any)
8891 }
8892 })
8893 }
8894 fn handle_any<'de, R>(
8895 &mut self,
8896 reader: &R,
8897 mut values: Option<super::Any>,
8898 output: DeserializerOutput<'de, super::Any>,
8899 fallback: &mut Option<Self>,
8900 ) -> Result<ElementHandlerOutput<'de>, Error>
8901 where
8902 R: DeserializeReader,
8903 {
8904 let DeserializerOutput {
8905 artifact,
8906 event,
8907 allow_any,
8908 } = output;
8909 if artifact.is_none() {
8910 *self = match fallback.take() {
8911 None => Self::Init__,
8912 Some(Self::Any(_, Some(deserializer))) => Self::Any(values, Some(deserializer)),
8913 _ => unreachable!(),
8914 };
8915 return Ok(ElementHandlerOutput::break_(event, allow_any));
8916 }
8917 match fallback.take() {
8918 None => (),
8919 Some(Self::Any(_, Some(deserializer))) => {
8920 let data = deserializer.finish(reader)?;
8921 Self::store_any(&mut values, data)?;
8922 }
8923 Some(_) => unreachable!(),
8924 }
8925 Ok(match artifact {
8926 DeserializerArtifact::None => unreachable!(),
8927 DeserializerArtifact::Data(data) => {
8928 Self::store_any(&mut values, data)?;
8929 let data = Self::Any(values, None).finish(reader)?;
8930 *self = Self::Done__(data);
8931 ElementHandlerOutput::Break { event, allow_any }
8932 }
8933 DeserializerArtifact::Deserializer(deserializer) => {
8934 *self = Self::Any(values, Some(deserializer));
8935 ElementHandlerOutput::from_event_end(event, allow_any)
8936 }
8937 })
8938 }
8939 }
8940 impl<'de> Deserializer<'de, super::GroupTypeContent> for GroupTypeContentDeserializer {
8941 fn init<R>(
8942 reader: &R,
8943 event: Event<'de>,
8944 ) -> DeserializerResult<'de, super::GroupTypeContent>
8945 where
8946 R: DeserializeReader,
8947 {
8948 let deserializer = Self::Init__;
8949 let mut output = deserializer.next(reader, event)?;
8950 output.artifact = match output.artifact {
8951 DeserializerArtifact::Deserializer(Self::Init__) => DeserializerArtifact::None,
8952 artifact => artifact,
8953 };
8954 Ok(output)
8955 }
8956 fn next<R>(
8957 mut self,
8958 reader: &R,
8959 event: Event<'de>,
8960 ) -> DeserializerResult<'de, super::GroupTypeContent>
8961 where
8962 R: DeserializeReader,
8963 {
8964 let mut event = event;
8965 let mut fallback = None;
8966 let (event, allow_any) = loop {
8967 let state = replace(&mut self, Self::Unknown__);
8968 event = match (state, event) {
8969 (Self::Annotation(values, Some(deserializer)), event) => {
8970 let output = deserializer.next(reader, event)?;
8971 match self.handle_annotation(reader, values, output, &mut fallback)? {
8972 ElementHandlerOutput::Break { event, allow_any } => {
8973 break (event, allow_any)
8974 }
8975 ElementHandlerOutput::Continue { event, .. } => event,
8976 }
8977 }
8978 (Self::Element(values, Some(deserializer)), event) => {
8979 let output = deserializer.next(reader, event)?;
8980 match self.handle_element(reader, values, output, &mut fallback)? {
8981 ElementHandlerOutput::Break { event, allow_any } => {
8982 break (event, allow_any)
8983 }
8984 ElementHandlerOutput::Continue { event, .. } => event,
8985 }
8986 }
8987 (Self::Group(values, Some(deserializer)), event) => {
8988 let output = deserializer.next(reader, event)?;
8989 match self.handle_group(reader, values, output, &mut fallback)? {
8990 ElementHandlerOutput::Break { event, allow_any } => {
8991 break (event, allow_any)
8992 }
8993 ElementHandlerOutput::Continue { event, .. } => event,
8994 }
8995 }
8996 (Self::All(values, Some(deserializer)), event) => {
8997 let output = deserializer.next(reader, event)?;
8998 match self.handle_all(reader, values, output, &mut fallback)? {
8999 ElementHandlerOutput::Break { event, allow_any } => {
9000 break (event, allow_any)
9001 }
9002 ElementHandlerOutput::Continue { event, .. } => event,
9003 }
9004 }
9005 (Self::Choice(values, Some(deserializer)), event) => {
9006 let output = deserializer.next(reader, event)?;
9007 match self.handle_choice(reader, values, output, &mut fallback)? {
9008 ElementHandlerOutput::Break { event, allow_any } => {
9009 break (event, allow_any)
9010 }
9011 ElementHandlerOutput::Continue { event, .. } => event,
9012 }
9013 }
9014 (Self::Sequence(values, Some(deserializer)), event) => {
9015 let output = deserializer.next(reader, event)?;
9016 match self.handle_sequence(reader, values, output, &mut fallback)? {
9017 ElementHandlerOutput::Break { event, allow_any } => {
9018 break (event, allow_any)
9019 }
9020 ElementHandlerOutput::Continue { event, .. } => event,
9021 }
9022 }
9023 (Self::Any(values, Some(deserializer)), event) => {
9024 let output = deserializer.next(reader, event)?;
9025 match self.handle_any(reader, values, output, &mut fallback)? {
9026 ElementHandlerOutput::Break { event, allow_any } => {
9027 break (event, allow_any)
9028 }
9029 ElementHandlerOutput::Continue { event, .. } => event,
9030 }
9031 }
9032 (state, event @ Event::End(_)) => {
9033 return Ok(DeserializerOutput {
9034 artifact: DeserializerArtifact::Data(state.finish(reader)?),
9035 event: DeserializerEvent::Continue(event),
9036 allow_any: false,
9037 });
9038 }
9039 (Self::Init__, event) => {
9040 match self.find_suitable(reader, event, &mut fallback)? {
9041 ElementHandlerOutput::Break { event, allow_any } => {
9042 break (event, allow_any)
9043 }
9044 ElementHandlerOutput::Continue { event, .. } => event,
9045 }
9046 }
9047 (Self::Annotation(values, None), event) => {
9048 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
9049 reader, event,
9050 )?;
9051 match self.handle_annotation(reader, values, output, &mut fallback)? {
9052 ElementHandlerOutput::Break { event, allow_any } => {
9053 break (event, allow_any)
9054 }
9055 ElementHandlerOutput::Continue { event, .. } => event,
9056 }
9057 }
9058 (Self::Element(values, None), event) => {
9059 let output = <super::ElementType as WithDeserializer>::Deserializer::init(
9060 reader, event,
9061 )?;
9062 match self.handle_element(reader, values, output, &mut fallback)? {
9063 ElementHandlerOutput::Break { event, allow_any } => {
9064 break (event, allow_any)
9065 }
9066 ElementHandlerOutput::Continue { event, .. } => event,
9067 }
9068 }
9069 (Self::Group(values, None), event) => {
9070 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
9071 reader, event,
9072 )?;
9073 match self.handle_group(reader, values, output, &mut fallback)? {
9074 ElementHandlerOutput::Break { event, allow_any } => {
9075 break (event, allow_any)
9076 }
9077 ElementHandlerOutput::Continue { event, .. } => event,
9078 }
9079 }
9080 (Self::All(values, None), event) => {
9081 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
9082 reader, event,
9083 )?;
9084 match self.handle_all(reader, values, output, &mut fallback)? {
9085 ElementHandlerOutput::Break { event, allow_any } => {
9086 break (event, allow_any)
9087 }
9088 ElementHandlerOutput::Continue { event, .. } => event,
9089 }
9090 }
9091 (Self::Choice(values, None), event) => {
9092 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
9093 reader, event,
9094 )?;
9095 match self.handle_choice(reader, values, output, &mut fallback)? {
9096 ElementHandlerOutput::Break { event, allow_any } => {
9097 break (event, allow_any)
9098 }
9099 ElementHandlerOutput::Continue { event, .. } => event,
9100 }
9101 }
9102 (Self::Sequence(values, None), event) => {
9103 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
9104 reader, event,
9105 )?;
9106 match self.handle_sequence(reader, values, output, &mut fallback)? {
9107 ElementHandlerOutput::Break { event, allow_any } => {
9108 break (event, allow_any)
9109 }
9110 ElementHandlerOutput::Continue { event, .. } => event,
9111 }
9112 }
9113 (Self::Any(values, None), event) => {
9114 let output =
9115 <super::Any as WithDeserializer>::Deserializer::init(reader, event)?;
9116 match self.handle_any(reader, values, output, &mut fallback)? {
9117 ElementHandlerOutput::Break { event, allow_any } => {
9118 break (event, allow_any)
9119 }
9120 ElementHandlerOutput::Continue { event, .. } => event,
9121 }
9122 }
9123 (s @ Self::Done__(_), event) => {
9124 self = s;
9125 break (DeserializerEvent::Continue(event), false);
9126 }
9127 (Self::Unknown__, _) => unreachable!(),
9128 }
9129 };
9130 let artifact = match self {
9131 Self::Done__(data) => DeserializerArtifact::Data(data),
9132 deserializer => DeserializerArtifact::Deserializer(deserializer),
9133 };
9134 Ok(DeserializerOutput {
9135 artifact,
9136 event,
9137 allow_any,
9138 })
9139 }
9140 fn finish<R>(self, reader: &R) -> Result<super::GroupTypeContent, Error>
9141 where
9142 R: DeserializeReader,
9143 {
9144 match self {
9145 Self::Init__ => Err(ErrorKind::MissingContent.into()),
9146 Self::Annotation(mut values, deserializer) => {
9147 if let Some(deserializer) = deserializer {
9148 let value = deserializer.finish(reader)?;
9149 Self::store_annotation(&mut values, value)?;
9150 }
9151 Ok(super::GroupTypeContent::Annotation(values.ok_or_else(
9152 || ErrorKind::MissingElement("annotation".into()),
9153 )?))
9154 }
9155 Self::Element(mut values, deserializer) => {
9156 if let Some(deserializer) = deserializer {
9157 let value = deserializer.finish(reader)?;
9158 Self::store_element(&mut values, value)?;
9159 }
9160 Ok(super::GroupTypeContent::Element(values.ok_or_else(
9161 || ErrorKind::MissingElement("element".into()),
9162 )?))
9163 }
9164 Self::Group(mut values, deserializer) => {
9165 if let Some(deserializer) = deserializer {
9166 let value = deserializer.finish(reader)?;
9167 Self::store_group(&mut values, value)?;
9168 }
9169 Ok(super::GroupTypeContent::Group(values.ok_or_else(|| {
9170 ErrorKind::MissingElement("group".into())
9171 })?))
9172 }
9173 Self::All(mut values, deserializer) => {
9174 if let Some(deserializer) = deserializer {
9175 let value = deserializer.finish(reader)?;
9176 Self::store_all(&mut values, value)?;
9177 }
9178 Ok(super::GroupTypeContent::All(
9179 values.ok_or_else(|| ErrorKind::MissingElement("all".into()))?,
9180 ))
9181 }
9182 Self::Choice(mut values, deserializer) => {
9183 if let Some(deserializer) = deserializer {
9184 let value = deserializer.finish(reader)?;
9185 Self::store_choice(&mut values, value)?;
9186 }
9187 Ok(super::GroupTypeContent::Choice(values.ok_or_else(
9188 || ErrorKind::MissingElement("choice".into()),
9189 )?))
9190 }
9191 Self::Sequence(mut values, deserializer) => {
9192 if let Some(deserializer) = deserializer {
9193 let value = deserializer.finish(reader)?;
9194 Self::store_sequence(&mut values, value)?;
9195 }
9196 Ok(super::GroupTypeContent::Sequence(values.ok_or_else(
9197 || ErrorKind::MissingElement("sequence".into()),
9198 )?))
9199 }
9200 Self::Any(mut values, deserializer) => {
9201 if let Some(deserializer) = deserializer {
9202 let value = deserializer.finish(reader)?;
9203 Self::store_any(&mut values, value)?;
9204 }
9205 Ok(super::GroupTypeContent::Any(
9206 values.ok_or_else(|| ErrorKind::MissingElement("any".into()))?,
9207 ))
9208 }
9209 Self::Done__(data) => Ok(data),
9210 Self::Unknown__ => unreachable!(),
9211 }
9212 }
9213 }
9214 #[derive(Debug)]
9215 pub struct AttributeGroupTypeDeserializer {
9216 id: Option<String>,
9217 name: Option<String>,
9218 ref_: Option<super::QName>,
9219 content: Vec<super::AttributeGroupTypeContent>,
9220 state: Box<AttributeGroupTypeDeserializerState>,
9221 }
9222 #[derive(Debug)]
9223 enum AttributeGroupTypeDeserializerState {
9224 Init__,
9225 Next__,
9226 Content__(<super::AttributeGroupTypeContent as WithDeserializer>::Deserializer),
9227 Unknown__,
9228 }
9229 impl AttributeGroupTypeDeserializer {
9230 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
9231 where
9232 R: DeserializeReader,
9233 {
9234 let mut id: Option<String> = None;
9235 let mut name: Option<String> = None;
9236 let mut ref_: Option<super::QName> = None;
9237 for attrib in filter_xmlns_attributes(bytes_start) {
9238 let attrib = attrib?;
9239 if matches!(
9240 reader.resolve_local_name(attrib.key, &super::NS_XS),
9241 Some(b"id")
9242 ) {
9243 reader.read_attrib(&mut id, b"id", &attrib.value)?;
9244 } else if matches!(
9245 reader.resolve_local_name(attrib.key, &super::NS_XS),
9246 Some(b"name")
9247 ) {
9248 reader.read_attrib(&mut name, b"name", &attrib.value)?;
9249 } else if matches!(
9250 reader.resolve_local_name(attrib.key, &super::NS_XS),
9251 Some(b"ref")
9252 ) {
9253 reader.read_attrib(&mut ref_, b"ref", &attrib.value)?;
9254 }
9255 }
9256 Ok(Self {
9257 id: id,
9258 name: name,
9259 ref_: ref_,
9260 content: Vec::new(),
9261 state: Box::new(AttributeGroupTypeDeserializerState::Init__),
9262 })
9263 }
9264 fn finish_state<R>(
9265 &mut self,
9266 reader: &R,
9267 state: AttributeGroupTypeDeserializerState,
9268 ) -> Result<(), Error>
9269 where
9270 R: DeserializeReader,
9271 {
9272 if let AttributeGroupTypeDeserializerState::Content__(deserializer) = state {
9273 self.store_content(deserializer.finish(reader)?)?;
9274 }
9275 Ok(())
9276 }
9277 fn store_content(&mut self, value: super::AttributeGroupTypeContent) -> Result<(), Error> {
9278 self.content.push(value);
9279 Ok(())
9280 }
9281 fn handle_content<'de, R>(
9282 &mut self,
9283 reader: &R,
9284 output: DeserializerOutput<'de, super::AttributeGroupTypeContent>,
9285 fallback: &mut Option<AttributeGroupTypeDeserializerState>,
9286 ) -> Result<ElementHandlerOutput<'de>, Error>
9287 where
9288 R: DeserializeReader,
9289 {
9290 let DeserializerOutput {
9291 artifact,
9292 event,
9293 allow_any,
9294 } = output;
9295 if artifact.is_none() {
9296 *self.state = fallback
9297 .take()
9298 .unwrap_or(AttributeGroupTypeDeserializerState::Next__);
9299 return Ok(ElementHandlerOutput::break_(event, allow_any));
9300 }
9301 if let Some(fallback) = fallback.take() {
9302 self.finish_state(reader, fallback)?;
9303 }
9304 Ok(match artifact {
9305 DeserializerArtifact::None => unreachable!(),
9306 DeserializerArtifact::Data(data) => {
9307 self.store_content(data)?;
9308 *self.state = AttributeGroupTypeDeserializerState::Next__;
9309 ElementHandlerOutput::from_event(event, allow_any)
9310 }
9311 DeserializerArtifact::Deserializer(deserializer) => {
9312 let ret = ElementHandlerOutput::from_event(event, allow_any);
9313 match &ret {
9314 ElementHandlerOutput::Continue { .. } => {
9315 fallback.get_or_insert(AttributeGroupTypeDeserializerState::Content__(
9316 deserializer,
9317 ));
9318 *self.state = AttributeGroupTypeDeserializerState::Next__;
9319 }
9320 ElementHandlerOutput::Break { .. } => {
9321 *self.state =
9322 AttributeGroupTypeDeserializerState::Content__(deserializer);
9323 }
9324 }
9325 ret
9326 }
9327 })
9328 }
9329 }
9330 impl<'de> Deserializer<'de, super::AttributeGroupType> for AttributeGroupTypeDeserializer {
9331 fn init<R>(
9332 reader: &R,
9333 event: Event<'de>,
9334 ) -> DeserializerResult<'de, super::AttributeGroupType>
9335 where
9336 R: DeserializeReader,
9337 {
9338 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
9339 }
9340 fn next<R>(
9341 mut self,
9342 reader: &R,
9343 event: Event<'de>,
9344 ) -> DeserializerResult<'de, super::AttributeGroupType>
9345 where
9346 R: DeserializeReader,
9347 {
9348 use AttributeGroupTypeDeserializerState as S;
9349 let mut event = event;
9350 let mut fallback = None;
9351 let (event, allow_any) = loop {
9352 let state = replace(&mut *self.state, S::Unknown__);
9353 event = match (state, event) {
9354 (S::Content__(deserializer), event) => {
9355 let output = deserializer.next(reader, event)?;
9356 match self.handle_content(reader, output, &mut fallback)? {
9357 ElementHandlerOutput::Break { event, allow_any } => {
9358 break (event, allow_any)
9359 }
9360 ElementHandlerOutput::Continue { event, .. } => event,
9361 }
9362 }
9363 (_, Event::End(_)) => {
9364 return Ok(DeserializerOutput {
9365 artifact: DeserializerArtifact::Data(self.finish(reader)?),
9366 event: DeserializerEvent::None,
9367 allow_any: false,
9368 });
9369 }
9370 (old_state @ (S::Init__ | S::Next__), event) => {
9371 let output = < super :: AttributeGroupTypeContent as WithDeserializer > :: Deserializer :: init (reader , event) ? ;
9372 match self.handle_content(reader, output, &mut fallback)? {
9373 ElementHandlerOutput::Break { event, allow_any } => {
9374 if matches!(&*self.state, S::Unknown__) {
9375 *self.state = old_state;
9376 }
9377 break (event, allow_any);
9378 }
9379 ElementHandlerOutput::Continue { event, .. } => event,
9380 }
9381 }
9382 (S::Unknown__, _) => unreachable!(),
9383 }
9384 };
9385 Ok(DeserializerOutput {
9386 artifact: DeserializerArtifact::Deserializer(self),
9387 event,
9388 allow_any,
9389 })
9390 }
9391 fn finish<R>(mut self, reader: &R) -> Result<super::AttributeGroupType, Error>
9392 where
9393 R: DeserializeReader,
9394 {
9395 let state = replace(
9396 &mut *self.state,
9397 AttributeGroupTypeDeserializerState::Unknown__,
9398 );
9399 self.finish_state(reader, state)?;
9400 Ok(super::AttributeGroupType {
9401 id: self.id,
9402 name: self.name,
9403 ref_: self.ref_,
9404 content: self.content,
9405 })
9406 }
9407 }
9408 #[derive(Debug)]
9409 pub enum AttributeGroupTypeContentDeserializer {
9410 Init__,
9411 Annotation(
9412 Option<super::Annotation>,
9413 Option<<super::Annotation as WithDeserializer>::Deserializer>,
9414 ),
9415 Attribute(
9416 Option<super::AttributeType>,
9417 Option<<super::AttributeType as WithDeserializer>::Deserializer>,
9418 ),
9419 AttributeGroup(
9420 Option<super::AttributeGroupType>,
9421 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
9422 ),
9423 AnyAttribute(
9424 Option<super::AnyAttribute>,
9425 Option<<super::AnyAttribute as WithDeserializer>::Deserializer>,
9426 ),
9427 Done__(super::AttributeGroupTypeContent),
9428 Unknown__,
9429 }
9430 impl AttributeGroupTypeContentDeserializer {
9431 fn find_suitable<'de, R>(
9432 &mut self,
9433 reader: &R,
9434 event: Event<'de>,
9435 fallback: &mut Option<AttributeGroupTypeContentDeserializer>,
9436 ) -> Result<ElementHandlerOutput<'de>, Error>
9437 where
9438 R: DeserializeReader,
9439 {
9440 let (Event::Start(x) | Event::Empty(x)) = &event else {
9441 *self = Self::Init__;
9442 return Ok(ElementHandlerOutput::return_to_parent(event, false));
9443 };
9444 if matches!(
9445 reader.resolve_local_name(x.name(), &super::NS_XS),
9446 Some(b"annotation")
9447 ) {
9448 let output =
9449 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
9450 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
9451 }
9452 if matches!(
9453 reader.resolve_local_name(x.name(), &super::NS_XS),
9454 Some(b"attribute")
9455 ) {
9456 let output =
9457 <super::AttributeType as WithDeserializer>::Deserializer::init(reader, event)?;
9458 return self.handle_attribute(reader, Default::default(), output, &mut *fallback);
9459 }
9460 if matches!(
9461 reader.resolve_local_name(x.name(), &super::NS_XS),
9462 Some(b"attributeGroup")
9463 ) {
9464 let output = <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
9465 reader, event,
9466 )?;
9467 return self.handle_attribute_group(
9468 reader,
9469 Default::default(),
9470 output,
9471 &mut *fallback,
9472 );
9473 }
9474 if matches!(
9475 reader.resolve_local_name(x.name(), &super::NS_XS),
9476 Some(b"anyAttribute")
9477 ) {
9478 let output =
9479 <super::AnyAttribute as WithDeserializer>::Deserializer::init(reader, event)?;
9480 return self.handle_any_attribute(
9481 reader,
9482 Default::default(),
9483 output,
9484 &mut *fallback,
9485 );
9486 }
9487 *self = Self::Init__;
9488 Ok(ElementHandlerOutput::return_to_parent(event, false))
9489 }
9490 fn store_annotation(
9491 values: &mut Option<super::Annotation>,
9492 value: super::Annotation,
9493 ) -> Result<(), Error> {
9494 if values.is_some() {
9495 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
9496 b"annotation",
9497 )))?;
9498 }
9499 *values = Some(value);
9500 Ok(())
9501 }
9502 fn store_attribute(
9503 values: &mut Option<super::AttributeType>,
9504 value: super::AttributeType,
9505 ) -> Result<(), Error> {
9506 if values.is_some() {
9507 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
9508 b"attribute",
9509 )))?;
9510 }
9511 *values = Some(value);
9512 Ok(())
9513 }
9514 fn store_attribute_group(
9515 values: &mut Option<super::AttributeGroupType>,
9516 value: super::AttributeGroupType,
9517 ) -> Result<(), Error> {
9518 if values.is_some() {
9519 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
9520 b"attributeGroup",
9521 )))?;
9522 }
9523 *values = Some(value);
9524 Ok(())
9525 }
9526 fn store_any_attribute(
9527 values: &mut Option<super::AnyAttribute>,
9528 value: super::AnyAttribute,
9529 ) -> Result<(), Error> {
9530 if values.is_some() {
9531 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
9532 b"anyAttribute",
9533 )))?;
9534 }
9535 *values = Some(value);
9536 Ok(())
9537 }
9538 fn handle_annotation<'de, R>(
9539 &mut self,
9540 reader: &R,
9541 mut values: Option<super::Annotation>,
9542 output: DeserializerOutput<'de, super::Annotation>,
9543 fallback: &mut Option<Self>,
9544 ) -> Result<ElementHandlerOutput<'de>, Error>
9545 where
9546 R: DeserializeReader,
9547 {
9548 let DeserializerOutput {
9549 artifact,
9550 event,
9551 allow_any,
9552 } = output;
9553 if artifact.is_none() {
9554 *self = match fallback.take() {
9555 None => Self::Init__,
9556 Some(Self::Annotation(_, Some(deserializer))) => {
9557 Self::Annotation(values, Some(deserializer))
9558 }
9559 _ => unreachable!(),
9560 };
9561 return Ok(ElementHandlerOutput::break_(event, allow_any));
9562 }
9563 match fallback.take() {
9564 None => (),
9565 Some(Self::Annotation(_, Some(deserializer))) => {
9566 let data = deserializer.finish(reader)?;
9567 Self::store_annotation(&mut values, data)?;
9568 }
9569 Some(_) => unreachable!(),
9570 }
9571 Ok(match artifact {
9572 DeserializerArtifact::None => unreachable!(),
9573 DeserializerArtifact::Data(data) => {
9574 Self::store_annotation(&mut values, data)?;
9575 let data = Self::Annotation(values, None).finish(reader)?;
9576 *self = Self::Done__(data);
9577 ElementHandlerOutput::Break { event, allow_any }
9578 }
9579 DeserializerArtifact::Deserializer(deserializer) => {
9580 *self = Self::Annotation(values, Some(deserializer));
9581 ElementHandlerOutput::from_event_end(event, allow_any)
9582 }
9583 })
9584 }
9585 fn handle_attribute<'de, R>(
9586 &mut self,
9587 reader: &R,
9588 mut values: Option<super::AttributeType>,
9589 output: DeserializerOutput<'de, super::AttributeType>,
9590 fallback: &mut Option<Self>,
9591 ) -> Result<ElementHandlerOutput<'de>, Error>
9592 where
9593 R: DeserializeReader,
9594 {
9595 let DeserializerOutput {
9596 artifact,
9597 event,
9598 allow_any,
9599 } = output;
9600 if artifact.is_none() {
9601 *self = match fallback.take() {
9602 None => Self::Init__,
9603 Some(Self::Attribute(_, Some(deserializer))) => {
9604 Self::Attribute(values, Some(deserializer))
9605 }
9606 _ => unreachable!(),
9607 };
9608 return Ok(ElementHandlerOutput::break_(event, allow_any));
9609 }
9610 match fallback.take() {
9611 None => (),
9612 Some(Self::Attribute(_, Some(deserializer))) => {
9613 let data = deserializer.finish(reader)?;
9614 Self::store_attribute(&mut values, data)?;
9615 }
9616 Some(_) => unreachable!(),
9617 }
9618 Ok(match artifact {
9619 DeserializerArtifact::None => unreachable!(),
9620 DeserializerArtifact::Data(data) => {
9621 Self::store_attribute(&mut values, data)?;
9622 let data = Self::Attribute(values, None).finish(reader)?;
9623 *self = Self::Done__(data);
9624 ElementHandlerOutput::Break { event, allow_any }
9625 }
9626 DeserializerArtifact::Deserializer(deserializer) => {
9627 *self = Self::Attribute(values, Some(deserializer));
9628 ElementHandlerOutput::from_event_end(event, allow_any)
9629 }
9630 })
9631 }
9632 fn handle_attribute_group<'de, R>(
9633 &mut self,
9634 reader: &R,
9635 mut values: Option<super::AttributeGroupType>,
9636 output: DeserializerOutput<'de, super::AttributeGroupType>,
9637 fallback: &mut Option<Self>,
9638 ) -> Result<ElementHandlerOutput<'de>, Error>
9639 where
9640 R: DeserializeReader,
9641 {
9642 let DeserializerOutput {
9643 artifact,
9644 event,
9645 allow_any,
9646 } = output;
9647 if artifact.is_none() {
9648 *self = match fallback.take() {
9649 None => Self::Init__,
9650 Some(Self::AttributeGroup(_, Some(deserializer))) => {
9651 Self::AttributeGroup(values, Some(deserializer))
9652 }
9653 _ => unreachable!(),
9654 };
9655 return Ok(ElementHandlerOutput::break_(event, allow_any));
9656 }
9657 match fallback.take() {
9658 None => (),
9659 Some(Self::AttributeGroup(_, Some(deserializer))) => {
9660 let data = deserializer.finish(reader)?;
9661 Self::store_attribute_group(&mut values, data)?;
9662 }
9663 Some(_) => unreachable!(),
9664 }
9665 Ok(match artifact {
9666 DeserializerArtifact::None => unreachable!(),
9667 DeserializerArtifact::Data(data) => {
9668 Self::store_attribute_group(&mut values, data)?;
9669 let data = Self::AttributeGroup(values, None).finish(reader)?;
9670 *self = Self::Done__(data);
9671 ElementHandlerOutput::Break { event, allow_any }
9672 }
9673 DeserializerArtifact::Deserializer(deserializer) => {
9674 *self = Self::AttributeGroup(values, Some(deserializer));
9675 ElementHandlerOutput::from_event_end(event, allow_any)
9676 }
9677 })
9678 }
9679 fn handle_any_attribute<'de, R>(
9680 &mut self,
9681 reader: &R,
9682 mut values: Option<super::AnyAttribute>,
9683 output: DeserializerOutput<'de, super::AnyAttribute>,
9684 fallback: &mut Option<Self>,
9685 ) -> Result<ElementHandlerOutput<'de>, Error>
9686 where
9687 R: DeserializeReader,
9688 {
9689 let DeserializerOutput {
9690 artifact,
9691 event,
9692 allow_any,
9693 } = output;
9694 if artifact.is_none() {
9695 *self = match fallback.take() {
9696 None => Self::Init__,
9697 Some(Self::AnyAttribute(_, Some(deserializer))) => {
9698 Self::AnyAttribute(values, Some(deserializer))
9699 }
9700 _ => unreachable!(),
9701 };
9702 return Ok(ElementHandlerOutput::break_(event, allow_any));
9703 }
9704 match fallback.take() {
9705 None => (),
9706 Some(Self::AnyAttribute(_, Some(deserializer))) => {
9707 let data = deserializer.finish(reader)?;
9708 Self::store_any_attribute(&mut values, data)?;
9709 }
9710 Some(_) => unreachable!(),
9711 }
9712 Ok(match artifact {
9713 DeserializerArtifact::None => unreachable!(),
9714 DeserializerArtifact::Data(data) => {
9715 Self::store_any_attribute(&mut values, data)?;
9716 let data = Self::AnyAttribute(values, None).finish(reader)?;
9717 *self = Self::Done__(data);
9718 ElementHandlerOutput::Break { event, allow_any }
9719 }
9720 DeserializerArtifact::Deserializer(deserializer) => {
9721 *self = Self::AnyAttribute(values, Some(deserializer));
9722 ElementHandlerOutput::from_event_end(event, allow_any)
9723 }
9724 })
9725 }
9726 }
9727 impl<'de> Deserializer<'de, super::AttributeGroupTypeContent>
9728 for AttributeGroupTypeContentDeserializer
9729 {
9730 fn init<R>(
9731 reader: &R,
9732 event: Event<'de>,
9733 ) -> DeserializerResult<'de, super::AttributeGroupTypeContent>
9734 where
9735 R: DeserializeReader,
9736 {
9737 let deserializer = Self::Init__;
9738 let mut output = deserializer.next(reader, event)?;
9739 output.artifact = match output.artifact {
9740 DeserializerArtifact::Deserializer(Self::Init__) => DeserializerArtifact::None,
9741 artifact => artifact,
9742 };
9743 Ok(output)
9744 }
9745 fn next<R>(
9746 mut self,
9747 reader: &R,
9748 event: Event<'de>,
9749 ) -> DeserializerResult<'de, super::AttributeGroupTypeContent>
9750 where
9751 R: DeserializeReader,
9752 {
9753 let mut event = event;
9754 let mut fallback = None;
9755 let (event, allow_any) = loop {
9756 let state = replace(&mut self, Self::Unknown__);
9757 event = match (state, event) {
9758 (Self::Annotation(values, Some(deserializer)), event) => {
9759 let output = deserializer.next(reader, event)?;
9760 match self.handle_annotation(reader, values, output, &mut fallback)? {
9761 ElementHandlerOutput::Break { event, allow_any } => {
9762 break (event, allow_any)
9763 }
9764 ElementHandlerOutput::Continue { event, .. } => event,
9765 }
9766 }
9767 (Self::Attribute(values, Some(deserializer)), event) => {
9768 let output = deserializer.next(reader, event)?;
9769 match self.handle_attribute(reader, values, output, &mut fallback)? {
9770 ElementHandlerOutput::Break { event, allow_any } => {
9771 break (event, allow_any)
9772 }
9773 ElementHandlerOutput::Continue { event, .. } => event,
9774 }
9775 }
9776 (Self::AttributeGroup(values, Some(deserializer)), event) => {
9777 let output = deserializer.next(reader, event)?;
9778 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
9779 ElementHandlerOutput::Break { event, allow_any } => {
9780 break (event, allow_any)
9781 }
9782 ElementHandlerOutput::Continue { event, .. } => event,
9783 }
9784 }
9785 (Self::AnyAttribute(values, Some(deserializer)), event) => {
9786 let output = deserializer.next(reader, event)?;
9787 match self.handle_any_attribute(reader, values, output, &mut fallback)? {
9788 ElementHandlerOutput::Break { event, allow_any } => {
9789 break (event, allow_any)
9790 }
9791 ElementHandlerOutput::Continue { event, .. } => event,
9792 }
9793 }
9794 (state, event @ Event::End(_)) => {
9795 return Ok(DeserializerOutput {
9796 artifact: DeserializerArtifact::Data(state.finish(reader)?),
9797 event: DeserializerEvent::Continue(event),
9798 allow_any: false,
9799 });
9800 }
9801 (Self::Init__, event) => {
9802 match self.find_suitable(reader, event, &mut fallback)? {
9803 ElementHandlerOutput::Break { event, allow_any } => {
9804 break (event, allow_any)
9805 }
9806 ElementHandlerOutput::Continue { event, .. } => event,
9807 }
9808 }
9809 (Self::Annotation(values, None), event) => {
9810 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
9811 reader, event,
9812 )?;
9813 match self.handle_annotation(reader, values, output, &mut fallback)? {
9814 ElementHandlerOutput::Break { event, allow_any } => {
9815 break (event, allow_any)
9816 }
9817 ElementHandlerOutput::Continue { event, .. } => event,
9818 }
9819 }
9820 (Self::Attribute(values, None), event) => {
9821 let output =
9822 <super::AttributeType as WithDeserializer>::Deserializer::init(
9823 reader, event,
9824 )?;
9825 match self.handle_attribute(reader, values, output, &mut fallback)? {
9826 ElementHandlerOutput::Break { event, allow_any } => {
9827 break (event, allow_any)
9828 }
9829 ElementHandlerOutput::Continue { event, .. } => event,
9830 }
9831 }
9832 (Self::AttributeGroup(values, None), event) => {
9833 let output =
9834 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
9835 reader, event,
9836 )?;
9837 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
9838 ElementHandlerOutput::Break { event, allow_any } => {
9839 break (event, allow_any)
9840 }
9841 ElementHandlerOutput::Continue { event, .. } => event,
9842 }
9843 }
9844 (Self::AnyAttribute(values, None), event) => {
9845 let output = <super::AnyAttribute as WithDeserializer>::Deserializer::init(
9846 reader, event,
9847 )?;
9848 match self.handle_any_attribute(reader, values, output, &mut fallback)? {
9849 ElementHandlerOutput::Break { event, allow_any } => {
9850 break (event, allow_any)
9851 }
9852 ElementHandlerOutput::Continue { event, .. } => event,
9853 }
9854 }
9855 (s @ Self::Done__(_), event) => {
9856 self = s;
9857 break (DeserializerEvent::Continue(event), false);
9858 }
9859 (Self::Unknown__, _) => unreachable!(),
9860 }
9861 };
9862 let artifact = match self {
9863 Self::Done__(data) => DeserializerArtifact::Data(data),
9864 deserializer => DeserializerArtifact::Deserializer(deserializer),
9865 };
9866 Ok(DeserializerOutput {
9867 artifact,
9868 event,
9869 allow_any,
9870 })
9871 }
9872 fn finish<R>(self, reader: &R) -> Result<super::AttributeGroupTypeContent, Error>
9873 where
9874 R: DeserializeReader,
9875 {
9876 match self {
9877 Self::Init__ => Err(ErrorKind::MissingContent.into()),
9878 Self::Annotation(mut values, deserializer) => {
9879 if let Some(deserializer) = deserializer {
9880 let value = deserializer.finish(reader)?;
9881 Self::store_annotation(&mut values, value)?;
9882 }
9883 Ok(super::AttributeGroupTypeContent::Annotation(
9884 values.ok_or_else(|| ErrorKind::MissingElement("annotation".into()))?,
9885 ))
9886 }
9887 Self::Attribute(mut values, deserializer) => {
9888 if let Some(deserializer) = deserializer {
9889 let value = deserializer.finish(reader)?;
9890 Self::store_attribute(&mut values, value)?;
9891 }
9892 Ok(super::AttributeGroupTypeContent::Attribute(
9893 values.ok_or_else(|| ErrorKind::MissingElement("attribute".into()))?,
9894 ))
9895 }
9896 Self::AttributeGroup(mut values, deserializer) => {
9897 if let Some(deserializer) = deserializer {
9898 let value = deserializer.finish(reader)?;
9899 Self::store_attribute_group(&mut values, value)?;
9900 }
9901 Ok(super::AttributeGroupTypeContent::AttributeGroup(
9902 values.ok_or_else(|| ErrorKind::MissingElement("attributeGroup".into()))?,
9903 ))
9904 }
9905 Self::AnyAttribute(mut values, deserializer) => {
9906 if let Some(deserializer) = deserializer {
9907 let value = deserializer.finish(reader)?;
9908 Self::store_any_attribute(&mut values, value)?;
9909 }
9910 Ok(super::AttributeGroupTypeContent::AnyAttribute(
9911 values.ok_or_else(|| ErrorKind::MissingElement("anyAttribute".into()))?,
9912 ))
9913 }
9914 Self::Done__(data) => Ok(data),
9915 Self::Unknown__ => unreachable!(),
9916 }
9917 }
9918 }
9919 #[derive(Debug)]
9920 pub struct ElementTypeDeserializer {
9921 id: Option<String>,
9922 name: Option<String>,
9923 ref_: Option<super::QName>,
9924 type_: Option<super::QName>,
9925 substitution_group: Option<super::ElementSubstitutionGroupType>,
9926 min_occurs: usize,
9927 max_occurs: super::MaxOccurs,
9928 default: Option<String>,
9929 fixed: Option<String>,
9930 nillable: Option<bool>,
9931 abstract_: bool,
9932 final_: Option<super::DerivationSetType>,
9933 block: Option<super::BlockSetType>,
9934 form: Option<super::FormChoiceType>,
9935 target_namespace: Option<String>,
9936 content: Vec<super::ElementTypeContent>,
9937 state: Box<ElementTypeDeserializerState>,
9938 }
9939 #[derive(Debug)]
9940 enum ElementTypeDeserializerState {
9941 Init__,
9942 Next__,
9943 Content__(<super::ElementTypeContent as WithDeserializer>::Deserializer),
9944 Unknown__,
9945 }
9946 impl ElementTypeDeserializer {
9947 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
9948 where
9949 R: DeserializeReader,
9950 {
9951 let mut id: Option<String> = None;
9952 let mut name: Option<String> = None;
9953 let mut ref_: Option<super::QName> = None;
9954 let mut type_: Option<super::QName> = None;
9955 let mut substitution_group: Option<super::ElementSubstitutionGroupType> = None;
9956 let mut min_occurs: Option<usize> = None;
9957 let mut max_occurs: Option<super::MaxOccurs> = None;
9958 let mut default: Option<String> = None;
9959 let mut fixed: Option<String> = None;
9960 let mut nillable: Option<bool> = None;
9961 let mut abstract_: Option<bool> = None;
9962 let mut final_: Option<super::DerivationSetType> = None;
9963 let mut block: Option<super::BlockSetType> = None;
9964 let mut form: Option<super::FormChoiceType> = None;
9965 let mut target_namespace: Option<String> = None;
9966 for attrib in filter_xmlns_attributes(bytes_start) {
9967 let attrib = attrib?;
9968 if matches!(
9969 reader.resolve_local_name(attrib.key, &super::NS_XS),
9970 Some(b"id")
9971 ) {
9972 reader.read_attrib(&mut id, b"id", &attrib.value)?;
9973 } else if matches!(
9974 reader.resolve_local_name(attrib.key, &super::NS_XS),
9975 Some(b"name")
9976 ) {
9977 reader.read_attrib(&mut name, b"name", &attrib.value)?;
9978 } else if matches!(
9979 reader.resolve_local_name(attrib.key, &super::NS_XS),
9980 Some(b"ref")
9981 ) {
9982 reader.read_attrib(&mut ref_, b"ref", &attrib.value)?;
9983 } else if matches!(
9984 reader.resolve_local_name(attrib.key, &super::NS_XS),
9985 Some(b"type")
9986 ) {
9987 reader.read_attrib(&mut type_, b"type", &attrib.value)?;
9988 } else if matches!(
9989 reader.resolve_local_name(attrib.key, &super::NS_XS),
9990 Some(b"substitutionGroup")
9991 ) {
9992 reader.read_attrib(
9993 &mut substitution_group,
9994 b"substitutionGroup",
9995 &attrib.value,
9996 )?;
9997 } else if matches!(
9998 reader.resolve_local_name(attrib.key, &super::NS_XS),
9999 Some(b"minOccurs")
10000 ) {
10001 reader.read_attrib(&mut min_occurs, b"minOccurs", &attrib.value)?;
10002 } else if matches!(
10003 reader.resolve_local_name(attrib.key, &super::NS_XS),
10004 Some(b"maxOccurs")
10005 ) {
10006 reader.read_attrib(&mut max_occurs, b"maxOccurs", &attrib.value)?;
10007 } else if matches!(
10008 reader.resolve_local_name(attrib.key, &super::NS_XS),
10009 Some(b"default")
10010 ) {
10011 reader.read_attrib(&mut default, b"default", &attrib.value)?;
10012 } else if matches!(
10013 reader.resolve_local_name(attrib.key, &super::NS_XS),
10014 Some(b"fixed")
10015 ) {
10016 reader.read_attrib(&mut fixed, b"fixed", &attrib.value)?;
10017 } else if matches!(
10018 reader.resolve_local_name(attrib.key, &super::NS_XS),
10019 Some(b"nillable")
10020 ) {
10021 reader.read_attrib(&mut nillable, b"nillable", &attrib.value)?;
10022 } else if matches!(
10023 reader.resolve_local_name(attrib.key, &super::NS_XS),
10024 Some(b"abstract")
10025 ) {
10026 reader.read_attrib(&mut abstract_, b"abstract", &attrib.value)?;
10027 } else if matches!(
10028 reader.resolve_local_name(attrib.key, &super::NS_XS),
10029 Some(b"final")
10030 ) {
10031 reader.read_attrib(&mut final_, b"final", &attrib.value)?;
10032 } else if matches!(
10033 reader.resolve_local_name(attrib.key, &super::NS_XS),
10034 Some(b"block")
10035 ) {
10036 reader.read_attrib(&mut block, b"block", &attrib.value)?;
10037 } else if matches!(
10038 reader.resolve_local_name(attrib.key, &super::NS_XS),
10039 Some(b"form")
10040 ) {
10041 reader.read_attrib(&mut form, b"form", &attrib.value)?;
10042 } else if matches!(
10043 reader.resolve_local_name(attrib.key, &super::NS_XS),
10044 Some(b"targetNamespace")
10045 ) {
10046 reader.read_attrib(&mut target_namespace, b"targetNamespace", &attrib.value)?;
10047 }
10048 }
10049 Ok(Self {
10050 id: id,
10051 name: name,
10052 ref_: ref_,
10053 type_: type_,
10054 substitution_group: substitution_group,
10055 min_occurs: min_occurs.unwrap_or_else(super::ElementType::default_min_occurs),
10056 max_occurs: max_occurs.unwrap_or_else(super::ElementType::default_max_occurs),
10057 default: default,
10058 fixed: fixed,
10059 nillable: nillable,
10060 abstract_: abstract_.unwrap_or_else(super::ElementType::default_abstract_),
10061 final_: final_,
10062 block: block,
10063 form: form,
10064 target_namespace: target_namespace,
10065 content: Vec::new(),
10066 state: Box::new(ElementTypeDeserializerState::Init__),
10067 })
10068 }
10069 fn finish_state<R>(
10070 &mut self,
10071 reader: &R,
10072 state: ElementTypeDeserializerState,
10073 ) -> Result<(), Error>
10074 where
10075 R: DeserializeReader,
10076 {
10077 if let ElementTypeDeserializerState::Content__(deserializer) = state {
10078 self.store_content(deserializer.finish(reader)?)?;
10079 }
10080 Ok(())
10081 }
10082 fn store_content(&mut self, value: super::ElementTypeContent) -> Result<(), Error> {
10083 self.content.push(value);
10084 Ok(())
10085 }
10086 fn handle_content<'de, R>(
10087 &mut self,
10088 reader: &R,
10089 output: DeserializerOutput<'de, super::ElementTypeContent>,
10090 fallback: &mut Option<ElementTypeDeserializerState>,
10091 ) -> Result<ElementHandlerOutput<'de>, Error>
10092 where
10093 R: DeserializeReader,
10094 {
10095 let DeserializerOutput {
10096 artifact,
10097 event,
10098 allow_any,
10099 } = output;
10100 if artifact.is_none() {
10101 *self.state = fallback
10102 .take()
10103 .unwrap_or(ElementTypeDeserializerState::Next__);
10104 return Ok(ElementHandlerOutput::break_(event, allow_any));
10105 }
10106 if let Some(fallback) = fallback.take() {
10107 self.finish_state(reader, fallback)?;
10108 }
10109 Ok(match artifact {
10110 DeserializerArtifact::None => unreachable!(),
10111 DeserializerArtifact::Data(data) => {
10112 self.store_content(data)?;
10113 *self.state = ElementTypeDeserializerState::Next__;
10114 ElementHandlerOutput::from_event(event, allow_any)
10115 }
10116 DeserializerArtifact::Deserializer(deserializer) => {
10117 let ret = ElementHandlerOutput::from_event(event, allow_any);
10118 match &ret {
10119 ElementHandlerOutput::Continue { .. } => {
10120 fallback.get_or_insert(ElementTypeDeserializerState::Content__(
10121 deserializer,
10122 ));
10123 *self.state = ElementTypeDeserializerState::Next__;
10124 }
10125 ElementHandlerOutput::Break { .. } => {
10126 *self.state = ElementTypeDeserializerState::Content__(deserializer);
10127 }
10128 }
10129 ret
10130 }
10131 })
10132 }
10133 }
10134 impl<'de> Deserializer<'de, super::ElementType> for ElementTypeDeserializer {
10135 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::ElementType>
10136 where
10137 R: DeserializeReader,
10138 {
10139 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
10140 }
10141 fn next<R>(
10142 mut self,
10143 reader: &R,
10144 event: Event<'de>,
10145 ) -> DeserializerResult<'de, super::ElementType>
10146 where
10147 R: DeserializeReader,
10148 {
10149 use ElementTypeDeserializerState as S;
10150 let mut event = event;
10151 let mut fallback = None;
10152 let (event, allow_any) = loop {
10153 let state = replace(&mut *self.state, S::Unknown__);
10154 event = match (state, event) {
10155 (S::Content__(deserializer), event) => {
10156 let output = deserializer.next(reader, event)?;
10157 match self.handle_content(reader, output, &mut fallback)? {
10158 ElementHandlerOutput::Break { event, allow_any } => {
10159 break (event, allow_any)
10160 }
10161 ElementHandlerOutput::Continue { event, .. } => event,
10162 }
10163 }
10164 (_, Event::End(_)) => {
10165 return Ok(DeserializerOutput {
10166 artifact: DeserializerArtifact::Data(self.finish(reader)?),
10167 event: DeserializerEvent::None,
10168 allow_any: false,
10169 });
10170 }
10171 (old_state @ (S::Init__ | S::Next__), event) => {
10172 let output =
10173 <super::ElementTypeContent as WithDeserializer>::Deserializer::init(
10174 reader, event,
10175 )?;
10176 match self.handle_content(reader, output, &mut fallback)? {
10177 ElementHandlerOutput::Break { event, allow_any } => {
10178 if matches!(&*self.state, S::Unknown__) {
10179 *self.state = old_state;
10180 }
10181 break (event, allow_any);
10182 }
10183 ElementHandlerOutput::Continue { event, .. } => event,
10184 }
10185 }
10186 (S::Unknown__, _) => unreachable!(),
10187 }
10188 };
10189 Ok(DeserializerOutput {
10190 artifact: DeserializerArtifact::Deserializer(self),
10191 event,
10192 allow_any,
10193 })
10194 }
10195 fn finish<R>(mut self, reader: &R) -> Result<super::ElementType, Error>
10196 where
10197 R: DeserializeReader,
10198 {
10199 let state = replace(&mut *self.state, ElementTypeDeserializerState::Unknown__);
10200 self.finish_state(reader, state)?;
10201 Ok(super::ElementType {
10202 id: self.id,
10203 name: self.name,
10204 ref_: self.ref_,
10205 type_: self.type_,
10206 substitution_group: self.substitution_group,
10207 min_occurs: self.min_occurs,
10208 max_occurs: self.max_occurs,
10209 default: self.default,
10210 fixed: self.fixed,
10211 nillable: self.nillable,
10212 abstract_: self.abstract_,
10213 final_: self.final_,
10214 block: self.block,
10215 form: self.form,
10216 target_namespace: self.target_namespace,
10217 content: self.content,
10218 })
10219 }
10220 }
10221 #[derive(Debug)]
10222 pub enum ElementTypeContentDeserializer {
10223 Init__,
10224 Annotation(
10225 Option<super::Annotation>,
10226 Option<<super::Annotation as WithDeserializer>::Deserializer>,
10227 ),
10228 SimpleType(
10229 Option<super::SimpleBaseType>,
10230 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
10231 ),
10232 ComplexType(
10233 Option<super::ComplexBaseType>,
10234 Option<<super::ComplexBaseType as WithDeserializer>::Deserializer>,
10235 ),
10236 Alternative(
10237 Option<super::AltType>,
10238 Option<<super::AltType as WithDeserializer>::Deserializer>,
10239 ),
10240 Unique(
10241 Option<super::KeybaseType>,
10242 Option<<super::KeybaseType as WithDeserializer>::Deserializer>,
10243 ),
10244 Key(
10245 Option<super::KeybaseType>,
10246 Option<<super::KeybaseType as WithDeserializer>::Deserializer>,
10247 ),
10248 Keyref(
10249 Option<super::Keyref>,
10250 Option<<super::Keyref as WithDeserializer>::Deserializer>,
10251 ),
10252 Done__(super::ElementTypeContent),
10253 Unknown__,
10254 }
10255 impl ElementTypeContentDeserializer {
10256 fn find_suitable<'de, R>(
10257 &mut self,
10258 reader: &R,
10259 event: Event<'de>,
10260 fallback: &mut Option<ElementTypeContentDeserializer>,
10261 ) -> Result<ElementHandlerOutput<'de>, Error>
10262 where
10263 R: DeserializeReader,
10264 {
10265 let (Event::Start(x) | Event::Empty(x)) = &event else {
10266 *self = Self::Init__;
10267 return Ok(ElementHandlerOutput::return_to_parent(event, false));
10268 };
10269 if matches!(
10270 reader.resolve_local_name(x.name(), &super::NS_XS),
10271 Some(b"annotation")
10272 ) {
10273 let output =
10274 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
10275 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
10276 }
10277 if matches!(
10278 reader.resolve_local_name(x.name(), &super::NS_XS),
10279 Some(b"simpleType")
10280 ) {
10281 let output =
10282 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(reader, event)?;
10283 return self.handle_simple_type(reader, Default::default(), output, &mut *fallback);
10284 }
10285 if matches!(
10286 reader.resolve_local_name(x.name(), &super::NS_XS),
10287 Some(b"complexType")
10288 ) {
10289 let output = <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
10290 reader, event,
10291 )?;
10292 return self.handle_complex_type(
10293 reader,
10294 Default::default(),
10295 output,
10296 &mut *fallback,
10297 );
10298 }
10299 if matches!(
10300 reader.resolve_local_name(x.name(), &super::NS_XS),
10301 Some(b"alternative")
10302 ) {
10303 let output =
10304 <super::AltType as WithDeserializer>::Deserializer::init(reader, event)?;
10305 return self.handle_alternative(reader, Default::default(), output, &mut *fallback);
10306 }
10307 if matches!(
10308 reader.resolve_local_name(x.name(), &super::NS_XS),
10309 Some(b"unique")
10310 ) {
10311 let output =
10312 <super::KeybaseType as WithDeserializer>::Deserializer::init(reader, event)?;
10313 return self.handle_unique(reader, Default::default(), output, &mut *fallback);
10314 }
10315 if matches!(
10316 reader.resolve_local_name(x.name(), &super::NS_XS),
10317 Some(b"key")
10318 ) {
10319 let output =
10320 <super::KeybaseType as WithDeserializer>::Deserializer::init(reader, event)?;
10321 return self.handle_key(reader, Default::default(), output, &mut *fallback);
10322 }
10323 if matches!(
10324 reader.resolve_local_name(x.name(), &super::NS_XS),
10325 Some(b"keyref")
10326 ) {
10327 let output =
10328 <super::Keyref as WithDeserializer>::Deserializer::init(reader, event)?;
10329 return self.handle_keyref(reader, Default::default(), output, &mut *fallback);
10330 }
10331 *self = Self::Init__;
10332 Ok(ElementHandlerOutput::return_to_parent(event, false))
10333 }
10334 fn store_annotation(
10335 values: &mut Option<super::Annotation>,
10336 value: super::Annotation,
10337 ) -> Result<(), Error> {
10338 if values.is_some() {
10339 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
10340 b"annotation",
10341 )))?;
10342 }
10343 *values = Some(value);
10344 Ok(())
10345 }
10346 fn store_simple_type(
10347 values: &mut Option<super::SimpleBaseType>,
10348 value: super::SimpleBaseType,
10349 ) -> Result<(), Error> {
10350 if values.is_some() {
10351 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
10352 b"simpleType",
10353 )))?;
10354 }
10355 *values = Some(value);
10356 Ok(())
10357 }
10358 fn store_complex_type(
10359 values: &mut Option<super::ComplexBaseType>,
10360 value: super::ComplexBaseType,
10361 ) -> Result<(), Error> {
10362 if values.is_some() {
10363 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
10364 b"complexType",
10365 )))?;
10366 }
10367 *values = Some(value);
10368 Ok(())
10369 }
10370 fn store_alternative(
10371 values: &mut Option<super::AltType>,
10372 value: super::AltType,
10373 ) -> Result<(), Error> {
10374 if values.is_some() {
10375 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
10376 b"alternative",
10377 )))?;
10378 }
10379 *values = Some(value);
10380 Ok(())
10381 }
10382 fn store_unique(
10383 values: &mut Option<super::KeybaseType>,
10384 value: super::KeybaseType,
10385 ) -> Result<(), Error> {
10386 if values.is_some() {
10387 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
10388 b"unique",
10389 )))?;
10390 }
10391 *values = Some(value);
10392 Ok(())
10393 }
10394 fn store_key(
10395 values: &mut Option<super::KeybaseType>,
10396 value: super::KeybaseType,
10397 ) -> Result<(), Error> {
10398 if values.is_some() {
10399 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"key")))?;
10400 }
10401 *values = Some(value);
10402 Ok(())
10403 }
10404 fn store_keyref(
10405 values: &mut Option<super::Keyref>,
10406 value: super::Keyref,
10407 ) -> Result<(), Error> {
10408 if values.is_some() {
10409 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
10410 b"keyref",
10411 )))?;
10412 }
10413 *values = Some(value);
10414 Ok(())
10415 }
10416 fn handle_annotation<'de, R>(
10417 &mut self,
10418 reader: &R,
10419 mut values: Option<super::Annotation>,
10420 output: DeserializerOutput<'de, super::Annotation>,
10421 fallback: &mut Option<Self>,
10422 ) -> Result<ElementHandlerOutput<'de>, Error>
10423 where
10424 R: DeserializeReader,
10425 {
10426 let DeserializerOutput {
10427 artifact,
10428 event,
10429 allow_any,
10430 } = output;
10431 if artifact.is_none() {
10432 *self = match fallback.take() {
10433 None => Self::Init__,
10434 Some(Self::Annotation(_, Some(deserializer))) => {
10435 Self::Annotation(values, Some(deserializer))
10436 }
10437 _ => unreachable!(),
10438 };
10439 return Ok(ElementHandlerOutput::break_(event, allow_any));
10440 }
10441 match fallback.take() {
10442 None => (),
10443 Some(Self::Annotation(_, Some(deserializer))) => {
10444 let data = deserializer.finish(reader)?;
10445 Self::store_annotation(&mut values, data)?;
10446 }
10447 Some(_) => unreachable!(),
10448 }
10449 Ok(match artifact {
10450 DeserializerArtifact::None => unreachable!(),
10451 DeserializerArtifact::Data(data) => {
10452 Self::store_annotation(&mut values, data)?;
10453 let data = Self::Annotation(values, None).finish(reader)?;
10454 *self = Self::Done__(data);
10455 ElementHandlerOutput::Break { event, allow_any }
10456 }
10457 DeserializerArtifact::Deserializer(deserializer) => {
10458 *self = Self::Annotation(values, Some(deserializer));
10459 ElementHandlerOutput::from_event_end(event, allow_any)
10460 }
10461 })
10462 }
10463 fn handle_simple_type<'de, R>(
10464 &mut self,
10465 reader: &R,
10466 mut values: Option<super::SimpleBaseType>,
10467 output: DeserializerOutput<'de, super::SimpleBaseType>,
10468 fallback: &mut Option<Self>,
10469 ) -> Result<ElementHandlerOutput<'de>, Error>
10470 where
10471 R: DeserializeReader,
10472 {
10473 let DeserializerOutput {
10474 artifact,
10475 event,
10476 allow_any,
10477 } = output;
10478 if artifact.is_none() {
10479 *self = match fallback.take() {
10480 None => Self::Init__,
10481 Some(Self::SimpleType(_, Some(deserializer))) => {
10482 Self::SimpleType(values, Some(deserializer))
10483 }
10484 _ => unreachable!(),
10485 };
10486 return Ok(ElementHandlerOutput::break_(event, allow_any));
10487 }
10488 match fallback.take() {
10489 None => (),
10490 Some(Self::SimpleType(_, Some(deserializer))) => {
10491 let data = deserializer.finish(reader)?;
10492 Self::store_simple_type(&mut values, data)?;
10493 }
10494 Some(_) => unreachable!(),
10495 }
10496 Ok(match artifact {
10497 DeserializerArtifact::None => unreachable!(),
10498 DeserializerArtifact::Data(data) => {
10499 Self::store_simple_type(&mut values, data)?;
10500 let data = Self::SimpleType(values, None).finish(reader)?;
10501 *self = Self::Done__(data);
10502 ElementHandlerOutput::Break { event, allow_any }
10503 }
10504 DeserializerArtifact::Deserializer(deserializer) => {
10505 *self = Self::SimpleType(values, Some(deserializer));
10506 ElementHandlerOutput::from_event_end(event, allow_any)
10507 }
10508 })
10509 }
10510 fn handle_complex_type<'de, R>(
10511 &mut self,
10512 reader: &R,
10513 mut values: Option<super::ComplexBaseType>,
10514 output: DeserializerOutput<'de, super::ComplexBaseType>,
10515 fallback: &mut Option<Self>,
10516 ) -> Result<ElementHandlerOutput<'de>, Error>
10517 where
10518 R: DeserializeReader,
10519 {
10520 let DeserializerOutput {
10521 artifact,
10522 event,
10523 allow_any,
10524 } = output;
10525 if artifact.is_none() {
10526 *self = match fallback.take() {
10527 None => Self::Init__,
10528 Some(Self::ComplexType(_, Some(deserializer))) => {
10529 Self::ComplexType(values, Some(deserializer))
10530 }
10531 _ => unreachable!(),
10532 };
10533 return Ok(ElementHandlerOutput::break_(event, allow_any));
10534 }
10535 match fallback.take() {
10536 None => (),
10537 Some(Self::ComplexType(_, Some(deserializer))) => {
10538 let data = deserializer.finish(reader)?;
10539 Self::store_complex_type(&mut values, data)?;
10540 }
10541 Some(_) => unreachable!(),
10542 }
10543 Ok(match artifact {
10544 DeserializerArtifact::None => unreachable!(),
10545 DeserializerArtifact::Data(data) => {
10546 Self::store_complex_type(&mut values, data)?;
10547 let data = Self::ComplexType(values, None).finish(reader)?;
10548 *self = Self::Done__(data);
10549 ElementHandlerOutput::Break { event, allow_any }
10550 }
10551 DeserializerArtifact::Deserializer(deserializer) => {
10552 *self = Self::ComplexType(values, Some(deserializer));
10553 ElementHandlerOutput::from_event_end(event, allow_any)
10554 }
10555 })
10556 }
10557 fn handle_alternative<'de, R>(
10558 &mut self,
10559 reader: &R,
10560 mut values: Option<super::AltType>,
10561 output: DeserializerOutput<'de, super::AltType>,
10562 fallback: &mut Option<Self>,
10563 ) -> Result<ElementHandlerOutput<'de>, Error>
10564 where
10565 R: DeserializeReader,
10566 {
10567 let DeserializerOutput {
10568 artifact,
10569 event,
10570 allow_any,
10571 } = output;
10572 if artifact.is_none() {
10573 *self = match fallback.take() {
10574 None => Self::Init__,
10575 Some(Self::Alternative(_, Some(deserializer))) => {
10576 Self::Alternative(values, Some(deserializer))
10577 }
10578 _ => unreachable!(),
10579 };
10580 return Ok(ElementHandlerOutput::break_(event, allow_any));
10581 }
10582 match fallback.take() {
10583 None => (),
10584 Some(Self::Alternative(_, Some(deserializer))) => {
10585 let data = deserializer.finish(reader)?;
10586 Self::store_alternative(&mut values, data)?;
10587 }
10588 Some(_) => unreachable!(),
10589 }
10590 Ok(match artifact {
10591 DeserializerArtifact::None => unreachable!(),
10592 DeserializerArtifact::Data(data) => {
10593 Self::store_alternative(&mut values, data)?;
10594 let data = Self::Alternative(values, None).finish(reader)?;
10595 *self = Self::Done__(data);
10596 ElementHandlerOutput::Break { event, allow_any }
10597 }
10598 DeserializerArtifact::Deserializer(deserializer) => {
10599 *self = Self::Alternative(values, Some(deserializer));
10600 ElementHandlerOutput::from_event_end(event, allow_any)
10601 }
10602 })
10603 }
10604 fn handle_unique<'de, R>(
10605 &mut self,
10606 reader: &R,
10607 mut values: Option<super::KeybaseType>,
10608 output: DeserializerOutput<'de, super::KeybaseType>,
10609 fallback: &mut Option<Self>,
10610 ) -> Result<ElementHandlerOutput<'de>, Error>
10611 where
10612 R: DeserializeReader,
10613 {
10614 let DeserializerOutput {
10615 artifact,
10616 event,
10617 allow_any,
10618 } = output;
10619 if artifact.is_none() {
10620 *self = match fallback.take() {
10621 None => Self::Init__,
10622 Some(Self::Unique(_, Some(deserializer))) => {
10623 Self::Unique(values, Some(deserializer))
10624 }
10625 _ => unreachable!(),
10626 };
10627 return Ok(ElementHandlerOutput::break_(event, allow_any));
10628 }
10629 match fallback.take() {
10630 None => (),
10631 Some(Self::Unique(_, Some(deserializer))) => {
10632 let data = deserializer.finish(reader)?;
10633 Self::store_unique(&mut values, data)?;
10634 }
10635 Some(_) => unreachable!(),
10636 }
10637 Ok(match artifact {
10638 DeserializerArtifact::None => unreachable!(),
10639 DeserializerArtifact::Data(data) => {
10640 Self::store_unique(&mut values, data)?;
10641 let data = Self::Unique(values, None).finish(reader)?;
10642 *self = Self::Done__(data);
10643 ElementHandlerOutput::Break { event, allow_any }
10644 }
10645 DeserializerArtifact::Deserializer(deserializer) => {
10646 *self = Self::Unique(values, Some(deserializer));
10647 ElementHandlerOutput::from_event_end(event, allow_any)
10648 }
10649 })
10650 }
10651 fn handle_key<'de, R>(
10652 &mut self,
10653 reader: &R,
10654 mut values: Option<super::KeybaseType>,
10655 output: DeserializerOutput<'de, super::KeybaseType>,
10656 fallback: &mut Option<Self>,
10657 ) -> Result<ElementHandlerOutput<'de>, Error>
10658 where
10659 R: DeserializeReader,
10660 {
10661 let DeserializerOutput {
10662 artifact,
10663 event,
10664 allow_any,
10665 } = output;
10666 if artifact.is_none() {
10667 *self = match fallback.take() {
10668 None => Self::Init__,
10669 Some(Self::Key(_, Some(deserializer))) => Self::Key(values, Some(deserializer)),
10670 _ => unreachable!(),
10671 };
10672 return Ok(ElementHandlerOutput::break_(event, allow_any));
10673 }
10674 match fallback.take() {
10675 None => (),
10676 Some(Self::Key(_, Some(deserializer))) => {
10677 let data = deserializer.finish(reader)?;
10678 Self::store_key(&mut values, data)?;
10679 }
10680 Some(_) => unreachable!(),
10681 }
10682 Ok(match artifact {
10683 DeserializerArtifact::None => unreachable!(),
10684 DeserializerArtifact::Data(data) => {
10685 Self::store_key(&mut values, data)?;
10686 let data = Self::Key(values, None).finish(reader)?;
10687 *self = Self::Done__(data);
10688 ElementHandlerOutput::Break { event, allow_any }
10689 }
10690 DeserializerArtifact::Deserializer(deserializer) => {
10691 *self = Self::Key(values, Some(deserializer));
10692 ElementHandlerOutput::from_event_end(event, allow_any)
10693 }
10694 })
10695 }
10696 fn handle_keyref<'de, R>(
10697 &mut self,
10698 reader: &R,
10699 mut values: Option<super::Keyref>,
10700 output: DeserializerOutput<'de, super::Keyref>,
10701 fallback: &mut Option<Self>,
10702 ) -> Result<ElementHandlerOutput<'de>, Error>
10703 where
10704 R: DeserializeReader,
10705 {
10706 let DeserializerOutput {
10707 artifact,
10708 event,
10709 allow_any,
10710 } = output;
10711 if artifact.is_none() {
10712 *self = match fallback.take() {
10713 None => Self::Init__,
10714 Some(Self::Keyref(_, Some(deserializer))) => {
10715 Self::Keyref(values, Some(deserializer))
10716 }
10717 _ => unreachable!(),
10718 };
10719 return Ok(ElementHandlerOutput::break_(event, allow_any));
10720 }
10721 match fallback.take() {
10722 None => (),
10723 Some(Self::Keyref(_, Some(deserializer))) => {
10724 let data = deserializer.finish(reader)?;
10725 Self::store_keyref(&mut values, data)?;
10726 }
10727 Some(_) => unreachable!(),
10728 }
10729 Ok(match artifact {
10730 DeserializerArtifact::None => unreachable!(),
10731 DeserializerArtifact::Data(data) => {
10732 Self::store_keyref(&mut values, data)?;
10733 let data = Self::Keyref(values, None).finish(reader)?;
10734 *self = Self::Done__(data);
10735 ElementHandlerOutput::Break { event, allow_any }
10736 }
10737 DeserializerArtifact::Deserializer(deserializer) => {
10738 *self = Self::Keyref(values, Some(deserializer));
10739 ElementHandlerOutput::from_event_end(event, allow_any)
10740 }
10741 })
10742 }
10743 }
10744 impl<'de> Deserializer<'de, super::ElementTypeContent> for ElementTypeContentDeserializer {
10745 fn init<R>(
10746 reader: &R,
10747 event: Event<'de>,
10748 ) -> DeserializerResult<'de, super::ElementTypeContent>
10749 where
10750 R: DeserializeReader,
10751 {
10752 let deserializer = Self::Init__;
10753 let mut output = deserializer.next(reader, event)?;
10754 output.artifact = match output.artifact {
10755 DeserializerArtifact::Deserializer(Self::Init__) => DeserializerArtifact::None,
10756 artifact => artifact,
10757 };
10758 Ok(output)
10759 }
10760 fn next<R>(
10761 mut self,
10762 reader: &R,
10763 event: Event<'de>,
10764 ) -> DeserializerResult<'de, super::ElementTypeContent>
10765 where
10766 R: DeserializeReader,
10767 {
10768 let mut event = event;
10769 let mut fallback = None;
10770 let (event, allow_any) = loop {
10771 let state = replace(&mut self, Self::Unknown__);
10772 event = match (state, event) {
10773 (Self::Annotation(values, Some(deserializer)), event) => {
10774 let output = deserializer.next(reader, event)?;
10775 match self.handle_annotation(reader, values, output, &mut fallback)? {
10776 ElementHandlerOutput::Break { event, allow_any } => {
10777 break (event, allow_any)
10778 }
10779 ElementHandlerOutput::Continue { event, .. } => event,
10780 }
10781 }
10782 (Self::SimpleType(values, Some(deserializer)), event) => {
10783 let output = deserializer.next(reader, event)?;
10784 match self.handle_simple_type(reader, values, output, &mut fallback)? {
10785 ElementHandlerOutput::Break { event, allow_any } => {
10786 break (event, allow_any)
10787 }
10788 ElementHandlerOutput::Continue { event, .. } => event,
10789 }
10790 }
10791 (Self::ComplexType(values, Some(deserializer)), event) => {
10792 let output = deserializer.next(reader, event)?;
10793 match self.handle_complex_type(reader, values, output, &mut fallback)? {
10794 ElementHandlerOutput::Break { event, allow_any } => {
10795 break (event, allow_any)
10796 }
10797 ElementHandlerOutput::Continue { event, .. } => event,
10798 }
10799 }
10800 (Self::Alternative(values, Some(deserializer)), event) => {
10801 let output = deserializer.next(reader, event)?;
10802 match self.handle_alternative(reader, values, output, &mut fallback)? {
10803 ElementHandlerOutput::Break { event, allow_any } => {
10804 break (event, allow_any)
10805 }
10806 ElementHandlerOutput::Continue { event, .. } => event,
10807 }
10808 }
10809 (Self::Unique(values, Some(deserializer)), event) => {
10810 let output = deserializer.next(reader, event)?;
10811 match self.handle_unique(reader, values, output, &mut fallback)? {
10812 ElementHandlerOutput::Break { event, allow_any } => {
10813 break (event, allow_any)
10814 }
10815 ElementHandlerOutput::Continue { event, .. } => event,
10816 }
10817 }
10818 (Self::Key(values, Some(deserializer)), event) => {
10819 let output = deserializer.next(reader, event)?;
10820 match self.handle_key(reader, values, output, &mut fallback)? {
10821 ElementHandlerOutput::Break { event, allow_any } => {
10822 break (event, allow_any)
10823 }
10824 ElementHandlerOutput::Continue { event, .. } => event,
10825 }
10826 }
10827 (Self::Keyref(values, Some(deserializer)), event) => {
10828 let output = deserializer.next(reader, event)?;
10829 match self.handle_keyref(reader, values, output, &mut fallback)? {
10830 ElementHandlerOutput::Break { event, allow_any } => {
10831 break (event, allow_any)
10832 }
10833 ElementHandlerOutput::Continue { event, .. } => event,
10834 }
10835 }
10836 (state, event @ Event::End(_)) => {
10837 return Ok(DeserializerOutput {
10838 artifact: DeserializerArtifact::Data(state.finish(reader)?),
10839 event: DeserializerEvent::Continue(event),
10840 allow_any: false,
10841 });
10842 }
10843 (Self::Init__, event) => {
10844 match self.find_suitable(reader, event, &mut fallback)? {
10845 ElementHandlerOutput::Break { event, allow_any } => {
10846 break (event, allow_any)
10847 }
10848 ElementHandlerOutput::Continue { event, .. } => event,
10849 }
10850 }
10851 (Self::Annotation(values, None), event) => {
10852 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
10853 reader, event,
10854 )?;
10855 match self.handle_annotation(reader, values, output, &mut fallback)? {
10856 ElementHandlerOutput::Break { event, allow_any } => {
10857 break (event, allow_any)
10858 }
10859 ElementHandlerOutput::Continue { event, .. } => event,
10860 }
10861 }
10862 (Self::SimpleType(values, None), event) => {
10863 let output =
10864 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
10865 reader, event,
10866 )?;
10867 match self.handle_simple_type(reader, values, output, &mut fallback)? {
10868 ElementHandlerOutput::Break { event, allow_any } => {
10869 break (event, allow_any)
10870 }
10871 ElementHandlerOutput::Continue { event, .. } => event,
10872 }
10873 }
10874 (Self::ComplexType(values, None), event) => {
10875 let output =
10876 <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
10877 reader, event,
10878 )?;
10879 match self.handle_complex_type(reader, values, output, &mut fallback)? {
10880 ElementHandlerOutput::Break { event, allow_any } => {
10881 break (event, allow_any)
10882 }
10883 ElementHandlerOutput::Continue { event, .. } => event,
10884 }
10885 }
10886 (Self::Alternative(values, None), event) => {
10887 let output = <super::AltType as WithDeserializer>::Deserializer::init(
10888 reader, event,
10889 )?;
10890 match self.handle_alternative(reader, values, output, &mut fallback)? {
10891 ElementHandlerOutput::Break { event, allow_any } => {
10892 break (event, allow_any)
10893 }
10894 ElementHandlerOutput::Continue { event, .. } => event,
10895 }
10896 }
10897 (Self::Unique(values, None), event) => {
10898 let output = <super::KeybaseType as WithDeserializer>::Deserializer::init(
10899 reader, event,
10900 )?;
10901 match self.handle_unique(reader, values, output, &mut fallback)? {
10902 ElementHandlerOutput::Break { event, allow_any } => {
10903 break (event, allow_any)
10904 }
10905 ElementHandlerOutput::Continue { event, .. } => event,
10906 }
10907 }
10908 (Self::Key(values, None), event) => {
10909 let output = <super::KeybaseType as WithDeserializer>::Deserializer::init(
10910 reader, event,
10911 )?;
10912 match self.handle_key(reader, values, output, &mut fallback)? {
10913 ElementHandlerOutput::Break { event, allow_any } => {
10914 break (event, allow_any)
10915 }
10916 ElementHandlerOutput::Continue { event, .. } => event,
10917 }
10918 }
10919 (Self::Keyref(values, None), event) => {
10920 let output =
10921 <super::Keyref as WithDeserializer>::Deserializer::init(reader, event)?;
10922 match self.handle_keyref(reader, values, output, &mut fallback)? {
10923 ElementHandlerOutput::Break { event, allow_any } => {
10924 break (event, allow_any)
10925 }
10926 ElementHandlerOutput::Continue { event, .. } => event,
10927 }
10928 }
10929 (s @ Self::Done__(_), event) => {
10930 self = s;
10931 break (DeserializerEvent::Continue(event), false);
10932 }
10933 (Self::Unknown__, _) => unreachable!(),
10934 }
10935 };
10936 let artifact = match self {
10937 Self::Done__(data) => DeserializerArtifact::Data(data),
10938 deserializer => DeserializerArtifact::Deserializer(deserializer),
10939 };
10940 Ok(DeserializerOutput {
10941 artifact,
10942 event,
10943 allow_any,
10944 })
10945 }
10946 fn finish<R>(self, reader: &R) -> Result<super::ElementTypeContent, Error>
10947 where
10948 R: DeserializeReader,
10949 {
10950 match self {
10951 Self::Init__ => Err(ErrorKind::MissingContent.into()),
10952 Self::Annotation(mut values, deserializer) => {
10953 if let Some(deserializer) = deserializer {
10954 let value = deserializer.finish(reader)?;
10955 Self::store_annotation(&mut values, value)?;
10956 }
10957 Ok(super::ElementTypeContent::Annotation(values.ok_or_else(
10958 || ErrorKind::MissingElement("annotation".into()),
10959 )?))
10960 }
10961 Self::SimpleType(mut values, deserializer) => {
10962 if let Some(deserializer) = deserializer {
10963 let value = deserializer.finish(reader)?;
10964 Self::store_simple_type(&mut values, value)?;
10965 }
10966 Ok(super::ElementTypeContent::SimpleType(values.ok_or_else(
10967 || ErrorKind::MissingElement("simpleType".into()),
10968 )?))
10969 }
10970 Self::ComplexType(mut values, deserializer) => {
10971 if let Some(deserializer) = deserializer {
10972 let value = deserializer.finish(reader)?;
10973 Self::store_complex_type(&mut values, value)?;
10974 }
10975 Ok(super::ElementTypeContent::ComplexType(values.ok_or_else(
10976 || ErrorKind::MissingElement("complexType".into()),
10977 )?))
10978 }
10979 Self::Alternative(mut values, deserializer) => {
10980 if let Some(deserializer) = deserializer {
10981 let value = deserializer.finish(reader)?;
10982 Self::store_alternative(&mut values, value)?;
10983 }
10984 Ok(super::ElementTypeContent::Alternative(values.ok_or_else(
10985 || ErrorKind::MissingElement("alternative".into()),
10986 )?))
10987 }
10988 Self::Unique(mut values, deserializer) => {
10989 if let Some(deserializer) = deserializer {
10990 let value = deserializer.finish(reader)?;
10991 Self::store_unique(&mut values, value)?;
10992 }
10993 Ok(super::ElementTypeContent::Unique(values.ok_or_else(
10994 || ErrorKind::MissingElement("unique".into()),
10995 )?))
10996 }
10997 Self::Key(mut values, deserializer) => {
10998 if let Some(deserializer) = deserializer {
10999 let value = deserializer.finish(reader)?;
11000 Self::store_key(&mut values, value)?;
11001 }
11002 Ok(super::ElementTypeContent::Key(
11003 values.ok_or_else(|| ErrorKind::MissingElement("key".into()))?,
11004 ))
11005 }
11006 Self::Keyref(mut values, deserializer) => {
11007 if let Some(deserializer) = deserializer {
11008 let value = deserializer.finish(reader)?;
11009 Self::store_keyref(&mut values, value)?;
11010 }
11011 Ok(super::ElementTypeContent::Keyref(values.ok_or_else(
11012 || ErrorKind::MissingElement("keyref".into()),
11013 )?))
11014 }
11015 Self::Done__(data) => Ok(data),
11016 Self::Unknown__ => unreachable!(),
11017 }
11018 }
11019 }
11020 #[derive(Debug)]
11021 pub struct AttributeTypeDeserializer {
11022 id: Option<String>,
11023 name: Option<String>,
11024 ref_: Option<super::QName>,
11025 type_: Option<super::QName>,
11026 use_: super::AttributeUseType,
11027 default: Option<String>,
11028 fixed: Option<String>,
11029 form: Option<super::FormChoiceType>,
11030 target_namespace: Option<String>,
11031 inheritable: Option<bool>,
11032 annotation: Option<super::Annotation>,
11033 simple_type: Option<super::SimpleBaseType>,
11034 state: Box<AttributeTypeDeserializerState>,
11035 }
11036 #[derive(Debug)]
11037 enum AttributeTypeDeserializerState {
11038 Init__,
11039 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
11040 SimpleType(Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>),
11041 Done__,
11042 Unknown__,
11043 }
11044 impl AttributeTypeDeserializer {
11045 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
11046 where
11047 R: DeserializeReader,
11048 {
11049 let mut id: Option<String> = None;
11050 let mut name: Option<String> = None;
11051 let mut ref_: Option<super::QName> = None;
11052 let mut type_: Option<super::QName> = None;
11053 let mut use_: Option<super::AttributeUseType> = None;
11054 let mut default: Option<String> = None;
11055 let mut fixed: Option<String> = None;
11056 let mut form: Option<super::FormChoiceType> = None;
11057 let mut target_namespace: Option<String> = None;
11058 let mut inheritable: Option<bool> = None;
11059 for attrib in filter_xmlns_attributes(bytes_start) {
11060 let attrib = attrib?;
11061 if matches!(
11062 reader.resolve_local_name(attrib.key, &super::NS_XS),
11063 Some(b"id")
11064 ) {
11065 reader.read_attrib(&mut id, b"id", &attrib.value)?;
11066 } else if matches!(
11067 reader.resolve_local_name(attrib.key, &super::NS_XS),
11068 Some(b"name")
11069 ) {
11070 reader.read_attrib(&mut name, b"name", &attrib.value)?;
11071 } else if matches!(
11072 reader.resolve_local_name(attrib.key, &super::NS_XS),
11073 Some(b"ref")
11074 ) {
11075 reader.read_attrib(&mut ref_, b"ref", &attrib.value)?;
11076 } else if matches!(
11077 reader.resolve_local_name(attrib.key, &super::NS_XS),
11078 Some(b"type")
11079 ) {
11080 reader.read_attrib(&mut type_, b"type", &attrib.value)?;
11081 } else if matches!(
11082 reader.resolve_local_name(attrib.key, &super::NS_XS),
11083 Some(b"use")
11084 ) {
11085 reader.read_attrib(&mut use_, b"use", &attrib.value)?;
11086 } else if matches!(
11087 reader.resolve_local_name(attrib.key, &super::NS_XS),
11088 Some(b"default")
11089 ) {
11090 reader.read_attrib(&mut default, b"default", &attrib.value)?;
11091 } else if matches!(
11092 reader.resolve_local_name(attrib.key, &super::NS_XS),
11093 Some(b"fixed")
11094 ) {
11095 reader.read_attrib(&mut fixed, b"fixed", &attrib.value)?;
11096 } else if matches!(
11097 reader.resolve_local_name(attrib.key, &super::NS_XS),
11098 Some(b"form")
11099 ) {
11100 reader.read_attrib(&mut form, b"form", &attrib.value)?;
11101 } else if matches!(
11102 reader.resolve_local_name(attrib.key, &super::NS_XS),
11103 Some(b"targetNamespace")
11104 ) {
11105 reader.read_attrib(&mut target_namespace, b"targetNamespace", &attrib.value)?;
11106 } else if matches!(
11107 reader.resolve_local_name(attrib.key, &super::NS_XS),
11108 Some(b"inheritable")
11109 ) {
11110 reader.read_attrib(&mut inheritable, b"inheritable", &attrib.value)?;
11111 }
11112 }
11113 Ok(Self {
11114 id: id,
11115 name: name,
11116 ref_: ref_,
11117 type_: type_,
11118 use_: use_.unwrap_or_else(super::AttributeType::default_use_),
11119 default: default,
11120 fixed: fixed,
11121 form: form,
11122 target_namespace: target_namespace,
11123 inheritable: inheritable,
11124 annotation: None,
11125 simple_type: None,
11126 state: Box::new(AttributeTypeDeserializerState::Init__),
11127 })
11128 }
11129 fn finish_state<R>(
11130 &mut self,
11131 reader: &R,
11132 state: AttributeTypeDeserializerState,
11133 ) -> Result<(), Error>
11134 where
11135 R: DeserializeReader,
11136 {
11137 use AttributeTypeDeserializerState as S;
11138 match state {
11139 S::Annotation(Some(deserializer)) => {
11140 self.store_annotation(deserializer.finish(reader)?)?
11141 }
11142 S::SimpleType(Some(deserializer)) => {
11143 self.store_simple_type(deserializer.finish(reader)?)?
11144 }
11145 _ => (),
11146 }
11147 Ok(())
11148 }
11149 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
11150 if self.annotation.is_some() {
11151 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11152 b"annotation",
11153 )))?;
11154 }
11155 self.annotation = Some(value);
11156 Ok(())
11157 }
11158 fn store_simple_type(&mut self, value: super::SimpleBaseType) -> Result<(), Error> {
11159 if self.simple_type.is_some() {
11160 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11161 b"simpleType",
11162 )))?;
11163 }
11164 self.simple_type = Some(value);
11165 Ok(())
11166 }
11167 fn handle_annotation<'de, R>(
11168 &mut self,
11169 reader: &R,
11170 output: DeserializerOutput<'de, super::Annotation>,
11171 fallback: &mut Option<AttributeTypeDeserializerState>,
11172 ) -> Result<ElementHandlerOutput<'de>, Error>
11173 where
11174 R: DeserializeReader,
11175 {
11176 let DeserializerOutput {
11177 artifact,
11178 event,
11179 allow_any,
11180 } = output;
11181 if artifact.is_none() {
11182 fallback.get_or_insert(AttributeTypeDeserializerState::Annotation(None));
11183 *self.state = AttributeTypeDeserializerState::SimpleType(None);
11184 return Ok(ElementHandlerOutput::from_event(event, allow_any));
11185 }
11186 if let Some(fallback) = fallback.take() {
11187 self.finish_state(reader, fallback)?;
11188 }
11189 Ok(match artifact {
11190 DeserializerArtifact::None => unreachable!(),
11191 DeserializerArtifact::Data(data) => {
11192 self.store_annotation(data)?;
11193 *self.state = AttributeTypeDeserializerState::SimpleType(None);
11194 ElementHandlerOutput::from_event(event, allow_any)
11195 }
11196 DeserializerArtifact::Deserializer(deserializer) => {
11197 let ret = ElementHandlerOutput::from_event(event, allow_any);
11198 match &ret {
11199 ElementHandlerOutput::Continue { .. } => {
11200 fallback.get_or_insert(AttributeTypeDeserializerState::Annotation(
11201 Some(deserializer),
11202 ));
11203 *self.state = AttributeTypeDeserializerState::SimpleType(None);
11204 }
11205 ElementHandlerOutput::Break { .. } => {
11206 *self.state =
11207 AttributeTypeDeserializerState::Annotation(Some(deserializer));
11208 }
11209 }
11210 ret
11211 }
11212 })
11213 }
11214 fn handle_simple_type<'de, R>(
11215 &mut self,
11216 reader: &R,
11217 output: DeserializerOutput<'de, super::SimpleBaseType>,
11218 fallback: &mut Option<AttributeTypeDeserializerState>,
11219 ) -> Result<ElementHandlerOutput<'de>, Error>
11220 where
11221 R: DeserializeReader,
11222 {
11223 let DeserializerOutput {
11224 artifact,
11225 event,
11226 allow_any,
11227 } = output;
11228 if artifact.is_none() {
11229 fallback.get_or_insert(AttributeTypeDeserializerState::SimpleType(None));
11230 *self.state = AttributeTypeDeserializerState::Done__;
11231 return Ok(ElementHandlerOutput::from_event(event, allow_any));
11232 }
11233 if let Some(fallback) = fallback.take() {
11234 self.finish_state(reader, fallback)?;
11235 }
11236 Ok(match artifact {
11237 DeserializerArtifact::None => unreachable!(),
11238 DeserializerArtifact::Data(data) => {
11239 self.store_simple_type(data)?;
11240 *self.state = AttributeTypeDeserializerState::Done__;
11241 ElementHandlerOutput::from_event(event, allow_any)
11242 }
11243 DeserializerArtifact::Deserializer(deserializer) => {
11244 let ret = ElementHandlerOutput::from_event(event, allow_any);
11245 match &ret {
11246 ElementHandlerOutput::Continue { .. } => {
11247 fallback.get_or_insert(AttributeTypeDeserializerState::SimpleType(
11248 Some(deserializer),
11249 ));
11250 *self.state = AttributeTypeDeserializerState::Done__;
11251 }
11252 ElementHandlerOutput::Break { .. } => {
11253 *self.state =
11254 AttributeTypeDeserializerState::SimpleType(Some(deserializer));
11255 }
11256 }
11257 ret
11258 }
11259 })
11260 }
11261 }
11262 impl<'de> Deserializer<'de, super::AttributeType> for AttributeTypeDeserializer {
11263 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::AttributeType>
11264 where
11265 R: DeserializeReader,
11266 {
11267 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
11268 }
11269 fn next<R>(
11270 mut self,
11271 reader: &R,
11272 event: Event<'de>,
11273 ) -> DeserializerResult<'de, super::AttributeType>
11274 where
11275 R: DeserializeReader,
11276 {
11277 use AttributeTypeDeserializerState as S;
11278 let mut event = event;
11279 let mut fallback = None;
11280 let mut allow_any_element = false;
11281 let (event, allow_any) = loop {
11282 let state = replace(&mut *self.state, S::Unknown__);
11283 event = match (state, event) {
11284 (S::Annotation(Some(deserializer)), event) => {
11285 let output = deserializer.next(reader, event)?;
11286 match self.handle_annotation(reader, output, &mut fallback)? {
11287 ElementHandlerOutput::Continue { event, allow_any } => {
11288 allow_any_element = allow_any_element || allow_any;
11289 event
11290 }
11291 ElementHandlerOutput::Break { event, allow_any } => {
11292 break (event, allow_any)
11293 }
11294 }
11295 }
11296 (S::SimpleType(Some(deserializer)), event) => {
11297 let output = deserializer.next(reader, event)?;
11298 match self.handle_simple_type(reader, output, &mut fallback)? {
11299 ElementHandlerOutput::Continue { event, allow_any } => {
11300 allow_any_element = allow_any_element || allow_any;
11301 event
11302 }
11303 ElementHandlerOutput::Break { event, allow_any } => {
11304 break (event, allow_any)
11305 }
11306 }
11307 }
11308 (_, Event::End(_)) => {
11309 if let Some(fallback) = fallback.take() {
11310 self.finish_state(reader, fallback)?;
11311 }
11312 return Ok(DeserializerOutput {
11313 artifact: DeserializerArtifact::Data(self.finish(reader)?),
11314 event: DeserializerEvent::None,
11315 allow_any: false,
11316 });
11317 }
11318 (S::Init__, event) => {
11319 fallback.get_or_insert(S::Init__);
11320 *self.state = AttributeTypeDeserializerState::Annotation(None);
11321 event
11322 }
11323 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
11324 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
11325 let output =
11326 <super::Annotation as WithDeserializer>::Deserializer::init(
11327 reader, event,
11328 )?;
11329 match self.handle_annotation(reader, output, &mut fallback)? {
11330 ElementHandlerOutput::Continue { event, allow_any } => {
11331 allow_any_element = allow_any_element || allow_any;
11332 event
11333 }
11334 ElementHandlerOutput::Break { event, allow_any } => {
11335 break (event, allow_any)
11336 }
11337 }
11338 } else {
11339 *self.state = S::SimpleType(None);
11340 allow_any_element = true;
11341 fallback.get_or_insert(S::Annotation(None));
11342 event
11343 }
11344 }
11345 (S::SimpleType(None), event @ (Event::Start(_) | Event::Empty(_))) => {
11346 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"simpleType") {
11347 let output =
11348 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
11349 reader, event,
11350 )?;
11351 match self.handle_simple_type(reader, output, &mut fallback)? {
11352 ElementHandlerOutput::Continue { event, allow_any } => {
11353 allow_any_element = allow_any_element || allow_any;
11354 event
11355 }
11356 ElementHandlerOutput::Break { event, allow_any } => {
11357 break (event, allow_any)
11358 }
11359 }
11360 } else {
11361 *self.state = S::Done__;
11362 allow_any_element = true;
11363 fallback.get_or_insert(S::SimpleType(None));
11364 event
11365 }
11366 }
11367 (S::Done__, event) => {
11368 fallback.get_or_insert(S::Done__);
11369 break (DeserializerEvent::Continue(event), allow_any_element);
11370 }
11371 (S::Unknown__, _) => unreachable!(),
11372 (state, event) => {
11373 *self.state = state;
11374 break (DeserializerEvent::Break(event), false);
11375 }
11376 }
11377 };
11378 if let Some(fallback) = fallback {
11379 *self.state = fallback;
11380 }
11381 Ok(DeserializerOutput {
11382 artifact: DeserializerArtifact::Deserializer(self),
11383 event,
11384 allow_any,
11385 })
11386 }
11387 fn finish<R>(mut self, reader: &R) -> Result<super::AttributeType, Error>
11388 where
11389 R: DeserializeReader,
11390 {
11391 let state = replace(&mut *self.state, AttributeTypeDeserializerState::Unknown__);
11392 self.finish_state(reader, state)?;
11393 Ok(super::AttributeType {
11394 id: self.id,
11395 name: self.name,
11396 ref_: self.ref_,
11397 type_: self.type_,
11398 use_: self.use_,
11399 default: self.default,
11400 fixed: self.fixed,
11401 form: self.form,
11402 target_namespace: self.target_namespace,
11403 inheritable: self.inheritable,
11404 annotation: self.annotation,
11405 simple_type: self.simple_type,
11406 })
11407 }
11408 }
11409 #[derive(Debug)]
11410 pub struct NotationDeserializer {
11411 id: Option<String>,
11412 name: String,
11413 public: Option<String>,
11414 system: Option<String>,
11415 annotation: Option<super::Annotation>,
11416 state: Box<NotationDeserializerState>,
11417 }
11418 #[derive(Debug)]
11419 enum NotationDeserializerState {
11420 Init__,
11421 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
11422 Done__,
11423 Unknown__,
11424 }
11425 impl NotationDeserializer {
11426 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
11427 where
11428 R: DeserializeReader,
11429 {
11430 let mut id: Option<String> = None;
11431 let mut name: Option<String> = None;
11432 let mut public: Option<String> = None;
11433 let mut system: Option<String> = None;
11434 for attrib in filter_xmlns_attributes(bytes_start) {
11435 let attrib = attrib?;
11436 if matches!(
11437 reader.resolve_local_name(attrib.key, &super::NS_XS),
11438 Some(b"id")
11439 ) {
11440 reader.read_attrib(&mut id, b"id", &attrib.value)?;
11441 } else if matches!(
11442 reader.resolve_local_name(attrib.key, &super::NS_XS),
11443 Some(b"name")
11444 ) {
11445 reader.read_attrib(&mut name, b"name", &attrib.value)?;
11446 } else if matches!(
11447 reader.resolve_local_name(attrib.key, &super::NS_XS),
11448 Some(b"public")
11449 ) {
11450 reader.read_attrib(&mut public, b"public", &attrib.value)?;
11451 } else if matches!(
11452 reader.resolve_local_name(attrib.key, &super::NS_XS),
11453 Some(b"system")
11454 ) {
11455 reader.read_attrib(&mut system, b"system", &attrib.value)?;
11456 }
11457 }
11458 Ok(Self {
11459 id: id,
11460 name: name
11461 .ok_or_else(|| reader.map_error(ErrorKind::MissingAttribute("name".into())))?,
11462 public: public,
11463 system: system,
11464 annotation: None,
11465 state: Box::new(NotationDeserializerState::Init__),
11466 })
11467 }
11468 fn finish_state<R>(
11469 &mut self,
11470 reader: &R,
11471 state: NotationDeserializerState,
11472 ) -> Result<(), Error>
11473 where
11474 R: DeserializeReader,
11475 {
11476 use NotationDeserializerState as S;
11477 match state {
11478 S::Annotation(Some(deserializer)) => {
11479 self.store_annotation(deserializer.finish(reader)?)?
11480 }
11481 _ => (),
11482 }
11483 Ok(())
11484 }
11485 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
11486 if self.annotation.is_some() {
11487 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11488 b"annotation",
11489 )))?;
11490 }
11491 self.annotation = Some(value);
11492 Ok(())
11493 }
11494 fn handle_annotation<'de, R>(
11495 &mut self,
11496 reader: &R,
11497 output: DeserializerOutput<'de, super::Annotation>,
11498 fallback: &mut Option<NotationDeserializerState>,
11499 ) -> Result<ElementHandlerOutput<'de>, Error>
11500 where
11501 R: DeserializeReader,
11502 {
11503 let DeserializerOutput {
11504 artifact,
11505 event,
11506 allow_any,
11507 } = output;
11508 if artifact.is_none() {
11509 fallback.get_or_insert(NotationDeserializerState::Annotation(None));
11510 *self.state = NotationDeserializerState::Done__;
11511 return Ok(ElementHandlerOutput::from_event(event, allow_any));
11512 }
11513 if let Some(fallback) = fallback.take() {
11514 self.finish_state(reader, fallback)?;
11515 }
11516 Ok(match artifact {
11517 DeserializerArtifact::None => unreachable!(),
11518 DeserializerArtifact::Data(data) => {
11519 self.store_annotation(data)?;
11520 *self.state = NotationDeserializerState::Done__;
11521 ElementHandlerOutput::from_event(event, allow_any)
11522 }
11523 DeserializerArtifact::Deserializer(deserializer) => {
11524 let ret = ElementHandlerOutput::from_event(event, allow_any);
11525 match &ret {
11526 ElementHandlerOutput::Continue { .. } => {
11527 fallback.get_or_insert(NotationDeserializerState::Annotation(Some(
11528 deserializer,
11529 )));
11530 *self.state = NotationDeserializerState::Done__;
11531 }
11532 ElementHandlerOutput::Break { .. } => {
11533 *self.state = NotationDeserializerState::Annotation(Some(deserializer));
11534 }
11535 }
11536 ret
11537 }
11538 })
11539 }
11540 }
11541 impl<'de> Deserializer<'de, super::Notation> for NotationDeserializer {
11542 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Notation>
11543 where
11544 R: DeserializeReader,
11545 {
11546 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
11547 }
11548 fn next<R>(
11549 mut self,
11550 reader: &R,
11551 event: Event<'de>,
11552 ) -> DeserializerResult<'de, super::Notation>
11553 where
11554 R: DeserializeReader,
11555 {
11556 use NotationDeserializerState as S;
11557 let mut event = event;
11558 let mut fallback = None;
11559 let mut allow_any_element = false;
11560 let (event, allow_any) = loop {
11561 let state = replace(&mut *self.state, S::Unknown__);
11562 event = match (state, event) {
11563 (S::Annotation(Some(deserializer)), event) => {
11564 let output = deserializer.next(reader, event)?;
11565 match self.handle_annotation(reader, output, &mut fallback)? {
11566 ElementHandlerOutput::Continue { event, allow_any } => {
11567 allow_any_element = allow_any_element || allow_any;
11568 event
11569 }
11570 ElementHandlerOutput::Break { event, allow_any } => {
11571 break (event, allow_any)
11572 }
11573 }
11574 }
11575 (_, Event::End(_)) => {
11576 if let Some(fallback) = fallback.take() {
11577 self.finish_state(reader, fallback)?;
11578 }
11579 return Ok(DeserializerOutput {
11580 artifact: DeserializerArtifact::Data(self.finish(reader)?),
11581 event: DeserializerEvent::None,
11582 allow_any: false,
11583 });
11584 }
11585 (S::Init__, event) => {
11586 fallback.get_or_insert(S::Init__);
11587 *self.state = NotationDeserializerState::Annotation(None);
11588 event
11589 }
11590 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
11591 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
11592 let output =
11593 <super::Annotation as WithDeserializer>::Deserializer::init(
11594 reader, event,
11595 )?;
11596 match self.handle_annotation(reader, output, &mut fallback)? {
11597 ElementHandlerOutput::Continue { event, allow_any } => {
11598 allow_any_element = allow_any_element || allow_any;
11599 event
11600 }
11601 ElementHandlerOutput::Break { event, allow_any } => {
11602 break (event, allow_any)
11603 }
11604 }
11605 } else {
11606 *self.state = S::Done__;
11607 allow_any_element = true;
11608 fallback.get_or_insert(S::Annotation(None));
11609 event
11610 }
11611 }
11612 (S::Done__, event) => {
11613 fallback.get_or_insert(S::Done__);
11614 break (DeserializerEvent::Continue(event), allow_any_element);
11615 }
11616 (S::Unknown__, _) => unreachable!(),
11617 (state, event) => {
11618 *self.state = state;
11619 break (DeserializerEvent::Break(event), false);
11620 }
11621 }
11622 };
11623 if let Some(fallback) = fallback {
11624 *self.state = fallback;
11625 }
11626 Ok(DeserializerOutput {
11627 artifact: DeserializerArtifact::Deserializer(self),
11628 event,
11629 allow_any,
11630 })
11631 }
11632 fn finish<R>(mut self, reader: &R) -> Result<super::Notation, Error>
11633 where
11634 R: DeserializeReader,
11635 {
11636 let state = replace(&mut *self.state, NotationDeserializerState::Unknown__);
11637 self.finish_state(reader, state)?;
11638 Ok(super::Notation {
11639 id: self.id,
11640 name: self.name,
11641 public: self.public,
11642 system: self.system,
11643 annotation: self.annotation,
11644 })
11645 }
11646 }
11647 #[derive(Debug)]
11648 pub struct AppinfoDeserializer {
11649 source: Option<String>,
11650 state: Box<AppinfoDeserializerState>,
11651 }
11652 #[derive(Debug)]
11653 enum AppinfoDeserializerState {
11654 Init__,
11655 Unknown__,
11656 }
11657 impl AppinfoDeserializer {
11658 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
11659 where
11660 R: DeserializeReader,
11661 {
11662 let mut source: Option<String> = None;
11663 for attrib in filter_xmlns_attributes(bytes_start) {
11664 let attrib = attrib?;
11665 if matches!(
11666 reader.resolve_local_name(attrib.key, &super::NS_XS),
11667 Some(b"source")
11668 ) {
11669 reader.read_attrib(&mut source, b"source", &attrib.value)?;
11670 }
11671 }
11672 Ok(Self {
11673 source: source,
11674 state: Box::new(AppinfoDeserializerState::Init__),
11675 })
11676 }
11677 fn finish_state<R>(
11678 &mut self,
11679 reader: &R,
11680 state: AppinfoDeserializerState,
11681 ) -> Result<(), Error>
11682 where
11683 R: DeserializeReader,
11684 {
11685 Ok(())
11686 }
11687 }
11688 impl<'de> Deserializer<'de, super::Appinfo> for AppinfoDeserializer {
11689 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Appinfo>
11690 where
11691 R: DeserializeReader,
11692 {
11693 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
11694 }
11695 fn next<R>(
11696 mut self,
11697 reader: &R,
11698 event: Event<'de>,
11699 ) -> DeserializerResult<'de, super::Appinfo>
11700 where
11701 R: DeserializeReader,
11702 {
11703 if let Event::End(_) = &event {
11704 Ok(DeserializerOutput {
11705 artifact: DeserializerArtifact::Data(self.finish(reader)?),
11706 event: DeserializerEvent::None,
11707 allow_any: false,
11708 })
11709 } else {
11710 Ok(DeserializerOutput {
11711 artifact: DeserializerArtifact::Deserializer(self),
11712 event: DeserializerEvent::Break(event),
11713 allow_any: true,
11714 })
11715 }
11716 }
11717 fn finish<R>(mut self, reader: &R) -> Result<super::Appinfo, Error>
11718 where
11719 R: DeserializeReader,
11720 {
11721 let state = replace(&mut *self.state, AppinfoDeserializerState::Unknown__);
11722 self.finish_state(reader, state)?;
11723 Ok(super::Appinfo {
11724 source: self.source,
11725 })
11726 }
11727 }
11728 #[derive(Debug)]
11729 pub struct DocumentationDeserializer {
11730 source: Option<String>,
11731 lang: Option<String>,
11732 state: Box<DocumentationDeserializerState>,
11733 }
11734 #[derive(Debug)]
11735 enum DocumentationDeserializerState {
11736 Init__,
11737 Unknown__,
11738 }
11739 impl DocumentationDeserializer {
11740 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
11741 where
11742 R: DeserializeReader,
11743 {
11744 let mut source: Option<String> = None;
11745 let mut lang: Option<String> = None;
11746 for attrib in filter_xmlns_attributes(bytes_start) {
11747 let attrib = attrib?;
11748 if matches!(
11749 reader.resolve_local_name(attrib.key, &super::NS_XS),
11750 Some(b"source")
11751 ) {
11752 reader.read_attrib(&mut source, b"source", &attrib.value)?;
11753 } else if matches!(
11754 reader.resolve_local_name(attrib.key, &super::NS_XML),
11755 Some(b"lang")
11756 ) {
11757 reader.read_attrib(&mut lang, b"lang", &attrib.value)?;
11758 }
11759 }
11760 Ok(Self {
11761 source: source,
11762 lang: lang,
11763 state: Box::new(DocumentationDeserializerState::Init__),
11764 })
11765 }
11766 fn finish_state<R>(
11767 &mut self,
11768 reader: &R,
11769 state: DocumentationDeserializerState,
11770 ) -> Result<(), Error>
11771 where
11772 R: DeserializeReader,
11773 {
11774 Ok(())
11775 }
11776 }
11777 impl<'de> Deserializer<'de, super::Documentation> for DocumentationDeserializer {
11778 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Documentation>
11779 where
11780 R: DeserializeReader,
11781 {
11782 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
11783 }
11784 fn next<R>(
11785 mut self,
11786 reader: &R,
11787 event: Event<'de>,
11788 ) -> DeserializerResult<'de, super::Documentation>
11789 where
11790 R: DeserializeReader,
11791 {
11792 if let Event::End(_) = &event {
11793 Ok(DeserializerOutput {
11794 artifact: DeserializerArtifact::Data(self.finish(reader)?),
11795 event: DeserializerEvent::None,
11796 allow_any: false,
11797 })
11798 } else {
11799 Ok(DeserializerOutput {
11800 artifact: DeserializerArtifact::Deserializer(self),
11801 event: DeserializerEvent::Break(event),
11802 allow_any: true,
11803 })
11804 }
11805 }
11806 fn finish<R>(mut self, reader: &R) -> Result<super::Documentation, Error>
11807 where
11808 R: DeserializeReader,
11809 {
11810 let state = replace(&mut *self.state, DocumentationDeserializerState::Unknown__);
11811 self.finish_state(reader, state)?;
11812 Ok(super::Documentation {
11813 source: self.source,
11814 lang: self.lang,
11815 })
11816 }
11817 }
11818 #[derive(Debug)]
11819 pub struct WildcardTypeDeserializer {
11820 id: Option<String>,
11821 namespace: Option<super::NamespaceListType>,
11822 not_namespace: Option<super::BasicNamespaceListType>,
11823 process_contents: super::ProcessContentsType,
11824 annotation: Option<super::Annotation>,
11825 state: Box<WildcardTypeDeserializerState>,
11826 }
11827 #[derive(Debug)]
11828 enum WildcardTypeDeserializerState {
11829 Init__,
11830 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
11831 Done__,
11832 Unknown__,
11833 }
11834 impl WildcardTypeDeserializer {
11835 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
11836 where
11837 R: DeserializeReader,
11838 {
11839 let mut id: Option<String> = None;
11840 let mut namespace: Option<super::NamespaceListType> = None;
11841 let mut not_namespace: Option<super::BasicNamespaceListType> = None;
11842 let mut process_contents: Option<super::ProcessContentsType> = None;
11843 for attrib in filter_xmlns_attributes(bytes_start) {
11844 let attrib = attrib?;
11845 if matches!(
11846 reader.resolve_local_name(attrib.key, &super::NS_XS),
11847 Some(b"id")
11848 ) {
11849 reader.read_attrib(&mut id, b"id", &attrib.value)?;
11850 } else if matches!(
11851 reader.resolve_local_name(attrib.key, &super::NS_XS),
11852 Some(b"namespace")
11853 ) {
11854 reader.read_attrib(&mut namespace, b"namespace", &attrib.value)?;
11855 } else if matches!(
11856 reader.resolve_local_name(attrib.key, &super::NS_XS),
11857 Some(b"notNamespace")
11858 ) {
11859 reader.read_attrib(&mut not_namespace, b"notNamespace", &attrib.value)?;
11860 } else if matches!(
11861 reader.resolve_local_name(attrib.key, &super::NS_XS),
11862 Some(b"processContents")
11863 ) {
11864 reader.read_attrib(&mut process_contents, b"processContents", &attrib.value)?;
11865 }
11866 }
11867 Ok(Self {
11868 id: id,
11869 namespace: namespace,
11870 not_namespace: not_namespace,
11871 process_contents: process_contents
11872 .unwrap_or_else(super::WildcardType::default_process_contents),
11873 annotation: None,
11874 state: Box::new(WildcardTypeDeserializerState::Init__),
11875 })
11876 }
11877 fn finish_state<R>(
11878 &mut self,
11879 reader: &R,
11880 state: WildcardTypeDeserializerState,
11881 ) -> Result<(), Error>
11882 where
11883 R: DeserializeReader,
11884 {
11885 use WildcardTypeDeserializerState as S;
11886 match state {
11887 S::Annotation(Some(deserializer)) => {
11888 self.store_annotation(deserializer.finish(reader)?)?
11889 }
11890 _ => (),
11891 }
11892 Ok(())
11893 }
11894 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
11895 if self.annotation.is_some() {
11896 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
11897 b"annotation",
11898 )))?;
11899 }
11900 self.annotation = Some(value);
11901 Ok(())
11902 }
11903 fn handle_annotation<'de, R>(
11904 &mut self,
11905 reader: &R,
11906 output: DeserializerOutput<'de, super::Annotation>,
11907 fallback: &mut Option<WildcardTypeDeserializerState>,
11908 ) -> Result<ElementHandlerOutput<'de>, Error>
11909 where
11910 R: DeserializeReader,
11911 {
11912 let DeserializerOutput {
11913 artifact,
11914 event,
11915 allow_any,
11916 } = output;
11917 if artifact.is_none() {
11918 fallback.get_or_insert(WildcardTypeDeserializerState::Annotation(None));
11919 *self.state = WildcardTypeDeserializerState::Done__;
11920 return Ok(ElementHandlerOutput::from_event(event, allow_any));
11921 }
11922 if let Some(fallback) = fallback.take() {
11923 self.finish_state(reader, fallback)?;
11924 }
11925 Ok(match artifact {
11926 DeserializerArtifact::None => unreachable!(),
11927 DeserializerArtifact::Data(data) => {
11928 self.store_annotation(data)?;
11929 *self.state = WildcardTypeDeserializerState::Done__;
11930 ElementHandlerOutput::from_event(event, allow_any)
11931 }
11932 DeserializerArtifact::Deserializer(deserializer) => {
11933 let ret = ElementHandlerOutput::from_event(event, allow_any);
11934 match &ret {
11935 ElementHandlerOutput::Continue { .. } => {
11936 fallback.get_or_insert(WildcardTypeDeserializerState::Annotation(
11937 Some(deserializer),
11938 ));
11939 *self.state = WildcardTypeDeserializerState::Done__;
11940 }
11941 ElementHandlerOutput::Break { .. } => {
11942 *self.state =
11943 WildcardTypeDeserializerState::Annotation(Some(deserializer));
11944 }
11945 }
11946 ret
11947 }
11948 })
11949 }
11950 }
11951 impl<'de> Deserializer<'de, super::WildcardType> for WildcardTypeDeserializer {
11952 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::WildcardType>
11953 where
11954 R: DeserializeReader,
11955 {
11956 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
11957 }
11958 fn next<R>(
11959 mut self,
11960 reader: &R,
11961 event: Event<'de>,
11962 ) -> DeserializerResult<'de, super::WildcardType>
11963 where
11964 R: DeserializeReader,
11965 {
11966 use WildcardTypeDeserializerState as S;
11967 let mut event = event;
11968 let mut fallback = None;
11969 let mut allow_any_element = false;
11970 let (event, allow_any) = loop {
11971 let state = replace(&mut *self.state, S::Unknown__);
11972 event = match (state, event) {
11973 (S::Annotation(Some(deserializer)), event) => {
11974 let output = deserializer.next(reader, event)?;
11975 match self.handle_annotation(reader, output, &mut fallback)? {
11976 ElementHandlerOutput::Continue { event, allow_any } => {
11977 allow_any_element = allow_any_element || allow_any;
11978 event
11979 }
11980 ElementHandlerOutput::Break { event, allow_any } => {
11981 break (event, allow_any)
11982 }
11983 }
11984 }
11985 (_, Event::End(_)) => {
11986 if let Some(fallback) = fallback.take() {
11987 self.finish_state(reader, fallback)?;
11988 }
11989 return Ok(DeserializerOutput {
11990 artifact: DeserializerArtifact::Data(self.finish(reader)?),
11991 event: DeserializerEvent::None,
11992 allow_any: false,
11993 });
11994 }
11995 (S::Init__, event) => {
11996 fallback.get_or_insert(S::Init__);
11997 *self.state = WildcardTypeDeserializerState::Annotation(None);
11998 event
11999 }
12000 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
12001 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
12002 let output =
12003 <super::Annotation as WithDeserializer>::Deserializer::init(
12004 reader, event,
12005 )?;
12006 match self.handle_annotation(reader, output, &mut fallback)? {
12007 ElementHandlerOutput::Continue { event, allow_any } => {
12008 allow_any_element = allow_any_element || allow_any;
12009 event
12010 }
12011 ElementHandlerOutput::Break { event, allow_any } => {
12012 break (event, allow_any)
12013 }
12014 }
12015 } else {
12016 *self.state = S::Done__;
12017 allow_any_element = true;
12018 fallback.get_or_insert(S::Annotation(None));
12019 event
12020 }
12021 }
12022 (S::Done__, event) => {
12023 fallback.get_or_insert(S::Done__);
12024 break (DeserializerEvent::Continue(event), allow_any_element);
12025 }
12026 (S::Unknown__, _) => unreachable!(),
12027 (state, event) => {
12028 *self.state = state;
12029 break (DeserializerEvent::Break(event), false);
12030 }
12031 }
12032 };
12033 if let Some(fallback) = fallback {
12034 *self.state = fallback;
12035 }
12036 Ok(DeserializerOutput {
12037 artifact: DeserializerArtifact::Deserializer(self),
12038 event,
12039 allow_any,
12040 })
12041 }
12042 fn finish<R>(mut self, reader: &R) -> Result<super::WildcardType, Error>
12043 where
12044 R: DeserializeReader,
12045 {
12046 let state = replace(&mut *self.state, WildcardTypeDeserializerState::Unknown__);
12047 self.finish_state(reader, state)?;
12048 Ok(super::WildcardType {
12049 id: self.id,
12050 namespace: self.namespace,
12051 not_namespace: self.not_namespace,
12052 process_contents: self.process_contents,
12053 annotation: self.annotation,
12054 })
12055 }
12056 }
12057 #[derive(Debug)]
12058 pub struct RestrictionDeserializer {
12059 id: Option<String>,
12060 base: Option<super::QName>,
12061 content: Vec<super::RestrictionContent>,
12062 state: Box<RestrictionDeserializerState>,
12063 }
12064 #[derive(Debug)]
12065 enum RestrictionDeserializerState {
12066 Init__,
12067 Next__,
12068 Content__(<super::RestrictionContent as WithDeserializer>::Deserializer),
12069 Unknown__,
12070 }
12071 impl RestrictionDeserializer {
12072 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
12073 where
12074 R: DeserializeReader,
12075 {
12076 let mut id: Option<String> = None;
12077 let mut base: Option<super::QName> = None;
12078 for attrib in filter_xmlns_attributes(bytes_start) {
12079 let attrib = attrib?;
12080 if matches!(
12081 reader.resolve_local_name(attrib.key, &super::NS_XS),
12082 Some(b"id")
12083 ) {
12084 reader.read_attrib(&mut id, b"id", &attrib.value)?;
12085 } else if matches!(
12086 reader.resolve_local_name(attrib.key, &super::NS_XS),
12087 Some(b"base")
12088 ) {
12089 reader.read_attrib(&mut base, b"base", &attrib.value)?;
12090 }
12091 }
12092 Ok(Self {
12093 id: id,
12094 base: base,
12095 content: Vec::new(),
12096 state: Box::new(RestrictionDeserializerState::Init__),
12097 })
12098 }
12099 fn finish_state<R>(
12100 &mut self,
12101 reader: &R,
12102 state: RestrictionDeserializerState,
12103 ) -> Result<(), Error>
12104 where
12105 R: DeserializeReader,
12106 {
12107 if let RestrictionDeserializerState::Content__(deserializer) = state {
12108 self.store_content(deserializer.finish(reader)?)?;
12109 }
12110 Ok(())
12111 }
12112 fn store_content(&mut self, value: super::RestrictionContent) -> Result<(), Error> {
12113 self.content.push(value);
12114 Ok(())
12115 }
12116 fn handle_content<'de, R>(
12117 &mut self,
12118 reader: &R,
12119 output: DeserializerOutput<'de, super::RestrictionContent>,
12120 fallback: &mut Option<RestrictionDeserializerState>,
12121 ) -> Result<ElementHandlerOutput<'de>, Error>
12122 where
12123 R: DeserializeReader,
12124 {
12125 let DeserializerOutput {
12126 artifact,
12127 event,
12128 allow_any,
12129 } = output;
12130 if artifact.is_none() {
12131 *self.state = fallback
12132 .take()
12133 .unwrap_or(RestrictionDeserializerState::Next__);
12134 return Ok(ElementHandlerOutput::break_(event, allow_any));
12135 }
12136 if let Some(fallback) = fallback.take() {
12137 self.finish_state(reader, fallback)?;
12138 }
12139 Ok(match artifact {
12140 DeserializerArtifact::None => unreachable!(),
12141 DeserializerArtifact::Data(data) => {
12142 self.store_content(data)?;
12143 *self.state = RestrictionDeserializerState::Next__;
12144 ElementHandlerOutput::from_event(event, allow_any)
12145 }
12146 DeserializerArtifact::Deserializer(deserializer) => {
12147 let ret = ElementHandlerOutput::from_event(event, allow_any);
12148 match &ret {
12149 ElementHandlerOutput::Continue { .. } => {
12150 fallback.get_or_insert(RestrictionDeserializerState::Content__(
12151 deserializer,
12152 ));
12153 *self.state = RestrictionDeserializerState::Next__;
12154 }
12155 ElementHandlerOutput::Break { .. } => {
12156 *self.state = RestrictionDeserializerState::Content__(deserializer);
12157 }
12158 }
12159 ret
12160 }
12161 })
12162 }
12163 }
12164 impl<'de> Deserializer<'de, super::Restriction> for RestrictionDeserializer {
12165 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Restriction>
12166 where
12167 R: DeserializeReader,
12168 {
12169 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
12170 }
12171 fn next<R>(
12172 mut self,
12173 reader: &R,
12174 event: Event<'de>,
12175 ) -> DeserializerResult<'de, super::Restriction>
12176 where
12177 R: DeserializeReader,
12178 {
12179 use RestrictionDeserializerState as S;
12180 let mut event = event;
12181 let mut fallback = None;
12182 let (event, allow_any) = loop {
12183 let state = replace(&mut *self.state, S::Unknown__);
12184 event = match (state, event) {
12185 (S::Content__(deserializer), event) => {
12186 let output = deserializer.next(reader, event)?;
12187 match self.handle_content(reader, output, &mut fallback)? {
12188 ElementHandlerOutput::Break { event, allow_any } => {
12189 break (event, allow_any)
12190 }
12191 ElementHandlerOutput::Continue { event, .. } => event,
12192 }
12193 }
12194 (_, Event::End(_)) => {
12195 return Ok(DeserializerOutput {
12196 artifact: DeserializerArtifact::Data(self.finish(reader)?),
12197 event: DeserializerEvent::None,
12198 allow_any: false,
12199 });
12200 }
12201 (old_state @ (S::Init__ | S::Next__), event) => {
12202 let output =
12203 <super::RestrictionContent as WithDeserializer>::Deserializer::init(
12204 reader, event,
12205 )?;
12206 match self.handle_content(reader, output, &mut fallback)? {
12207 ElementHandlerOutput::Break { event, allow_any } => {
12208 if matches!(&*self.state, S::Unknown__) {
12209 *self.state = old_state;
12210 }
12211 break (event, allow_any);
12212 }
12213 ElementHandlerOutput::Continue { event, .. } => event,
12214 }
12215 }
12216 (S::Unknown__, _) => unreachable!(),
12217 }
12218 };
12219 Ok(DeserializerOutput {
12220 artifact: DeserializerArtifact::Deserializer(self),
12221 event,
12222 allow_any,
12223 })
12224 }
12225 fn finish<R>(mut self, reader: &R) -> Result<super::Restriction, Error>
12226 where
12227 R: DeserializeReader,
12228 {
12229 let state = replace(&mut *self.state, RestrictionDeserializerState::Unknown__);
12230 self.finish_state(reader, state)?;
12231 Ok(super::Restriction {
12232 id: self.id,
12233 base: self.base,
12234 content: self.content,
12235 })
12236 }
12237 }
12238 #[derive(Debug)]
12239 pub enum RestrictionContentDeserializer {
12240 Init__,
12241 Annotation(
12242 Option<super::Annotation>,
12243 Option<<super::Annotation as WithDeserializer>::Deserializer>,
12244 ),
12245 SimpleType(
12246 Option<super::SimpleBaseType>,
12247 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
12248 ),
12249 Facet(
12250 Option<super::Facet>,
12251 Option<<super::Facet as WithDeserializer>::Deserializer>,
12252 ),
12253 Done__(super::RestrictionContent),
12254 Unknown__,
12255 }
12256 impl RestrictionContentDeserializer {
12257 fn find_suitable<'de, R>(
12258 &mut self,
12259 reader: &R,
12260 event: Event<'de>,
12261 fallback: &mut Option<RestrictionContentDeserializer>,
12262 ) -> Result<ElementHandlerOutput<'de>, Error>
12263 where
12264 R: DeserializeReader,
12265 {
12266 let (Event::Start(x) | Event::Empty(x)) = &event else {
12267 *self = Self::Init__;
12268 return Ok(ElementHandlerOutput::return_to_parent(event, true));
12269 };
12270 if matches!(
12271 reader.resolve_local_name(x.name(), &super::NS_XS),
12272 Some(b"annotation")
12273 ) {
12274 let output =
12275 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
12276 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
12277 }
12278 if matches!(
12279 reader.resolve_local_name(x.name(), &super::NS_XS),
12280 Some(b"simpleType")
12281 ) {
12282 let output =
12283 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(reader, event)?;
12284 return self.handle_simple_type(reader, Default::default(), output, &mut *fallback);
12285 }
12286 let event = {
12287 let output = <super::Facet as WithDeserializer>::Deserializer::init(reader, event)?;
12288 match self.handle_facet(reader, Default::default(), output, &mut *fallback)? {
12289 ElementHandlerOutput::Continue { event, .. } => event,
12290 output => {
12291 return Ok(output);
12292 }
12293 }
12294 };
12295 *self = Self::Init__;
12296 Ok(ElementHandlerOutput::return_to_parent(event, true))
12297 }
12298 fn store_annotation(
12299 values: &mut Option<super::Annotation>,
12300 value: super::Annotation,
12301 ) -> Result<(), Error> {
12302 if values.is_some() {
12303 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
12304 b"annotation",
12305 )))?;
12306 }
12307 *values = Some(value);
12308 Ok(())
12309 }
12310 fn store_simple_type(
12311 values: &mut Option<super::SimpleBaseType>,
12312 value: super::SimpleBaseType,
12313 ) -> Result<(), Error> {
12314 if values.is_some() {
12315 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
12316 b"simpleType",
12317 )))?;
12318 }
12319 *values = Some(value);
12320 Ok(())
12321 }
12322 fn store_facet(
12323 values: &mut Option<super::Facet>,
12324 value: super::Facet,
12325 ) -> Result<(), Error> {
12326 if values.is_some() {
12327 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
12328 b"facet",
12329 )))?;
12330 }
12331 *values = Some(value);
12332 Ok(())
12333 }
12334 fn handle_annotation<'de, R>(
12335 &mut self,
12336 reader: &R,
12337 mut values: Option<super::Annotation>,
12338 output: DeserializerOutput<'de, super::Annotation>,
12339 fallback: &mut Option<Self>,
12340 ) -> Result<ElementHandlerOutput<'de>, Error>
12341 where
12342 R: DeserializeReader,
12343 {
12344 let DeserializerOutput {
12345 artifact,
12346 event,
12347 allow_any,
12348 } = output;
12349 if artifact.is_none() {
12350 *self = match fallback.take() {
12351 None => Self::Init__,
12352 Some(Self::Annotation(_, Some(deserializer))) => {
12353 Self::Annotation(values, Some(deserializer))
12354 }
12355 _ => unreachable!(),
12356 };
12357 return Ok(ElementHandlerOutput::break_(event, allow_any));
12358 }
12359 match fallback.take() {
12360 None => (),
12361 Some(Self::Annotation(_, Some(deserializer))) => {
12362 let data = deserializer.finish(reader)?;
12363 Self::store_annotation(&mut values, data)?;
12364 }
12365 Some(_) => unreachable!(),
12366 }
12367 Ok(match artifact {
12368 DeserializerArtifact::None => unreachable!(),
12369 DeserializerArtifact::Data(data) => {
12370 Self::store_annotation(&mut values, data)?;
12371 let data = Self::Annotation(values, None).finish(reader)?;
12372 *self = Self::Done__(data);
12373 ElementHandlerOutput::Break { event, allow_any }
12374 }
12375 DeserializerArtifact::Deserializer(deserializer) => {
12376 *self = Self::Annotation(values, Some(deserializer));
12377 ElementHandlerOutput::from_event_end(event, allow_any)
12378 }
12379 })
12380 }
12381 fn handle_simple_type<'de, R>(
12382 &mut self,
12383 reader: &R,
12384 mut values: Option<super::SimpleBaseType>,
12385 output: DeserializerOutput<'de, super::SimpleBaseType>,
12386 fallback: &mut Option<Self>,
12387 ) -> Result<ElementHandlerOutput<'de>, Error>
12388 where
12389 R: DeserializeReader,
12390 {
12391 let DeserializerOutput {
12392 artifact,
12393 event,
12394 allow_any,
12395 } = output;
12396 if artifact.is_none() {
12397 *self = match fallback.take() {
12398 None => Self::Init__,
12399 Some(Self::SimpleType(_, Some(deserializer))) => {
12400 Self::SimpleType(values, Some(deserializer))
12401 }
12402 _ => unreachable!(),
12403 };
12404 return Ok(ElementHandlerOutput::break_(event, allow_any));
12405 }
12406 match fallback.take() {
12407 None => (),
12408 Some(Self::SimpleType(_, Some(deserializer))) => {
12409 let data = deserializer.finish(reader)?;
12410 Self::store_simple_type(&mut values, data)?;
12411 }
12412 Some(_) => unreachable!(),
12413 }
12414 Ok(match artifact {
12415 DeserializerArtifact::None => unreachable!(),
12416 DeserializerArtifact::Data(data) => {
12417 Self::store_simple_type(&mut values, data)?;
12418 let data = Self::SimpleType(values, None).finish(reader)?;
12419 *self = Self::Done__(data);
12420 ElementHandlerOutput::Break { event, allow_any }
12421 }
12422 DeserializerArtifact::Deserializer(deserializer) => {
12423 *self = Self::SimpleType(values, Some(deserializer));
12424 ElementHandlerOutput::from_event_end(event, allow_any)
12425 }
12426 })
12427 }
12428 fn handle_facet<'de, R>(
12429 &mut self,
12430 reader: &R,
12431 mut values: Option<super::Facet>,
12432 output: DeserializerOutput<'de, super::Facet>,
12433 fallback: &mut Option<Self>,
12434 ) -> Result<ElementHandlerOutput<'de>, Error>
12435 where
12436 R: DeserializeReader,
12437 {
12438 let DeserializerOutput {
12439 artifact,
12440 event,
12441 allow_any,
12442 } = output;
12443 if artifact.is_none() {
12444 *self = match fallback.take() {
12445 None => Self::Init__,
12446 Some(Self::Facet(_, Some(deserializer))) => {
12447 Self::Facet(values, Some(deserializer))
12448 }
12449 _ => unreachable!(),
12450 };
12451 return Ok(ElementHandlerOutput::break_(event, allow_any));
12452 }
12453 match fallback.take() {
12454 None => (),
12455 Some(Self::Facet(_, Some(deserializer))) => {
12456 let data = deserializer.finish(reader)?;
12457 Self::store_facet(&mut values, data)?;
12458 }
12459 Some(_) => unreachable!(),
12460 }
12461 Ok(match artifact {
12462 DeserializerArtifact::None => unreachable!(),
12463 DeserializerArtifact::Data(data) => {
12464 Self::store_facet(&mut values, data)?;
12465 let data = Self::Facet(values, None).finish(reader)?;
12466 *self = Self::Done__(data);
12467 ElementHandlerOutput::Break { event, allow_any }
12468 }
12469 DeserializerArtifact::Deserializer(deserializer) => {
12470 *self = Self::Facet(values, Some(deserializer));
12471 ElementHandlerOutput::from_event_end(event, allow_any)
12472 }
12473 })
12474 }
12475 }
12476 impl<'de> Deserializer<'de, super::RestrictionContent> for RestrictionContentDeserializer {
12477 fn init<R>(
12478 reader: &R,
12479 event: Event<'de>,
12480 ) -> DeserializerResult<'de, super::RestrictionContent>
12481 where
12482 R: DeserializeReader,
12483 {
12484 let deserializer = Self::Init__;
12485 let mut output = deserializer.next(reader, event)?;
12486 output.artifact = match output.artifact {
12487 DeserializerArtifact::Deserializer(Self::Init__) => DeserializerArtifact::None,
12488 artifact => artifact,
12489 };
12490 Ok(output)
12491 }
12492 fn next<R>(
12493 mut self,
12494 reader: &R,
12495 event: Event<'de>,
12496 ) -> DeserializerResult<'de, super::RestrictionContent>
12497 where
12498 R: DeserializeReader,
12499 {
12500 let mut event = event;
12501 let mut fallback = None;
12502 let (event, allow_any) = loop {
12503 let state = replace(&mut self, Self::Unknown__);
12504 event = match (state, event) {
12505 (Self::Annotation(values, Some(deserializer)), event) => {
12506 let output = deserializer.next(reader, event)?;
12507 match self.handle_annotation(reader, values, output, &mut fallback)? {
12508 ElementHandlerOutput::Break { event, allow_any } => {
12509 break (event, allow_any)
12510 }
12511 ElementHandlerOutput::Continue { event, .. } => event,
12512 }
12513 }
12514 (Self::SimpleType(values, Some(deserializer)), event) => {
12515 let output = deserializer.next(reader, event)?;
12516 match self.handle_simple_type(reader, values, output, &mut fallback)? {
12517 ElementHandlerOutput::Break { event, allow_any } => {
12518 break (event, allow_any)
12519 }
12520 ElementHandlerOutput::Continue { event, .. } => event,
12521 }
12522 }
12523 (Self::Facet(values, Some(deserializer)), event) => {
12524 let output = deserializer.next(reader, event)?;
12525 match self.handle_facet(reader, values, output, &mut fallback)? {
12526 ElementHandlerOutput::Break { event, allow_any } => {
12527 break (event, allow_any)
12528 }
12529 ElementHandlerOutput::Continue { event, .. } => event,
12530 }
12531 }
12532 (state, event @ Event::End(_)) => {
12533 return Ok(DeserializerOutput {
12534 artifact: DeserializerArtifact::Data(state.finish(reader)?),
12535 event: DeserializerEvent::Continue(event),
12536 allow_any: false,
12537 });
12538 }
12539 (Self::Init__, event) => {
12540 match self.find_suitable(reader, event, &mut fallback)? {
12541 ElementHandlerOutput::Break { event, allow_any } => {
12542 break (event, allow_any)
12543 }
12544 ElementHandlerOutput::Continue { event, .. } => event,
12545 }
12546 }
12547 (Self::Annotation(values, None), event) => {
12548 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
12549 reader, event,
12550 )?;
12551 match self.handle_annotation(reader, values, output, &mut fallback)? {
12552 ElementHandlerOutput::Break { event, allow_any } => {
12553 break (event, allow_any)
12554 }
12555 ElementHandlerOutput::Continue { event, .. } => event,
12556 }
12557 }
12558 (Self::SimpleType(values, None), event) => {
12559 let output =
12560 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
12561 reader, event,
12562 )?;
12563 match self.handle_simple_type(reader, values, output, &mut fallback)? {
12564 ElementHandlerOutput::Break { event, allow_any } => {
12565 break (event, allow_any)
12566 }
12567 ElementHandlerOutput::Continue { event, .. } => event,
12568 }
12569 }
12570 (Self::Facet(values, None), event) => {
12571 let output =
12572 <super::Facet as WithDeserializer>::Deserializer::init(reader, event)?;
12573 match self.handle_facet(reader, values, output, &mut fallback)? {
12574 ElementHandlerOutput::Break { event, allow_any } => {
12575 break (event, allow_any)
12576 }
12577 ElementHandlerOutput::Continue { event, .. } => event,
12578 }
12579 }
12580 (s @ Self::Done__(_), event) => {
12581 self = s;
12582 break (DeserializerEvent::Continue(event), false);
12583 }
12584 (Self::Unknown__, _) => unreachable!(),
12585 }
12586 };
12587 let artifact = match self {
12588 Self::Done__(data) => DeserializerArtifact::Data(data),
12589 deserializer => DeserializerArtifact::Deserializer(deserializer),
12590 };
12591 Ok(DeserializerOutput {
12592 artifact,
12593 event,
12594 allow_any,
12595 })
12596 }
12597 fn finish<R>(self, reader: &R) -> Result<super::RestrictionContent, Error>
12598 where
12599 R: DeserializeReader,
12600 {
12601 match self {
12602 Self::Init__ => Err(ErrorKind::MissingContent.into()),
12603 Self::Annotation(mut values, deserializer) => {
12604 if let Some(deserializer) = deserializer {
12605 let value = deserializer.finish(reader)?;
12606 Self::store_annotation(&mut values, value)?;
12607 }
12608 Ok(super::RestrictionContent::Annotation(values.ok_or_else(
12609 || ErrorKind::MissingElement("annotation".into()),
12610 )?))
12611 }
12612 Self::SimpleType(mut values, deserializer) => {
12613 if let Some(deserializer) = deserializer {
12614 let value = deserializer.finish(reader)?;
12615 Self::store_simple_type(&mut values, value)?;
12616 }
12617 Ok(super::RestrictionContent::SimpleType(values.ok_or_else(
12618 || ErrorKind::MissingElement("simpleType".into()),
12619 )?))
12620 }
12621 Self::Facet(mut values, deserializer) => {
12622 if let Some(deserializer) = deserializer {
12623 let value = deserializer.finish(reader)?;
12624 Self::store_facet(&mut values, value)?;
12625 }
12626 Ok(super::RestrictionContent::Facet(values.ok_or_else(
12627 || ErrorKind::MissingElement("facet".into()),
12628 )?))
12629 }
12630 Self::Done__(data) => Ok(data),
12631 Self::Unknown__ => unreachable!(),
12632 }
12633 }
12634 }
12635 #[derive(Debug)]
12636 pub struct ListDeserializer {
12637 id: Option<String>,
12638 item_type: Option<super::QName>,
12639 annotation: Option<super::Annotation>,
12640 simple_type: Option<super::SimpleBaseType>,
12641 state: Box<ListDeserializerState>,
12642 }
12643 #[derive(Debug)]
12644 enum ListDeserializerState {
12645 Init__,
12646 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
12647 SimpleType(Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>),
12648 Done__,
12649 Unknown__,
12650 }
12651 impl ListDeserializer {
12652 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
12653 where
12654 R: DeserializeReader,
12655 {
12656 let mut id: Option<String> = None;
12657 let mut item_type: Option<super::QName> = None;
12658 for attrib in filter_xmlns_attributes(bytes_start) {
12659 let attrib = attrib?;
12660 if matches!(
12661 reader.resolve_local_name(attrib.key, &super::NS_XS),
12662 Some(b"id")
12663 ) {
12664 reader.read_attrib(&mut id, b"id", &attrib.value)?;
12665 } else if matches!(
12666 reader.resolve_local_name(attrib.key, &super::NS_XS),
12667 Some(b"itemType")
12668 ) {
12669 reader.read_attrib(&mut item_type, b"itemType", &attrib.value)?;
12670 }
12671 }
12672 Ok(Self {
12673 id: id,
12674 item_type: item_type,
12675 annotation: None,
12676 simple_type: None,
12677 state: Box::new(ListDeserializerState::Init__),
12678 })
12679 }
12680 fn finish_state<R>(&mut self, reader: &R, state: ListDeserializerState) -> Result<(), Error>
12681 where
12682 R: DeserializeReader,
12683 {
12684 use ListDeserializerState as S;
12685 match state {
12686 S::Annotation(Some(deserializer)) => {
12687 self.store_annotation(deserializer.finish(reader)?)?
12688 }
12689 S::SimpleType(Some(deserializer)) => {
12690 self.store_simple_type(deserializer.finish(reader)?)?
12691 }
12692 _ => (),
12693 }
12694 Ok(())
12695 }
12696 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
12697 if self.annotation.is_some() {
12698 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
12699 b"annotation",
12700 )))?;
12701 }
12702 self.annotation = Some(value);
12703 Ok(())
12704 }
12705 fn store_simple_type(&mut self, value: super::SimpleBaseType) -> Result<(), Error> {
12706 if self.simple_type.is_some() {
12707 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
12708 b"simpleType",
12709 )))?;
12710 }
12711 self.simple_type = Some(value);
12712 Ok(())
12713 }
12714 fn handle_annotation<'de, R>(
12715 &mut self,
12716 reader: &R,
12717 output: DeserializerOutput<'de, super::Annotation>,
12718 fallback: &mut Option<ListDeserializerState>,
12719 ) -> Result<ElementHandlerOutput<'de>, Error>
12720 where
12721 R: DeserializeReader,
12722 {
12723 let DeserializerOutput {
12724 artifact,
12725 event,
12726 allow_any,
12727 } = output;
12728 if artifact.is_none() {
12729 fallback.get_or_insert(ListDeserializerState::Annotation(None));
12730 *self.state = ListDeserializerState::SimpleType(None);
12731 return Ok(ElementHandlerOutput::from_event(event, allow_any));
12732 }
12733 if let Some(fallback) = fallback.take() {
12734 self.finish_state(reader, fallback)?;
12735 }
12736 Ok(match artifact {
12737 DeserializerArtifact::None => unreachable!(),
12738 DeserializerArtifact::Data(data) => {
12739 self.store_annotation(data)?;
12740 *self.state = ListDeserializerState::SimpleType(None);
12741 ElementHandlerOutput::from_event(event, allow_any)
12742 }
12743 DeserializerArtifact::Deserializer(deserializer) => {
12744 let ret = ElementHandlerOutput::from_event(event, allow_any);
12745 match &ret {
12746 ElementHandlerOutput::Continue { .. } => {
12747 fallback.get_or_insert(ListDeserializerState::Annotation(Some(
12748 deserializer,
12749 )));
12750 *self.state = ListDeserializerState::SimpleType(None);
12751 }
12752 ElementHandlerOutput::Break { .. } => {
12753 *self.state = ListDeserializerState::Annotation(Some(deserializer));
12754 }
12755 }
12756 ret
12757 }
12758 })
12759 }
12760 fn handle_simple_type<'de, R>(
12761 &mut self,
12762 reader: &R,
12763 output: DeserializerOutput<'de, super::SimpleBaseType>,
12764 fallback: &mut Option<ListDeserializerState>,
12765 ) -> Result<ElementHandlerOutput<'de>, Error>
12766 where
12767 R: DeserializeReader,
12768 {
12769 let DeserializerOutput {
12770 artifact,
12771 event,
12772 allow_any,
12773 } = output;
12774 if artifact.is_none() {
12775 fallback.get_or_insert(ListDeserializerState::SimpleType(None));
12776 *self.state = ListDeserializerState::Done__;
12777 return Ok(ElementHandlerOutput::from_event(event, allow_any));
12778 }
12779 if let Some(fallback) = fallback.take() {
12780 self.finish_state(reader, fallback)?;
12781 }
12782 Ok(match artifact {
12783 DeserializerArtifact::None => unreachable!(),
12784 DeserializerArtifact::Data(data) => {
12785 self.store_simple_type(data)?;
12786 *self.state = ListDeserializerState::Done__;
12787 ElementHandlerOutput::from_event(event, allow_any)
12788 }
12789 DeserializerArtifact::Deserializer(deserializer) => {
12790 let ret = ElementHandlerOutput::from_event(event, allow_any);
12791 match &ret {
12792 ElementHandlerOutput::Continue { .. } => {
12793 fallback.get_or_insert(ListDeserializerState::SimpleType(Some(
12794 deserializer,
12795 )));
12796 *self.state = ListDeserializerState::Done__;
12797 }
12798 ElementHandlerOutput::Break { .. } => {
12799 *self.state = ListDeserializerState::SimpleType(Some(deserializer));
12800 }
12801 }
12802 ret
12803 }
12804 })
12805 }
12806 }
12807 impl<'de> Deserializer<'de, super::List> for ListDeserializer {
12808 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::List>
12809 where
12810 R: DeserializeReader,
12811 {
12812 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
12813 }
12814 fn next<R>(mut self, reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::List>
12815 where
12816 R: DeserializeReader,
12817 {
12818 use ListDeserializerState as S;
12819 let mut event = event;
12820 let mut fallback = None;
12821 let mut allow_any_element = false;
12822 let (event, allow_any) = loop {
12823 let state = replace(&mut *self.state, S::Unknown__);
12824 event = match (state, event) {
12825 (S::Annotation(Some(deserializer)), event) => {
12826 let output = deserializer.next(reader, event)?;
12827 match self.handle_annotation(reader, output, &mut fallback)? {
12828 ElementHandlerOutput::Continue { event, allow_any } => {
12829 allow_any_element = allow_any_element || allow_any;
12830 event
12831 }
12832 ElementHandlerOutput::Break { event, allow_any } => {
12833 break (event, allow_any)
12834 }
12835 }
12836 }
12837 (S::SimpleType(Some(deserializer)), event) => {
12838 let output = deserializer.next(reader, event)?;
12839 match self.handle_simple_type(reader, output, &mut fallback)? {
12840 ElementHandlerOutput::Continue { event, allow_any } => {
12841 allow_any_element = allow_any_element || allow_any;
12842 event
12843 }
12844 ElementHandlerOutput::Break { event, allow_any } => {
12845 break (event, allow_any)
12846 }
12847 }
12848 }
12849 (_, Event::End(_)) => {
12850 if let Some(fallback) = fallback.take() {
12851 self.finish_state(reader, fallback)?;
12852 }
12853 return Ok(DeserializerOutput {
12854 artifact: DeserializerArtifact::Data(self.finish(reader)?),
12855 event: DeserializerEvent::None,
12856 allow_any: false,
12857 });
12858 }
12859 (S::Init__, event) => {
12860 fallback.get_or_insert(S::Init__);
12861 *self.state = ListDeserializerState::Annotation(None);
12862 event
12863 }
12864 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
12865 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
12866 let output =
12867 <super::Annotation as WithDeserializer>::Deserializer::init(
12868 reader, event,
12869 )?;
12870 match self.handle_annotation(reader, output, &mut fallback)? {
12871 ElementHandlerOutput::Continue { event, allow_any } => {
12872 allow_any_element = allow_any_element || allow_any;
12873 event
12874 }
12875 ElementHandlerOutput::Break { event, allow_any } => {
12876 break (event, allow_any)
12877 }
12878 }
12879 } else {
12880 *self.state = S::SimpleType(None);
12881 allow_any_element = true;
12882 fallback.get_or_insert(S::Annotation(None));
12883 event
12884 }
12885 }
12886 (S::SimpleType(None), event @ (Event::Start(_) | Event::Empty(_))) => {
12887 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"simpleType") {
12888 let output =
12889 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
12890 reader, event,
12891 )?;
12892 match self.handle_simple_type(reader, output, &mut fallback)? {
12893 ElementHandlerOutput::Continue { event, allow_any } => {
12894 allow_any_element = allow_any_element || allow_any;
12895 event
12896 }
12897 ElementHandlerOutput::Break { event, allow_any } => {
12898 break (event, allow_any)
12899 }
12900 }
12901 } else {
12902 *self.state = S::Done__;
12903 allow_any_element = true;
12904 fallback.get_or_insert(S::SimpleType(None));
12905 event
12906 }
12907 }
12908 (S::Done__, event) => {
12909 fallback.get_or_insert(S::Done__);
12910 break (DeserializerEvent::Continue(event), allow_any_element);
12911 }
12912 (S::Unknown__, _) => unreachable!(),
12913 (state, event) => {
12914 *self.state = state;
12915 break (DeserializerEvent::Break(event), false);
12916 }
12917 }
12918 };
12919 if let Some(fallback) = fallback {
12920 *self.state = fallback;
12921 }
12922 Ok(DeserializerOutput {
12923 artifact: DeserializerArtifact::Deserializer(self),
12924 event,
12925 allow_any,
12926 })
12927 }
12928 fn finish<R>(mut self, reader: &R) -> Result<super::List, Error>
12929 where
12930 R: DeserializeReader,
12931 {
12932 let state = replace(&mut *self.state, ListDeserializerState::Unknown__);
12933 self.finish_state(reader, state)?;
12934 Ok(super::List {
12935 id: self.id,
12936 item_type: self.item_type,
12937 annotation: self.annotation,
12938 simple_type: self.simple_type,
12939 })
12940 }
12941 }
12942 #[derive(Debug)]
12943 pub struct UnionDeserializer {
12944 id: Option<String>,
12945 member_types: Option<super::ElementSubstitutionGroupType>,
12946 annotation: Option<super::Annotation>,
12947 simple_type: Vec<super::SimpleBaseType>,
12948 state: Box<UnionDeserializerState>,
12949 }
12950 #[derive(Debug)]
12951 enum UnionDeserializerState {
12952 Init__,
12953 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
12954 SimpleType(Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>),
12955 Done__,
12956 Unknown__,
12957 }
12958 impl UnionDeserializer {
12959 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
12960 where
12961 R: DeserializeReader,
12962 {
12963 let mut id: Option<String> = None;
12964 let mut member_types: Option<super::ElementSubstitutionGroupType> = None;
12965 for attrib in filter_xmlns_attributes(bytes_start) {
12966 let attrib = attrib?;
12967 if matches!(
12968 reader.resolve_local_name(attrib.key, &super::NS_XS),
12969 Some(b"id")
12970 ) {
12971 reader.read_attrib(&mut id, b"id", &attrib.value)?;
12972 } else if matches!(
12973 reader.resolve_local_name(attrib.key, &super::NS_XS),
12974 Some(b"memberTypes")
12975 ) {
12976 reader.read_attrib(&mut member_types, b"memberTypes", &attrib.value)?;
12977 }
12978 }
12979 Ok(Self {
12980 id: id,
12981 member_types: member_types,
12982 annotation: None,
12983 simple_type: Vec::new(),
12984 state: Box::new(UnionDeserializerState::Init__),
12985 })
12986 }
12987 fn finish_state<R>(
12988 &mut self,
12989 reader: &R,
12990 state: UnionDeserializerState,
12991 ) -> Result<(), Error>
12992 where
12993 R: DeserializeReader,
12994 {
12995 use UnionDeserializerState as S;
12996 match state {
12997 S::Annotation(Some(deserializer)) => {
12998 self.store_annotation(deserializer.finish(reader)?)?
12999 }
13000 S::SimpleType(Some(deserializer)) => {
13001 self.store_simple_type(deserializer.finish(reader)?)?
13002 }
13003 _ => (),
13004 }
13005 Ok(())
13006 }
13007 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
13008 if self.annotation.is_some() {
13009 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
13010 b"annotation",
13011 )))?;
13012 }
13013 self.annotation = Some(value);
13014 Ok(())
13015 }
13016 fn store_simple_type(&mut self, value: super::SimpleBaseType) -> Result<(), Error> {
13017 self.simple_type.push(value);
13018 Ok(())
13019 }
13020 fn handle_annotation<'de, R>(
13021 &mut self,
13022 reader: &R,
13023 output: DeserializerOutput<'de, super::Annotation>,
13024 fallback: &mut Option<UnionDeserializerState>,
13025 ) -> Result<ElementHandlerOutput<'de>, Error>
13026 where
13027 R: DeserializeReader,
13028 {
13029 let DeserializerOutput {
13030 artifact,
13031 event,
13032 allow_any,
13033 } = output;
13034 if artifact.is_none() {
13035 fallback.get_or_insert(UnionDeserializerState::Annotation(None));
13036 *self.state = UnionDeserializerState::SimpleType(None);
13037 return Ok(ElementHandlerOutput::from_event(event, allow_any));
13038 }
13039 if let Some(fallback) = fallback.take() {
13040 self.finish_state(reader, fallback)?;
13041 }
13042 Ok(match artifact {
13043 DeserializerArtifact::None => unreachable!(),
13044 DeserializerArtifact::Data(data) => {
13045 self.store_annotation(data)?;
13046 *self.state = UnionDeserializerState::SimpleType(None);
13047 ElementHandlerOutput::from_event(event, allow_any)
13048 }
13049 DeserializerArtifact::Deserializer(deserializer) => {
13050 let ret = ElementHandlerOutput::from_event(event, allow_any);
13051 match &ret {
13052 ElementHandlerOutput::Continue { .. } => {
13053 fallback.get_or_insert(UnionDeserializerState::Annotation(Some(
13054 deserializer,
13055 )));
13056 *self.state = UnionDeserializerState::SimpleType(None);
13057 }
13058 ElementHandlerOutput::Break { .. } => {
13059 *self.state = UnionDeserializerState::Annotation(Some(deserializer));
13060 }
13061 }
13062 ret
13063 }
13064 })
13065 }
13066 fn handle_simple_type<'de, R>(
13067 &mut self,
13068 reader: &R,
13069 output: DeserializerOutput<'de, super::SimpleBaseType>,
13070 fallback: &mut Option<UnionDeserializerState>,
13071 ) -> Result<ElementHandlerOutput<'de>, Error>
13072 where
13073 R: DeserializeReader,
13074 {
13075 let DeserializerOutput {
13076 artifact,
13077 event,
13078 allow_any,
13079 } = output;
13080 if artifact.is_none() {
13081 fallback.get_or_insert(UnionDeserializerState::SimpleType(None));
13082 *self.state = UnionDeserializerState::Done__;
13083 return Ok(ElementHandlerOutput::from_event(event, allow_any));
13084 }
13085 if let Some(fallback) = fallback.take() {
13086 self.finish_state(reader, fallback)?;
13087 }
13088 Ok(match artifact {
13089 DeserializerArtifact::None => unreachable!(),
13090 DeserializerArtifact::Data(data) => {
13091 self.store_simple_type(data)?;
13092 *self.state = UnionDeserializerState::SimpleType(None);
13093 ElementHandlerOutput::from_event(event, allow_any)
13094 }
13095 DeserializerArtifact::Deserializer(deserializer) => {
13096 let ret = ElementHandlerOutput::from_event(event, allow_any);
13097 match &ret {
13098 ElementHandlerOutput::Continue { .. } => {
13099 fallback.get_or_insert(UnionDeserializerState::SimpleType(Some(
13100 deserializer,
13101 )));
13102 *self.state = UnionDeserializerState::SimpleType(None);
13103 }
13104 ElementHandlerOutput::Break { .. } => {
13105 *self.state = UnionDeserializerState::SimpleType(Some(deserializer));
13106 }
13107 }
13108 ret
13109 }
13110 })
13111 }
13112 }
13113 impl<'de> Deserializer<'de, super::Union> for UnionDeserializer {
13114 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Union>
13115 where
13116 R: DeserializeReader,
13117 {
13118 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
13119 }
13120 fn next<R>(mut self, reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Union>
13121 where
13122 R: DeserializeReader,
13123 {
13124 use UnionDeserializerState as S;
13125 let mut event = event;
13126 let mut fallback = None;
13127 let mut allow_any_element = false;
13128 let (event, allow_any) = loop {
13129 let state = replace(&mut *self.state, S::Unknown__);
13130 event = match (state, event) {
13131 (S::Annotation(Some(deserializer)), event) => {
13132 let output = deserializer.next(reader, event)?;
13133 match self.handle_annotation(reader, output, &mut fallback)? {
13134 ElementHandlerOutput::Continue { event, allow_any } => {
13135 allow_any_element = allow_any_element || allow_any;
13136 event
13137 }
13138 ElementHandlerOutput::Break { event, allow_any } => {
13139 break (event, allow_any)
13140 }
13141 }
13142 }
13143 (S::SimpleType(Some(deserializer)), event) => {
13144 let output = deserializer.next(reader, event)?;
13145 match self.handle_simple_type(reader, output, &mut fallback)? {
13146 ElementHandlerOutput::Continue { event, allow_any } => {
13147 allow_any_element = allow_any_element || allow_any;
13148 event
13149 }
13150 ElementHandlerOutput::Break { event, allow_any } => {
13151 break (event, allow_any)
13152 }
13153 }
13154 }
13155 (_, Event::End(_)) => {
13156 if let Some(fallback) = fallback.take() {
13157 self.finish_state(reader, fallback)?;
13158 }
13159 return Ok(DeserializerOutput {
13160 artifact: DeserializerArtifact::Data(self.finish(reader)?),
13161 event: DeserializerEvent::None,
13162 allow_any: false,
13163 });
13164 }
13165 (S::Init__, event) => {
13166 fallback.get_or_insert(S::Init__);
13167 *self.state = UnionDeserializerState::Annotation(None);
13168 event
13169 }
13170 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
13171 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
13172 let output =
13173 <super::Annotation as WithDeserializer>::Deserializer::init(
13174 reader, event,
13175 )?;
13176 match self.handle_annotation(reader, output, &mut fallback)? {
13177 ElementHandlerOutput::Continue { event, allow_any } => {
13178 allow_any_element = allow_any_element || allow_any;
13179 event
13180 }
13181 ElementHandlerOutput::Break { event, allow_any } => {
13182 break (event, allow_any)
13183 }
13184 }
13185 } else {
13186 *self.state = S::SimpleType(None);
13187 allow_any_element = true;
13188 fallback.get_or_insert(S::Annotation(None));
13189 event
13190 }
13191 }
13192 (S::SimpleType(None), event @ (Event::Start(_) | Event::Empty(_))) => {
13193 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"simpleType") {
13194 let output =
13195 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
13196 reader, event,
13197 )?;
13198 match self.handle_simple_type(reader, output, &mut fallback)? {
13199 ElementHandlerOutput::Continue { event, allow_any } => {
13200 allow_any_element = allow_any_element || allow_any;
13201 event
13202 }
13203 ElementHandlerOutput::Break { event, allow_any } => {
13204 break (event, allow_any)
13205 }
13206 }
13207 } else {
13208 *self.state = S::Done__;
13209 allow_any_element = true;
13210 fallback.get_or_insert(S::SimpleType(None));
13211 event
13212 }
13213 }
13214 (S::Done__, event) => {
13215 fallback.get_or_insert(S::Done__);
13216 break (DeserializerEvent::Continue(event), allow_any_element);
13217 }
13218 (S::Unknown__, _) => unreachable!(),
13219 (state, event) => {
13220 *self.state = state;
13221 break (DeserializerEvent::Break(event), false);
13222 }
13223 }
13224 };
13225 if let Some(fallback) = fallback {
13226 *self.state = fallback;
13227 }
13228 Ok(DeserializerOutput {
13229 artifact: DeserializerArtifact::Deserializer(self),
13230 event,
13231 allow_any,
13232 })
13233 }
13234 fn finish<R>(mut self, reader: &R) -> Result<super::Union, Error>
13235 where
13236 R: DeserializeReader,
13237 {
13238 let state = replace(&mut *self.state, UnionDeserializerState::Unknown__);
13239 self.finish_state(reader, state)?;
13240 Ok(super::Union {
13241 id: self.id,
13242 member_types: self.member_types,
13243 annotation: self.annotation,
13244 simple_type: self.simple_type,
13245 })
13246 }
13247 }
13248 #[derive(Debug)]
13249 pub struct SimpleContentDeserializer {
13250 id: Option<String>,
13251 content: Vec<super::SimpleContentContent>,
13252 state: Box<SimpleContentDeserializerState>,
13253 }
13254 #[derive(Debug)]
13255 enum SimpleContentDeserializerState {
13256 Init__,
13257 Next__,
13258 Content__(<super::SimpleContentContent as WithDeserializer>::Deserializer),
13259 Unknown__,
13260 }
13261 impl SimpleContentDeserializer {
13262 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
13263 where
13264 R: DeserializeReader,
13265 {
13266 let mut id: Option<String> = None;
13267 for attrib in filter_xmlns_attributes(bytes_start) {
13268 let attrib = attrib?;
13269 if matches!(
13270 reader.resolve_local_name(attrib.key, &super::NS_XS),
13271 Some(b"id")
13272 ) {
13273 reader.read_attrib(&mut id, b"id", &attrib.value)?;
13274 }
13275 }
13276 Ok(Self {
13277 id: id,
13278 content: Vec::new(),
13279 state: Box::new(SimpleContentDeserializerState::Init__),
13280 })
13281 }
13282 fn finish_state<R>(
13283 &mut self,
13284 reader: &R,
13285 state: SimpleContentDeserializerState,
13286 ) -> Result<(), Error>
13287 where
13288 R: DeserializeReader,
13289 {
13290 if let SimpleContentDeserializerState::Content__(deserializer) = state {
13291 self.store_content(deserializer.finish(reader)?)?;
13292 }
13293 Ok(())
13294 }
13295 fn store_content(&mut self, value: super::SimpleContentContent) -> Result<(), Error> {
13296 self.content.push(value);
13297 Ok(())
13298 }
13299 fn handle_content<'de, R>(
13300 &mut self,
13301 reader: &R,
13302 output: DeserializerOutput<'de, super::SimpleContentContent>,
13303 fallback: &mut Option<SimpleContentDeserializerState>,
13304 ) -> Result<ElementHandlerOutput<'de>, Error>
13305 where
13306 R: DeserializeReader,
13307 {
13308 let DeserializerOutput {
13309 artifact,
13310 event,
13311 allow_any,
13312 } = output;
13313 if artifact.is_none() {
13314 *self.state = fallback
13315 .take()
13316 .unwrap_or(SimpleContentDeserializerState::Next__);
13317 return Ok(ElementHandlerOutput::break_(event, allow_any));
13318 }
13319 if let Some(fallback) = fallback.take() {
13320 self.finish_state(reader, fallback)?;
13321 }
13322 Ok(match artifact {
13323 DeserializerArtifact::None => unreachable!(),
13324 DeserializerArtifact::Data(data) => {
13325 self.store_content(data)?;
13326 *self.state = SimpleContentDeserializerState::Next__;
13327 ElementHandlerOutput::from_event(event, allow_any)
13328 }
13329 DeserializerArtifact::Deserializer(deserializer) => {
13330 let ret = ElementHandlerOutput::from_event(event, allow_any);
13331 match &ret {
13332 ElementHandlerOutput::Continue { .. } => {
13333 fallback.get_or_insert(SimpleContentDeserializerState::Content__(
13334 deserializer,
13335 ));
13336 *self.state = SimpleContentDeserializerState::Next__;
13337 }
13338 ElementHandlerOutput::Break { .. } => {
13339 *self.state = SimpleContentDeserializerState::Content__(deserializer);
13340 }
13341 }
13342 ret
13343 }
13344 })
13345 }
13346 }
13347 impl<'de> Deserializer<'de, super::SimpleContent> for SimpleContentDeserializer {
13348 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::SimpleContent>
13349 where
13350 R: DeserializeReader,
13351 {
13352 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
13353 }
13354 fn next<R>(
13355 mut self,
13356 reader: &R,
13357 event: Event<'de>,
13358 ) -> DeserializerResult<'de, super::SimpleContent>
13359 where
13360 R: DeserializeReader,
13361 {
13362 use SimpleContentDeserializerState as S;
13363 let mut event = event;
13364 let mut fallback = None;
13365 let (event, allow_any) = loop {
13366 let state = replace(&mut *self.state, S::Unknown__);
13367 event = match (state, event) {
13368 (S::Content__(deserializer), event) => {
13369 let output = deserializer.next(reader, event)?;
13370 match self.handle_content(reader, output, &mut fallback)? {
13371 ElementHandlerOutput::Break { event, allow_any } => {
13372 break (event, allow_any)
13373 }
13374 ElementHandlerOutput::Continue { event, .. } => event,
13375 }
13376 }
13377 (_, Event::End(_)) => {
13378 return Ok(DeserializerOutput {
13379 artifact: DeserializerArtifact::Data(self.finish(reader)?),
13380 event: DeserializerEvent::None,
13381 allow_any: false,
13382 });
13383 }
13384 (old_state @ (S::Init__ | S::Next__), event) => {
13385 let output =
13386 <super::SimpleContentContent as WithDeserializer>::Deserializer::init(
13387 reader, event,
13388 )?;
13389 match self.handle_content(reader, output, &mut fallback)? {
13390 ElementHandlerOutput::Break { event, allow_any } => {
13391 if matches!(&*self.state, S::Unknown__) {
13392 *self.state = old_state;
13393 }
13394 break (event, allow_any);
13395 }
13396 ElementHandlerOutput::Continue { event, .. } => event,
13397 }
13398 }
13399 (S::Unknown__, _) => unreachable!(),
13400 }
13401 };
13402 Ok(DeserializerOutput {
13403 artifact: DeserializerArtifact::Deserializer(self),
13404 event,
13405 allow_any,
13406 })
13407 }
13408 fn finish<R>(mut self, reader: &R) -> Result<super::SimpleContent, Error>
13409 where
13410 R: DeserializeReader,
13411 {
13412 let state = replace(&mut *self.state, SimpleContentDeserializerState::Unknown__);
13413 self.finish_state(reader, state)?;
13414 Ok(super::SimpleContent {
13415 id: self.id,
13416 content: self.content,
13417 })
13418 }
13419 }
13420 #[derive(Debug)]
13421 pub enum SimpleContentContentDeserializer {
13422 Init__,
13423 Annotation(
13424 Option<super::Annotation>,
13425 Option<<super::Annotation as WithDeserializer>::Deserializer>,
13426 ),
13427 Restriction(
13428 Option<super::RestrictionType>,
13429 Option<<super::RestrictionType as WithDeserializer>::Deserializer>,
13430 ),
13431 Extension(
13432 Option<super::ExtensionType>,
13433 Option<<super::ExtensionType as WithDeserializer>::Deserializer>,
13434 ),
13435 Done__(super::SimpleContentContent),
13436 Unknown__,
13437 }
13438 impl SimpleContentContentDeserializer {
13439 fn find_suitable<'de, R>(
13440 &mut self,
13441 reader: &R,
13442 event: Event<'de>,
13443 fallback: &mut Option<SimpleContentContentDeserializer>,
13444 ) -> Result<ElementHandlerOutput<'de>, Error>
13445 where
13446 R: DeserializeReader,
13447 {
13448 let (Event::Start(x) | Event::Empty(x)) = &event else {
13449 *self = Self::Init__;
13450 return Ok(ElementHandlerOutput::return_to_parent(event, false));
13451 };
13452 if matches!(
13453 reader.resolve_local_name(x.name(), &super::NS_XS),
13454 Some(b"annotation")
13455 ) {
13456 let output =
13457 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
13458 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
13459 }
13460 if matches!(
13461 reader.resolve_local_name(x.name(), &super::NS_XS),
13462 Some(b"restriction")
13463 ) {
13464 let output = <super::RestrictionType as WithDeserializer>::Deserializer::init(
13465 reader, event,
13466 )?;
13467 return self.handle_restriction(reader, Default::default(), output, &mut *fallback);
13468 }
13469 if matches!(
13470 reader.resolve_local_name(x.name(), &super::NS_XS),
13471 Some(b"extension")
13472 ) {
13473 let output =
13474 <super::ExtensionType as WithDeserializer>::Deserializer::init(reader, event)?;
13475 return self.handle_extension(reader, Default::default(), output, &mut *fallback);
13476 }
13477 *self = Self::Init__;
13478 Ok(ElementHandlerOutput::return_to_parent(event, false))
13479 }
13480 fn store_annotation(
13481 values: &mut Option<super::Annotation>,
13482 value: super::Annotation,
13483 ) -> Result<(), Error> {
13484 if values.is_some() {
13485 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
13486 b"annotation",
13487 )))?;
13488 }
13489 *values = Some(value);
13490 Ok(())
13491 }
13492 fn store_restriction(
13493 values: &mut Option<super::RestrictionType>,
13494 value: super::RestrictionType,
13495 ) -> Result<(), Error> {
13496 if values.is_some() {
13497 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
13498 b"restriction",
13499 )))?;
13500 }
13501 *values = Some(value);
13502 Ok(())
13503 }
13504 fn store_extension(
13505 values: &mut Option<super::ExtensionType>,
13506 value: super::ExtensionType,
13507 ) -> Result<(), Error> {
13508 if values.is_some() {
13509 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
13510 b"extension",
13511 )))?;
13512 }
13513 *values = Some(value);
13514 Ok(())
13515 }
13516 fn handle_annotation<'de, R>(
13517 &mut self,
13518 reader: &R,
13519 mut values: Option<super::Annotation>,
13520 output: DeserializerOutput<'de, super::Annotation>,
13521 fallback: &mut Option<Self>,
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 *self = match fallback.take() {
13533 None => Self::Init__,
13534 Some(Self::Annotation(_, Some(deserializer))) => {
13535 Self::Annotation(values, Some(deserializer))
13536 }
13537 _ => unreachable!(),
13538 };
13539 return Ok(ElementHandlerOutput::break_(event, allow_any));
13540 }
13541 match fallback.take() {
13542 None => (),
13543 Some(Self::Annotation(_, Some(deserializer))) => {
13544 let data = deserializer.finish(reader)?;
13545 Self::store_annotation(&mut values, data)?;
13546 }
13547 Some(_) => unreachable!(),
13548 }
13549 Ok(match artifact {
13550 DeserializerArtifact::None => unreachable!(),
13551 DeserializerArtifact::Data(data) => {
13552 Self::store_annotation(&mut values, data)?;
13553 let data = Self::Annotation(values, None).finish(reader)?;
13554 *self = Self::Done__(data);
13555 ElementHandlerOutput::Break { event, allow_any }
13556 }
13557 DeserializerArtifact::Deserializer(deserializer) => {
13558 *self = Self::Annotation(values, Some(deserializer));
13559 ElementHandlerOutput::from_event_end(event, allow_any)
13560 }
13561 })
13562 }
13563 fn handle_restriction<'de, R>(
13564 &mut self,
13565 reader: &R,
13566 mut values: Option<super::RestrictionType>,
13567 output: DeserializerOutput<'de, super::RestrictionType>,
13568 fallback: &mut Option<Self>,
13569 ) -> Result<ElementHandlerOutput<'de>, Error>
13570 where
13571 R: DeserializeReader,
13572 {
13573 let DeserializerOutput {
13574 artifact,
13575 event,
13576 allow_any,
13577 } = output;
13578 if artifact.is_none() {
13579 *self = match fallback.take() {
13580 None => Self::Init__,
13581 Some(Self::Restriction(_, Some(deserializer))) => {
13582 Self::Restriction(values, Some(deserializer))
13583 }
13584 _ => unreachable!(),
13585 };
13586 return Ok(ElementHandlerOutput::break_(event, allow_any));
13587 }
13588 match fallback.take() {
13589 None => (),
13590 Some(Self::Restriction(_, Some(deserializer))) => {
13591 let data = deserializer.finish(reader)?;
13592 Self::store_restriction(&mut values, data)?;
13593 }
13594 Some(_) => unreachable!(),
13595 }
13596 Ok(match artifact {
13597 DeserializerArtifact::None => unreachable!(),
13598 DeserializerArtifact::Data(data) => {
13599 Self::store_restriction(&mut values, data)?;
13600 let data = Self::Restriction(values, None).finish(reader)?;
13601 *self = Self::Done__(data);
13602 ElementHandlerOutput::Break { event, allow_any }
13603 }
13604 DeserializerArtifact::Deserializer(deserializer) => {
13605 *self = Self::Restriction(values, Some(deserializer));
13606 ElementHandlerOutput::from_event_end(event, allow_any)
13607 }
13608 })
13609 }
13610 fn handle_extension<'de, R>(
13611 &mut self,
13612 reader: &R,
13613 mut values: Option<super::ExtensionType>,
13614 output: DeserializerOutput<'de, super::ExtensionType>,
13615 fallback: &mut Option<Self>,
13616 ) -> Result<ElementHandlerOutput<'de>, Error>
13617 where
13618 R: DeserializeReader,
13619 {
13620 let DeserializerOutput {
13621 artifact,
13622 event,
13623 allow_any,
13624 } = output;
13625 if artifact.is_none() {
13626 *self = match fallback.take() {
13627 None => Self::Init__,
13628 Some(Self::Extension(_, Some(deserializer))) => {
13629 Self::Extension(values, Some(deserializer))
13630 }
13631 _ => unreachable!(),
13632 };
13633 return Ok(ElementHandlerOutput::break_(event, allow_any));
13634 }
13635 match fallback.take() {
13636 None => (),
13637 Some(Self::Extension(_, Some(deserializer))) => {
13638 let data = deserializer.finish(reader)?;
13639 Self::store_extension(&mut values, data)?;
13640 }
13641 Some(_) => unreachable!(),
13642 }
13643 Ok(match artifact {
13644 DeserializerArtifact::None => unreachable!(),
13645 DeserializerArtifact::Data(data) => {
13646 Self::store_extension(&mut values, data)?;
13647 let data = Self::Extension(values, None).finish(reader)?;
13648 *self = Self::Done__(data);
13649 ElementHandlerOutput::Break { event, allow_any }
13650 }
13651 DeserializerArtifact::Deserializer(deserializer) => {
13652 *self = Self::Extension(values, Some(deserializer));
13653 ElementHandlerOutput::from_event_end(event, allow_any)
13654 }
13655 })
13656 }
13657 }
13658 impl<'de> Deserializer<'de, super::SimpleContentContent> for SimpleContentContentDeserializer {
13659 fn init<R>(
13660 reader: &R,
13661 event: Event<'de>,
13662 ) -> DeserializerResult<'de, super::SimpleContentContent>
13663 where
13664 R: DeserializeReader,
13665 {
13666 let deserializer = Self::Init__;
13667 let mut output = deserializer.next(reader, event)?;
13668 output.artifact = match output.artifact {
13669 DeserializerArtifact::Deserializer(Self::Init__) => DeserializerArtifact::None,
13670 artifact => artifact,
13671 };
13672 Ok(output)
13673 }
13674 fn next<R>(
13675 mut self,
13676 reader: &R,
13677 event: Event<'de>,
13678 ) -> DeserializerResult<'de, super::SimpleContentContent>
13679 where
13680 R: DeserializeReader,
13681 {
13682 let mut event = event;
13683 let mut fallback = None;
13684 let (event, allow_any) = loop {
13685 let state = replace(&mut self, Self::Unknown__);
13686 event = match (state, event) {
13687 (Self::Annotation(values, Some(deserializer)), event) => {
13688 let output = deserializer.next(reader, event)?;
13689 match self.handle_annotation(reader, values, output, &mut fallback)? {
13690 ElementHandlerOutput::Break { event, allow_any } => {
13691 break (event, allow_any)
13692 }
13693 ElementHandlerOutput::Continue { event, .. } => event,
13694 }
13695 }
13696 (Self::Restriction(values, Some(deserializer)), event) => {
13697 let output = deserializer.next(reader, event)?;
13698 match self.handle_restriction(reader, values, output, &mut fallback)? {
13699 ElementHandlerOutput::Break { event, allow_any } => {
13700 break (event, allow_any)
13701 }
13702 ElementHandlerOutput::Continue { event, .. } => event,
13703 }
13704 }
13705 (Self::Extension(values, Some(deserializer)), event) => {
13706 let output = deserializer.next(reader, event)?;
13707 match self.handle_extension(reader, values, output, &mut fallback)? {
13708 ElementHandlerOutput::Break { event, allow_any } => {
13709 break (event, allow_any)
13710 }
13711 ElementHandlerOutput::Continue { event, .. } => event,
13712 }
13713 }
13714 (state, event @ Event::End(_)) => {
13715 return Ok(DeserializerOutput {
13716 artifact: DeserializerArtifact::Data(state.finish(reader)?),
13717 event: DeserializerEvent::Continue(event),
13718 allow_any: false,
13719 });
13720 }
13721 (Self::Init__, event) => {
13722 match self.find_suitable(reader, event, &mut fallback)? {
13723 ElementHandlerOutput::Break { event, allow_any } => {
13724 break (event, allow_any)
13725 }
13726 ElementHandlerOutput::Continue { event, .. } => event,
13727 }
13728 }
13729 (Self::Annotation(values, None), event) => {
13730 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
13731 reader, event,
13732 )?;
13733 match self.handle_annotation(reader, values, output, &mut fallback)? {
13734 ElementHandlerOutput::Break { event, allow_any } => {
13735 break (event, allow_any)
13736 }
13737 ElementHandlerOutput::Continue { event, .. } => event,
13738 }
13739 }
13740 (Self::Restriction(values, None), event) => {
13741 let output =
13742 <super::RestrictionType as WithDeserializer>::Deserializer::init(
13743 reader, event,
13744 )?;
13745 match self.handle_restriction(reader, values, output, &mut fallback)? {
13746 ElementHandlerOutput::Break { event, allow_any } => {
13747 break (event, allow_any)
13748 }
13749 ElementHandlerOutput::Continue { event, .. } => event,
13750 }
13751 }
13752 (Self::Extension(values, None), event) => {
13753 let output =
13754 <super::ExtensionType as WithDeserializer>::Deserializer::init(
13755 reader, event,
13756 )?;
13757 match self.handle_extension(reader, values, output, &mut fallback)? {
13758 ElementHandlerOutput::Break { event, allow_any } => {
13759 break (event, allow_any)
13760 }
13761 ElementHandlerOutput::Continue { event, .. } => event,
13762 }
13763 }
13764 (s @ Self::Done__(_), event) => {
13765 self = s;
13766 break (DeserializerEvent::Continue(event), false);
13767 }
13768 (Self::Unknown__, _) => unreachable!(),
13769 }
13770 };
13771 let artifact = match self {
13772 Self::Done__(data) => DeserializerArtifact::Data(data),
13773 deserializer => DeserializerArtifact::Deserializer(deserializer),
13774 };
13775 Ok(DeserializerOutput {
13776 artifact,
13777 event,
13778 allow_any,
13779 })
13780 }
13781 fn finish<R>(self, reader: &R) -> Result<super::SimpleContentContent, Error>
13782 where
13783 R: DeserializeReader,
13784 {
13785 match self {
13786 Self::Init__ => Err(ErrorKind::MissingContent.into()),
13787 Self::Annotation(mut values, deserializer) => {
13788 if let Some(deserializer) = deserializer {
13789 let value = deserializer.finish(reader)?;
13790 Self::store_annotation(&mut values, value)?;
13791 }
13792 Ok(super::SimpleContentContent::Annotation(values.ok_or_else(
13793 || ErrorKind::MissingElement("annotation".into()),
13794 )?))
13795 }
13796 Self::Restriction(mut values, deserializer) => {
13797 if let Some(deserializer) = deserializer {
13798 let value = deserializer.finish(reader)?;
13799 Self::store_restriction(&mut values, value)?;
13800 }
13801 Ok(super::SimpleContentContent::Restriction(
13802 values.ok_or_else(|| ErrorKind::MissingElement("restriction".into()))?,
13803 ))
13804 }
13805 Self::Extension(mut values, deserializer) => {
13806 if let Some(deserializer) = deserializer {
13807 let value = deserializer.finish(reader)?;
13808 Self::store_extension(&mut values, value)?;
13809 }
13810 Ok(super::SimpleContentContent::Extension(values.ok_or_else(
13811 || ErrorKind::MissingElement("extension".into()),
13812 )?))
13813 }
13814 Self::Done__(data) => Ok(data),
13815 Self::Unknown__ => unreachable!(),
13816 }
13817 }
13818 }
13819 #[derive(Debug)]
13820 pub struct ComplexContentDeserializer {
13821 id: Option<String>,
13822 mixed: Option<bool>,
13823 content: Vec<super::ComplexContentContent>,
13824 state: Box<ComplexContentDeserializerState>,
13825 }
13826 #[derive(Debug)]
13827 enum ComplexContentDeserializerState {
13828 Init__,
13829 Next__,
13830 Content__(<super::ComplexContentContent as WithDeserializer>::Deserializer),
13831 Unknown__,
13832 }
13833 impl ComplexContentDeserializer {
13834 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
13835 where
13836 R: DeserializeReader,
13837 {
13838 let mut id: Option<String> = None;
13839 let mut mixed: Option<bool> = None;
13840 for attrib in filter_xmlns_attributes(bytes_start) {
13841 let attrib = attrib?;
13842 if matches!(
13843 reader.resolve_local_name(attrib.key, &super::NS_XS),
13844 Some(b"id")
13845 ) {
13846 reader.read_attrib(&mut id, b"id", &attrib.value)?;
13847 } else if matches!(
13848 reader.resolve_local_name(attrib.key, &super::NS_XS),
13849 Some(b"mixed")
13850 ) {
13851 reader.read_attrib(&mut mixed, b"mixed", &attrib.value)?;
13852 }
13853 }
13854 Ok(Self {
13855 id: id,
13856 mixed: mixed,
13857 content: Vec::new(),
13858 state: Box::new(ComplexContentDeserializerState::Init__),
13859 })
13860 }
13861 fn finish_state<R>(
13862 &mut self,
13863 reader: &R,
13864 state: ComplexContentDeserializerState,
13865 ) -> Result<(), Error>
13866 where
13867 R: DeserializeReader,
13868 {
13869 if let ComplexContentDeserializerState::Content__(deserializer) = state {
13870 self.store_content(deserializer.finish(reader)?)?;
13871 }
13872 Ok(())
13873 }
13874 fn store_content(&mut self, value: super::ComplexContentContent) -> Result<(), Error> {
13875 self.content.push(value);
13876 Ok(())
13877 }
13878 fn handle_content<'de, R>(
13879 &mut self,
13880 reader: &R,
13881 output: DeserializerOutput<'de, super::ComplexContentContent>,
13882 fallback: &mut Option<ComplexContentDeserializerState>,
13883 ) -> Result<ElementHandlerOutput<'de>, Error>
13884 where
13885 R: DeserializeReader,
13886 {
13887 let DeserializerOutput {
13888 artifact,
13889 event,
13890 allow_any,
13891 } = output;
13892 if artifact.is_none() {
13893 *self.state = fallback
13894 .take()
13895 .unwrap_or(ComplexContentDeserializerState::Next__);
13896 return Ok(ElementHandlerOutput::break_(event, allow_any));
13897 }
13898 if let Some(fallback) = fallback.take() {
13899 self.finish_state(reader, fallback)?;
13900 }
13901 Ok(match artifact {
13902 DeserializerArtifact::None => unreachable!(),
13903 DeserializerArtifact::Data(data) => {
13904 self.store_content(data)?;
13905 *self.state = ComplexContentDeserializerState::Next__;
13906 ElementHandlerOutput::from_event(event, allow_any)
13907 }
13908 DeserializerArtifact::Deserializer(deserializer) => {
13909 let ret = ElementHandlerOutput::from_event(event, allow_any);
13910 match &ret {
13911 ElementHandlerOutput::Continue { .. } => {
13912 fallback.get_or_insert(ComplexContentDeserializerState::Content__(
13913 deserializer,
13914 ));
13915 *self.state = ComplexContentDeserializerState::Next__;
13916 }
13917 ElementHandlerOutput::Break { .. } => {
13918 *self.state = ComplexContentDeserializerState::Content__(deserializer);
13919 }
13920 }
13921 ret
13922 }
13923 })
13924 }
13925 }
13926 impl<'de> Deserializer<'de, super::ComplexContent> for ComplexContentDeserializer {
13927 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::ComplexContent>
13928 where
13929 R: DeserializeReader,
13930 {
13931 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
13932 }
13933 fn next<R>(
13934 mut self,
13935 reader: &R,
13936 event: Event<'de>,
13937 ) -> DeserializerResult<'de, super::ComplexContent>
13938 where
13939 R: DeserializeReader,
13940 {
13941 use ComplexContentDeserializerState as S;
13942 let mut event = event;
13943 let mut fallback = None;
13944 let (event, allow_any) = loop {
13945 let state = replace(&mut *self.state, S::Unknown__);
13946 event = match (state, event) {
13947 (S::Content__(deserializer), event) => {
13948 let output = deserializer.next(reader, event)?;
13949 match self.handle_content(reader, output, &mut fallback)? {
13950 ElementHandlerOutput::Break { event, allow_any } => {
13951 break (event, allow_any)
13952 }
13953 ElementHandlerOutput::Continue { event, .. } => event,
13954 }
13955 }
13956 (_, Event::End(_)) => {
13957 return Ok(DeserializerOutput {
13958 artifact: DeserializerArtifact::Data(self.finish(reader)?),
13959 event: DeserializerEvent::None,
13960 allow_any: false,
13961 });
13962 }
13963 (old_state @ (S::Init__ | S::Next__), event) => {
13964 let output =
13965 <super::ComplexContentContent as WithDeserializer>::Deserializer::init(
13966 reader, event,
13967 )?;
13968 match self.handle_content(reader, output, &mut fallback)? {
13969 ElementHandlerOutput::Break { event, allow_any } => {
13970 if matches!(&*self.state, S::Unknown__) {
13971 *self.state = old_state;
13972 }
13973 break (event, allow_any);
13974 }
13975 ElementHandlerOutput::Continue { event, .. } => event,
13976 }
13977 }
13978 (S::Unknown__, _) => unreachable!(),
13979 }
13980 };
13981 Ok(DeserializerOutput {
13982 artifact: DeserializerArtifact::Deserializer(self),
13983 event,
13984 allow_any,
13985 })
13986 }
13987 fn finish<R>(mut self, reader: &R) -> Result<super::ComplexContent, Error>
13988 where
13989 R: DeserializeReader,
13990 {
13991 let state = replace(&mut *self.state, ComplexContentDeserializerState::Unknown__);
13992 self.finish_state(reader, state)?;
13993 Ok(super::ComplexContent {
13994 id: self.id,
13995 mixed: self.mixed,
13996 content: self.content,
13997 })
13998 }
13999 }
14000 #[derive(Debug)]
14001 pub enum ComplexContentContentDeserializer {
14002 Init__,
14003 Annotation(
14004 Option<super::Annotation>,
14005 Option<<super::Annotation as WithDeserializer>::Deserializer>,
14006 ),
14007 Restriction(
14008 Option<super::RestrictionType>,
14009 Option<<super::RestrictionType as WithDeserializer>::Deserializer>,
14010 ),
14011 Extension(
14012 Option<super::ExtensionType>,
14013 Option<<super::ExtensionType as WithDeserializer>::Deserializer>,
14014 ),
14015 Done__(super::ComplexContentContent),
14016 Unknown__,
14017 }
14018 impl ComplexContentContentDeserializer {
14019 fn find_suitable<'de, R>(
14020 &mut self,
14021 reader: &R,
14022 event: Event<'de>,
14023 fallback: &mut Option<ComplexContentContentDeserializer>,
14024 ) -> Result<ElementHandlerOutput<'de>, Error>
14025 where
14026 R: DeserializeReader,
14027 {
14028 let (Event::Start(x) | Event::Empty(x)) = &event else {
14029 *self = Self::Init__;
14030 return Ok(ElementHandlerOutput::return_to_parent(event, false));
14031 };
14032 if matches!(
14033 reader.resolve_local_name(x.name(), &super::NS_XS),
14034 Some(b"annotation")
14035 ) {
14036 let output =
14037 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
14038 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
14039 }
14040 if matches!(
14041 reader.resolve_local_name(x.name(), &super::NS_XS),
14042 Some(b"restriction")
14043 ) {
14044 let output = <super::RestrictionType as WithDeserializer>::Deserializer::init(
14045 reader, event,
14046 )?;
14047 return self.handle_restriction(reader, Default::default(), output, &mut *fallback);
14048 }
14049 if matches!(
14050 reader.resolve_local_name(x.name(), &super::NS_XS),
14051 Some(b"extension")
14052 ) {
14053 let output =
14054 <super::ExtensionType as WithDeserializer>::Deserializer::init(reader, event)?;
14055 return self.handle_extension(reader, Default::default(), output, &mut *fallback);
14056 }
14057 *self = Self::Init__;
14058 Ok(ElementHandlerOutput::return_to_parent(event, false))
14059 }
14060 fn store_annotation(
14061 values: &mut Option<super::Annotation>,
14062 value: super::Annotation,
14063 ) -> Result<(), Error> {
14064 if values.is_some() {
14065 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
14066 b"annotation",
14067 )))?;
14068 }
14069 *values = Some(value);
14070 Ok(())
14071 }
14072 fn store_restriction(
14073 values: &mut Option<super::RestrictionType>,
14074 value: super::RestrictionType,
14075 ) -> Result<(), Error> {
14076 if values.is_some() {
14077 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
14078 b"restriction",
14079 )))?;
14080 }
14081 *values = Some(value);
14082 Ok(())
14083 }
14084 fn store_extension(
14085 values: &mut Option<super::ExtensionType>,
14086 value: super::ExtensionType,
14087 ) -> Result<(), Error> {
14088 if values.is_some() {
14089 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
14090 b"extension",
14091 )))?;
14092 }
14093 *values = Some(value);
14094 Ok(())
14095 }
14096 fn handle_annotation<'de, R>(
14097 &mut self,
14098 reader: &R,
14099 mut values: Option<super::Annotation>,
14100 output: DeserializerOutput<'de, super::Annotation>,
14101 fallback: &mut Option<Self>,
14102 ) -> Result<ElementHandlerOutput<'de>, Error>
14103 where
14104 R: DeserializeReader,
14105 {
14106 let DeserializerOutput {
14107 artifact,
14108 event,
14109 allow_any,
14110 } = output;
14111 if artifact.is_none() {
14112 *self = match fallback.take() {
14113 None => Self::Init__,
14114 Some(Self::Annotation(_, Some(deserializer))) => {
14115 Self::Annotation(values, Some(deserializer))
14116 }
14117 _ => unreachable!(),
14118 };
14119 return Ok(ElementHandlerOutput::break_(event, allow_any));
14120 }
14121 match fallback.take() {
14122 None => (),
14123 Some(Self::Annotation(_, Some(deserializer))) => {
14124 let data = deserializer.finish(reader)?;
14125 Self::store_annotation(&mut values, data)?;
14126 }
14127 Some(_) => unreachable!(),
14128 }
14129 Ok(match artifact {
14130 DeserializerArtifact::None => unreachable!(),
14131 DeserializerArtifact::Data(data) => {
14132 Self::store_annotation(&mut values, data)?;
14133 let data = Self::Annotation(values, None).finish(reader)?;
14134 *self = Self::Done__(data);
14135 ElementHandlerOutput::Break { event, allow_any }
14136 }
14137 DeserializerArtifact::Deserializer(deserializer) => {
14138 *self = Self::Annotation(values, Some(deserializer));
14139 ElementHandlerOutput::from_event_end(event, allow_any)
14140 }
14141 })
14142 }
14143 fn handle_restriction<'de, R>(
14144 &mut self,
14145 reader: &R,
14146 mut values: Option<super::RestrictionType>,
14147 output: DeserializerOutput<'de, super::RestrictionType>,
14148 fallback: &mut Option<Self>,
14149 ) -> Result<ElementHandlerOutput<'de>, Error>
14150 where
14151 R: DeserializeReader,
14152 {
14153 let DeserializerOutput {
14154 artifact,
14155 event,
14156 allow_any,
14157 } = output;
14158 if artifact.is_none() {
14159 *self = match fallback.take() {
14160 None => Self::Init__,
14161 Some(Self::Restriction(_, Some(deserializer))) => {
14162 Self::Restriction(values, Some(deserializer))
14163 }
14164 _ => unreachable!(),
14165 };
14166 return Ok(ElementHandlerOutput::break_(event, allow_any));
14167 }
14168 match fallback.take() {
14169 None => (),
14170 Some(Self::Restriction(_, Some(deserializer))) => {
14171 let data = deserializer.finish(reader)?;
14172 Self::store_restriction(&mut values, data)?;
14173 }
14174 Some(_) => unreachable!(),
14175 }
14176 Ok(match artifact {
14177 DeserializerArtifact::None => unreachable!(),
14178 DeserializerArtifact::Data(data) => {
14179 Self::store_restriction(&mut values, data)?;
14180 let data = Self::Restriction(values, None).finish(reader)?;
14181 *self = Self::Done__(data);
14182 ElementHandlerOutput::Break { event, allow_any }
14183 }
14184 DeserializerArtifact::Deserializer(deserializer) => {
14185 *self = Self::Restriction(values, Some(deserializer));
14186 ElementHandlerOutput::from_event_end(event, allow_any)
14187 }
14188 })
14189 }
14190 fn handle_extension<'de, R>(
14191 &mut self,
14192 reader: &R,
14193 mut values: Option<super::ExtensionType>,
14194 output: DeserializerOutput<'de, super::ExtensionType>,
14195 fallback: &mut Option<Self>,
14196 ) -> Result<ElementHandlerOutput<'de>, Error>
14197 where
14198 R: DeserializeReader,
14199 {
14200 let DeserializerOutput {
14201 artifact,
14202 event,
14203 allow_any,
14204 } = output;
14205 if artifact.is_none() {
14206 *self = match fallback.take() {
14207 None => Self::Init__,
14208 Some(Self::Extension(_, Some(deserializer))) => {
14209 Self::Extension(values, Some(deserializer))
14210 }
14211 _ => unreachable!(),
14212 };
14213 return Ok(ElementHandlerOutput::break_(event, allow_any));
14214 }
14215 match fallback.take() {
14216 None => (),
14217 Some(Self::Extension(_, Some(deserializer))) => {
14218 let data = deserializer.finish(reader)?;
14219 Self::store_extension(&mut values, data)?;
14220 }
14221 Some(_) => unreachable!(),
14222 }
14223 Ok(match artifact {
14224 DeserializerArtifact::None => unreachable!(),
14225 DeserializerArtifact::Data(data) => {
14226 Self::store_extension(&mut values, data)?;
14227 let data = Self::Extension(values, None).finish(reader)?;
14228 *self = Self::Done__(data);
14229 ElementHandlerOutput::Break { event, allow_any }
14230 }
14231 DeserializerArtifact::Deserializer(deserializer) => {
14232 *self = Self::Extension(values, Some(deserializer));
14233 ElementHandlerOutput::from_event_end(event, allow_any)
14234 }
14235 })
14236 }
14237 }
14238 impl<'de> Deserializer<'de, super::ComplexContentContent> for ComplexContentContentDeserializer {
14239 fn init<R>(
14240 reader: &R,
14241 event: Event<'de>,
14242 ) -> DeserializerResult<'de, super::ComplexContentContent>
14243 where
14244 R: DeserializeReader,
14245 {
14246 let deserializer = Self::Init__;
14247 let mut output = deserializer.next(reader, event)?;
14248 output.artifact = match output.artifact {
14249 DeserializerArtifact::Deserializer(Self::Init__) => DeserializerArtifact::None,
14250 artifact => artifact,
14251 };
14252 Ok(output)
14253 }
14254 fn next<R>(
14255 mut self,
14256 reader: &R,
14257 event: Event<'de>,
14258 ) -> DeserializerResult<'de, super::ComplexContentContent>
14259 where
14260 R: DeserializeReader,
14261 {
14262 let mut event = event;
14263 let mut fallback = None;
14264 let (event, allow_any) = loop {
14265 let state = replace(&mut self, Self::Unknown__);
14266 event = match (state, event) {
14267 (Self::Annotation(values, Some(deserializer)), event) => {
14268 let output = deserializer.next(reader, event)?;
14269 match self.handle_annotation(reader, values, output, &mut fallback)? {
14270 ElementHandlerOutput::Break { event, allow_any } => {
14271 break (event, allow_any)
14272 }
14273 ElementHandlerOutput::Continue { event, .. } => event,
14274 }
14275 }
14276 (Self::Restriction(values, Some(deserializer)), event) => {
14277 let output = deserializer.next(reader, event)?;
14278 match self.handle_restriction(reader, values, output, &mut fallback)? {
14279 ElementHandlerOutput::Break { event, allow_any } => {
14280 break (event, allow_any)
14281 }
14282 ElementHandlerOutput::Continue { event, .. } => event,
14283 }
14284 }
14285 (Self::Extension(values, Some(deserializer)), event) => {
14286 let output = deserializer.next(reader, event)?;
14287 match self.handle_extension(reader, values, output, &mut fallback)? {
14288 ElementHandlerOutput::Break { event, allow_any } => {
14289 break (event, allow_any)
14290 }
14291 ElementHandlerOutput::Continue { event, .. } => event,
14292 }
14293 }
14294 (state, event @ Event::End(_)) => {
14295 return Ok(DeserializerOutput {
14296 artifact: DeserializerArtifact::Data(state.finish(reader)?),
14297 event: DeserializerEvent::Continue(event),
14298 allow_any: false,
14299 });
14300 }
14301 (Self::Init__, event) => {
14302 match self.find_suitable(reader, event, &mut fallback)? {
14303 ElementHandlerOutput::Break { event, allow_any } => {
14304 break (event, allow_any)
14305 }
14306 ElementHandlerOutput::Continue { event, .. } => event,
14307 }
14308 }
14309 (Self::Annotation(values, None), event) => {
14310 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
14311 reader, event,
14312 )?;
14313 match self.handle_annotation(reader, values, output, &mut fallback)? {
14314 ElementHandlerOutput::Break { event, allow_any } => {
14315 break (event, allow_any)
14316 }
14317 ElementHandlerOutput::Continue { event, .. } => event,
14318 }
14319 }
14320 (Self::Restriction(values, None), event) => {
14321 let output =
14322 <super::RestrictionType as WithDeserializer>::Deserializer::init(
14323 reader, event,
14324 )?;
14325 match self.handle_restriction(reader, values, output, &mut fallback)? {
14326 ElementHandlerOutput::Break { event, allow_any } => {
14327 break (event, allow_any)
14328 }
14329 ElementHandlerOutput::Continue { event, .. } => event,
14330 }
14331 }
14332 (Self::Extension(values, None), event) => {
14333 let output =
14334 <super::ExtensionType as WithDeserializer>::Deserializer::init(
14335 reader, event,
14336 )?;
14337 match self.handle_extension(reader, values, output, &mut fallback)? {
14338 ElementHandlerOutput::Break { event, allow_any } => {
14339 break (event, allow_any)
14340 }
14341 ElementHandlerOutput::Continue { event, .. } => event,
14342 }
14343 }
14344 (s @ Self::Done__(_), event) => {
14345 self = s;
14346 break (DeserializerEvent::Continue(event), false);
14347 }
14348 (Self::Unknown__, _) => unreachable!(),
14349 }
14350 };
14351 let artifact = match self {
14352 Self::Done__(data) => DeserializerArtifact::Data(data),
14353 deserializer => DeserializerArtifact::Deserializer(deserializer),
14354 };
14355 Ok(DeserializerOutput {
14356 artifact,
14357 event,
14358 allow_any,
14359 })
14360 }
14361 fn finish<R>(self, reader: &R) -> Result<super::ComplexContentContent, Error>
14362 where
14363 R: DeserializeReader,
14364 {
14365 match self {
14366 Self::Init__ => Err(ErrorKind::MissingContent.into()),
14367 Self::Annotation(mut values, deserializer) => {
14368 if let Some(deserializer) = deserializer {
14369 let value = deserializer.finish(reader)?;
14370 Self::store_annotation(&mut values, value)?;
14371 }
14372 Ok(super::ComplexContentContent::Annotation(
14373 values.ok_or_else(|| ErrorKind::MissingElement("annotation".into()))?,
14374 ))
14375 }
14376 Self::Restriction(mut values, deserializer) => {
14377 if let Some(deserializer) = deserializer {
14378 let value = deserializer.finish(reader)?;
14379 Self::store_restriction(&mut values, value)?;
14380 }
14381 Ok(super::ComplexContentContent::Restriction(
14382 values.ok_or_else(|| ErrorKind::MissingElement("restriction".into()))?,
14383 ))
14384 }
14385 Self::Extension(mut values, deserializer) => {
14386 if let Some(deserializer) = deserializer {
14387 let value = deserializer.finish(reader)?;
14388 Self::store_extension(&mut values, value)?;
14389 }
14390 Ok(super::ComplexContentContent::Extension(values.ok_or_else(
14391 || ErrorKind::MissingElement("extension".into()),
14392 )?))
14393 }
14394 Self::Done__(data) => Ok(data),
14395 Self::Unknown__ => unreachable!(),
14396 }
14397 }
14398 }
14399 #[derive(Debug)]
14400 pub struct OpenContentDeserializer {
14401 id: Option<String>,
14402 mode: super::OpenContentModeType,
14403 annotation: Option<super::Annotation>,
14404 any: Option<super::WildcardType>,
14405 state: Box<OpenContentDeserializerState>,
14406 }
14407 #[derive(Debug)]
14408 enum OpenContentDeserializerState {
14409 Init__,
14410 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
14411 Any(Option<<super::WildcardType as WithDeserializer>::Deserializer>),
14412 Done__,
14413 Unknown__,
14414 }
14415 impl OpenContentDeserializer {
14416 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
14417 where
14418 R: DeserializeReader,
14419 {
14420 let mut id: Option<String> = None;
14421 let mut mode: Option<super::OpenContentModeType> = None;
14422 for attrib in filter_xmlns_attributes(bytes_start) {
14423 let attrib = attrib?;
14424 if matches!(
14425 reader.resolve_local_name(attrib.key, &super::NS_XS),
14426 Some(b"id")
14427 ) {
14428 reader.read_attrib(&mut id, b"id", &attrib.value)?;
14429 } else if matches!(
14430 reader.resolve_local_name(attrib.key, &super::NS_XS),
14431 Some(b"mode")
14432 ) {
14433 reader.read_attrib(&mut mode, b"mode", &attrib.value)?;
14434 }
14435 }
14436 Ok(Self {
14437 id: id,
14438 mode: mode.unwrap_or_else(super::OpenContent::default_mode),
14439 annotation: None,
14440 any: None,
14441 state: Box::new(OpenContentDeserializerState::Init__),
14442 })
14443 }
14444 fn finish_state<R>(
14445 &mut self,
14446 reader: &R,
14447 state: OpenContentDeserializerState,
14448 ) -> Result<(), Error>
14449 where
14450 R: DeserializeReader,
14451 {
14452 use OpenContentDeserializerState as S;
14453 match state {
14454 S::Annotation(Some(deserializer)) => {
14455 self.store_annotation(deserializer.finish(reader)?)?
14456 }
14457 S::Any(Some(deserializer)) => self.store_any(deserializer.finish(reader)?)?,
14458 _ => (),
14459 }
14460 Ok(())
14461 }
14462 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
14463 if self.annotation.is_some() {
14464 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
14465 b"annotation",
14466 )))?;
14467 }
14468 self.annotation = Some(value);
14469 Ok(())
14470 }
14471 fn store_any(&mut self, value: super::WildcardType) -> Result<(), Error> {
14472 if self.any.is_some() {
14473 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"any")))?;
14474 }
14475 self.any = Some(value);
14476 Ok(())
14477 }
14478 fn handle_annotation<'de, R>(
14479 &mut self,
14480 reader: &R,
14481 output: DeserializerOutput<'de, super::Annotation>,
14482 fallback: &mut Option<OpenContentDeserializerState>,
14483 ) -> Result<ElementHandlerOutput<'de>, Error>
14484 where
14485 R: DeserializeReader,
14486 {
14487 let DeserializerOutput {
14488 artifact,
14489 event,
14490 allow_any,
14491 } = output;
14492 if artifact.is_none() {
14493 fallback.get_or_insert(OpenContentDeserializerState::Annotation(None));
14494 *self.state = OpenContentDeserializerState::Any(None);
14495 return Ok(ElementHandlerOutput::from_event(event, allow_any));
14496 }
14497 if let Some(fallback) = fallback.take() {
14498 self.finish_state(reader, fallback)?;
14499 }
14500 Ok(match artifact {
14501 DeserializerArtifact::None => unreachable!(),
14502 DeserializerArtifact::Data(data) => {
14503 self.store_annotation(data)?;
14504 *self.state = OpenContentDeserializerState::Any(None);
14505 ElementHandlerOutput::from_event(event, allow_any)
14506 }
14507 DeserializerArtifact::Deserializer(deserializer) => {
14508 let ret = ElementHandlerOutput::from_event(event, allow_any);
14509 match &ret {
14510 ElementHandlerOutput::Continue { .. } => {
14511 fallback.get_or_insert(OpenContentDeserializerState::Annotation(Some(
14512 deserializer,
14513 )));
14514 *self.state = OpenContentDeserializerState::Any(None);
14515 }
14516 ElementHandlerOutput::Break { .. } => {
14517 *self.state =
14518 OpenContentDeserializerState::Annotation(Some(deserializer));
14519 }
14520 }
14521 ret
14522 }
14523 })
14524 }
14525 fn handle_any<'de, R>(
14526 &mut self,
14527 reader: &R,
14528 output: DeserializerOutput<'de, super::WildcardType>,
14529 fallback: &mut Option<OpenContentDeserializerState>,
14530 ) -> Result<ElementHandlerOutput<'de>, Error>
14531 where
14532 R: DeserializeReader,
14533 {
14534 let DeserializerOutput {
14535 artifact,
14536 event,
14537 allow_any,
14538 } = output;
14539 if artifact.is_none() {
14540 fallback.get_or_insert(OpenContentDeserializerState::Any(None));
14541 *self.state = OpenContentDeserializerState::Done__;
14542 return Ok(ElementHandlerOutput::from_event(event, allow_any));
14543 }
14544 if let Some(fallback) = fallback.take() {
14545 self.finish_state(reader, fallback)?;
14546 }
14547 Ok(match artifact {
14548 DeserializerArtifact::None => unreachable!(),
14549 DeserializerArtifact::Data(data) => {
14550 self.store_any(data)?;
14551 *self.state = OpenContentDeserializerState::Done__;
14552 ElementHandlerOutput::from_event(event, allow_any)
14553 }
14554 DeserializerArtifact::Deserializer(deserializer) => {
14555 let ret = ElementHandlerOutput::from_event(event, allow_any);
14556 match &ret {
14557 ElementHandlerOutput::Continue { .. } => {
14558 fallback.get_or_insert(OpenContentDeserializerState::Any(Some(
14559 deserializer,
14560 )));
14561 *self.state = OpenContentDeserializerState::Done__;
14562 }
14563 ElementHandlerOutput::Break { .. } => {
14564 *self.state = OpenContentDeserializerState::Any(Some(deserializer));
14565 }
14566 }
14567 ret
14568 }
14569 })
14570 }
14571 }
14572 impl<'de> Deserializer<'de, super::OpenContent> for OpenContentDeserializer {
14573 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::OpenContent>
14574 where
14575 R: DeserializeReader,
14576 {
14577 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
14578 }
14579 fn next<R>(
14580 mut self,
14581 reader: &R,
14582 event: Event<'de>,
14583 ) -> DeserializerResult<'de, super::OpenContent>
14584 where
14585 R: DeserializeReader,
14586 {
14587 use OpenContentDeserializerState as S;
14588 let mut event = event;
14589 let mut fallback = None;
14590 let mut allow_any_element = false;
14591 let (event, allow_any) = loop {
14592 let state = replace(&mut *self.state, S::Unknown__);
14593 event = match (state, event) {
14594 (S::Annotation(Some(deserializer)), event) => {
14595 let output = deserializer.next(reader, event)?;
14596 match self.handle_annotation(reader, output, &mut fallback)? {
14597 ElementHandlerOutput::Continue { event, allow_any } => {
14598 allow_any_element = allow_any_element || allow_any;
14599 event
14600 }
14601 ElementHandlerOutput::Break { event, allow_any } => {
14602 break (event, allow_any)
14603 }
14604 }
14605 }
14606 (S::Any(Some(deserializer)), event) => {
14607 let output = deserializer.next(reader, event)?;
14608 match self.handle_any(reader, output, &mut fallback)? {
14609 ElementHandlerOutput::Continue { event, allow_any } => {
14610 allow_any_element = allow_any_element || allow_any;
14611 event
14612 }
14613 ElementHandlerOutput::Break { event, allow_any } => {
14614 break (event, allow_any)
14615 }
14616 }
14617 }
14618 (_, Event::End(_)) => {
14619 if let Some(fallback) = fallback.take() {
14620 self.finish_state(reader, fallback)?;
14621 }
14622 return Ok(DeserializerOutput {
14623 artifact: DeserializerArtifact::Data(self.finish(reader)?),
14624 event: DeserializerEvent::None,
14625 allow_any: false,
14626 });
14627 }
14628 (S::Init__, event) => {
14629 fallback.get_or_insert(S::Init__);
14630 *self.state = OpenContentDeserializerState::Annotation(None);
14631 event
14632 }
14633 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
14634 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
14635 let output =
14636 <super::Annotation as WithDeserializer>::Deserializer::init(
14637 reader, event,
14638 )?;
14639 match self.handle_annotation(reader, output, &mut fallback)? {
14640 ElementHandlerOutput::Continue { event, allow_any } => {
14641 allow_any_element = allow_any_element || allow_any;
14642 event
14643 }
14644 ElementHandlerOutput::Break { event, allow_any } => {
14645 break (event, allow_any)
14646 }
14647 }
14648 } else {
14649 *self.state = S::Any(None);
14650 allow_any_element = true;
14651 fallback.get_or_insert(S::Annotation(None));
14652 event
14653 }
14654 }
14655 (S::Any(None), event @ (Event::Start(_) | Event::Empty(_))) => {
14656 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"any") {
14657 let output =
14658 <super::WildcardType as WithDeserializer>::Deserializer::init(
14659 reader, event,
14660 )?;
14661 match self.handle_any(reader, output, &mut fallback)? {
14662 ElementHandlerOutput::Continue { event, allow_any } => {
14663 allow_any_element = allow_any_element || allow_any;
14664 event
14665 }
14666 ElementHandlerOutput::Break { event, allow_any } => {
14667 break (event, allow_any)
14668 }
14669 }
14670 } else {
14671 *self.state = S::Done__;
14672 allow_any_element = true;
14673 fallback.get_or_insert(S::Any(None));
14674 event
14675 }
14676 }
14677 (S::Done__, event) => {
14678 fallback.get_or_insert(S::Done__);
14679 break (DeserializerEvent::Continue(event), allow_any_element);
14680 }
14681 (S::Unknown__, _) => unreachable!(),
14682 (state, event) => {
14683 *self.state = state;
14684 break (DeserializerEvent::Break(event), false);
14685 }
14686 }
14687 };
14688 if let Some(fallback) = fallback {
14689 *self.state = fallback;
14690 }
14691 Ok(DeserializerOutput {
14692 artifact: DeserializerArtifact::Deserializer(self),
14693 event,
14694 allow_any,
14695 })
14696 }
14697 fn finish<R>(mut self, reader: &R) -> Result<super::OpenContent, Error>
14698 where
14699 R: DeserializeReader,
14700 {
14701 let state = replace(&mut *self.state, OpenContentDeserializerState::Unknown__);
14702 self.finish_state(reader, state)?;
14703 Ok(super::OpenContent {
14704 id: self.id,
14705 mode: self.mode,
14706 annotation: self.annotation,
14707 any: self.any,
14708 })
14709 }
14710 }
14711 #[derive(Debug)]
14712 pub struct AnyAttributeDeserializer {
14713 id: Option<String>,
14714 namespace: Option<super::NamespaceListType>,
14715 not_namespace: Option<super::BasicNamespaceListType>,
14716 process_contents: super::ProcessContentsType,
14717 not_q_name: Option<super::QnameListAType>,
14718 annotation: Option<super::Annotation>,
14719 state: Box<AnyAttributeDeserializerState>,
14720 }
14721 #[derive(Debug)]
14722 enum AnyAttributeDeserializerState {
14723 Init__,
14724 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
14725 Done__,
14726 Unknown__,
14727 }
14728 impl AnyAttributeDeserializer {
14729 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
14730 where
14731 R: DeserializeReader,
14732 {
14733 let mut id: Option<String> = None;
14734 let mut namespace: Option<super::NamespaceListType> = None;
14735 let mut not_namespace: Option<super::BasicNamespaceListType> = None;
14736 let mut process_contents: Option<super::ProcessContentsType> = None;
14737 let mut not_q_name: Option<super::QnameListAType> = None;
14738 for attrib in filter_xmlns_attributes(bytes_start) {
14739 let attrib = attrib?;
14740 if matches!(
14741 reader.resolve_local_name(attrib.key, &super::NS_XS),
14742 Some(b"id")
14743 ) {
14744 reader.read_attrib(&mut id, b"id", &attrib.value)?;
14745 } else if matches!(
14746 reader.resolve_local_name(attrib.key, &super::NS_XS),
14747 Some(b"namespace")
14748 ) {
14749 reader.read_attrib(&mut namespace, b"namespace", &attrib.value)?;
14750 } else if matches!(
14751 reader.resolve_local_name(attrib.key, &super::NS_XS),
14752 Some(b"notNamespace")
14753 ) {
14754 reader.read_attrib(&mut not_namespace, b"notNamespace", &attrib.value)?;
14755 } else if matches!(
14756 reader.resolve_local_name(attrib.key, &super::NS_XS),
14757 Some(b"processContents")
14758 ) {
14759 reader.read_attrib(&mut process_contents, b"processContents", &attrib.value)?;
14760 } else if matches!(
14761 reader.resolve_local_name(attrib.key, &super::NS_XS),
14762 Some(b"notQName")
14763 ) {
14764 reader.read_attrib(&mut not_q_name, b"notQName", &attrib.value)?;
14765 }
14766 }
14767 Ok(Self {
14768 id: id,
14769 namespace: namespace,
14770 not_namespace: not_namespace,
14771 process_contents: process_contents
14772 .unwrap_or_else(super::AnyAttribute::default_process_contents),
14773 not_q_name: not_q_name,
14774 annotation: None,
14775 state: Box::new(AnyAttributeDeserializerState::Init__),
14776 })
14777 }
14778 fn finish_state<R>(
14779 &mut self,
14780 reader: &R,
14781 state: AnyAttributeDeserializerState,
14782 ) -> Result<(), Error>
14783 where
14784 R: DeserializeReader,
14785 {
14786 use AnyAttributeDeserializerState as S;
14787 match state {
14788 S::Annotation(Some(deserializer)) => {
14789 self.store_annotation(deserializer.finish(reader)?)?
14790 }
14791 _ => (),
14792 }
14793 Ok(())
14794 }
14795 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
14796 if self.annotation.is_some() {
14797 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
14798 b"annotation",
14799 )))?;
14800 }
14801 self.annotation = Some(value);
14802 Ok(())
14803 }
14804 fn handle_annotation<'de, R>(
14805 &mut self,
14806 reader: &R,
14807 output: DeserializerOutput<'de, super::Annotation>,
14808 fallback: &mut Option<AnyAttributeDeserializerState>,
14809 ) -> Result<ElementHandlerOutput<'de>, Error>
14810 where
14811 R: DeserializeReader,
14812 {
14813 let DeserializerOutput {
14814 artifact,
14815 event,
14816 allow_any,
14817 } = output;
14818 if artifact.is_none() {
14819 fallback.get_or_insert(AnyAttributeDeserializerState::Annotation(None));
14820 *self.state = AnyAttributeDeserializerState::Done__;
14821 return Ok(ElementHandlerOutput::from_event(event, allow_any));
14822 }
14823 if let Some(fallback) = fallback.take() {
14824 self.finish_state(reader, fallback)?;
14825 }
14826 Ok(match artifact {
14827 DeserializerArtifact::None => unreachable!(),
14828 DeserializerArtifact::Data(data) => {
14829 self.store_annotation(data)?;
14830 *self.state = AnyAttributeDeserializerState::Done__;
14831 ElementHandlerOutput::from_event(event, allow_any)
14832 }
14833 DeserializerArtifact::Deserializer(deserializer) => {
14834 let ret = ElementHandlerOutput::from_event(event, allow_any);
14835 match &ret {
14836 ElementHandlerOutput::Continue { .. } => {
14837 fallback.get_or_insert(AnyAttributeDeserializerState::Annotation(
14838 Some(deserializer),
14839 ));
14840 *self.state = AnyAttributeDeserializerState::Done__;
14841 }
14842 ElementHandlerOutput::Break { .. } => {
14843 *self.state =
14844 AnyAttributeDeserializerState::Annotation(Some(deserializer));
14845 }
14846 }
14847 ret
14848 }
14849 })
14850 }
14851 }
14852 impl<'de> Deserializer<'de, super::AnyAttribute> for AnyAttributeDeserializer {
14853 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::AnyAttribute>
14854 where
14855 R: DeserializeReader,
14856 {
14857 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
14858 }
14859 fn next<R>(
14860 mut self,
14861 reader: &R,
14862 event: Event<'de>,
14863 ) -> DeserializerResult<'de, super::AnyAttribute>
14864 where
14865 R: DeserializeReader,
14866 {
14867 use AnyAttributeDeserializerState as S;
14868 let mut event = event;
14869 let mut fallback = None;
14870 let mut allow_any_element = false;
14871 let (event, allow_any) = loop {
14872 let state = replace(&mut *self.state, S::Unknown__);
14873 event = match (state, event) {
14874 (S::Annotation(Some(deserializer)), event) => {
14875 let output = deserializer.next(reader, event)?;
14876 match self.handle_annotation(reader, output, &mut fallback)? {
14877 ElementHandlerOutput::Continue { event, allow_any } => {
14878 allow_any_element = allow_any_element || allow_any;
14879 event
14880 }
14881 ElementHandlerOutput::Break { event, allow_any } => {
14882 break (event, allow_any)
14883 }
14884 }
14885 }
14886 (_, Event::End(_)) => {
14887 if let Some(fallback) = fallback.take() {
14888 self.finish_state(reader, fallback)?;
14889 }
14890 return Ok(DeserializerOutput {
14891 artifact: DeserializerArtifact::Data(self.finish(reader)?),
14892 event: DeserializerEvent::None,
14893 allow_any: false,
14894 });
14895 }
14896 (S::Init__, event) => {
14897 fallback.get_or_insert(S::Init__);
14898 *self.state = AnyAttributeDeserializerState::Annotation(None);
14899 event
14900 }
14901 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
14902 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
14903 let output =
14904 <super::Annotation as WithDeserializer>::Deserializer::init(
14905 reader, event,
14906 )?;
14907 match self.handle_annotation(reader, output, &mut fallback)? {
14908 ElementHandlerOutput::Continue { event, allow_any } => {
14909 allow_any_element = allow_any_element || allow_any;
14910 event
14911 }
14912 ElementHandlerOutput::Break { event, allow_any } => {
14913 break (event, allow_any)
14914 }
14915 }
14916 } else {
14917 *self.state = S::Done__;
14918 allow_any_element = true;
14919 fallback.get_or_insert(S::Annotation(None));
14920 event
14921 }
14922 }
14923 (S::Done__, event) => {
14924 fallback.get_or_insert(S::Done__);
14925 break (DeserializerEvent::Continue(event), allow_any_element);
14926 }
14927 (S::Unknown__, _) => unreachable!(),
14928 (state, event) => {
14929 *self.state = state;
14930 break (DeserializerEvent::Break(event), false);
14931 }
14932 }
14933 };
14934 if let Some(fallback) = fallback {
14935 *self.state = fallback;
14936 }
14937 Ok(DeserializerOutput {
14938 artifact: DeserializerArtifact::Deserializer(self),
14939 event,
14940 allow_any,
14941 })
14942 }
14943 fn finish<R>(mut self, reader: &R) -> Result<super::AnyAttribute, Error>
14944 where
14945 R: DeserializeReader,
14946 {
14947 let state = replace(&mut *self.state, AnyAttributeDeserializerState::Unknown__);
14948 self.finish_state(reader, state)?;
14949 Ok(super::AnyAttribute {
14950 id: self.id,
14951 namespace: self.namespace,
14952 not_namespace: self.not_namespace,
14953 process_contents: self.process_contents,
14954 not_q_name: self.not_q_name,
14955 annotation: self.annotation,
14956 })
14957 }
14958 }
14959 #[derive(Debug)]
14960 pub struct AssertionTypeDeserializer {
14961 id: Option<String>,
14962 test: Option<String>,
14963 xpath_default_namespace: Option<super::XpathDefaultNamespaceType>,
14964 annotation: Option<super::Annotation>,
14965 state: Box<AssertionTypeDeserializerState>,
14966 }
14967 #[derive(Debug)]
14968 enum AssertionTypeDeserializerState {
14969 Init__,
14970 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
14971 Done__,
14972 Unknown__,
14973 }
14974 impl AssertionTypeDeserializer {
14975 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
14976 where
14977 R: DeserializeReader,
14978 {
14979 let mut id: Option<String> = None;
14980 let mut test: Option<String> = None;
14981 let mut xpath_default_namespace: Option<super::XpathDefaultNamespaceType> = None;
14982 for attrib in filter_xmlns_attributes(bytes_start) {
14983 let attrib = attrib?;
14984 if matches!(
14985 reader.resolve_local_name(attrib.key, &super::NS_XS),
14986 Some(b"id")
14987 ) {
14988 reader.read_attrib(&mut id, b"id", &attrib.value)?;
14989 } else if matches!(
14990 reader.resolve_local_name(attrib.key, &super::NS_XS),
14991 Some(b"test")
14992 ) {
14993 reader.read_attrib(&mut test, b"test", &attrib.value)?;
14994 } else if matches!(
14995 reader.resolve_local_name(attrib.key, &super::NS_XS),
14996 Some(b"xpathDefaultNamespace")
14997 ) {
14998 reader.read_attrib(
14999 &mut xpath_default_namespace,
15000 b"xpathDefaultNamespace",
15001 &attrib.value,
15002 )?;
15003 }
15004 }
15005 Ok(Self {
15006 id: id,
15007 test: test,
15008 xpath_default_namespace: xpath_default_namespace,
15009 annotation: None,
15010 state: Box::new(AssertionTypeDeserializerState::Init__),
15011 })
15012 }
15013 fn finish_state<R>(
15014 &mut self,
15015 reader: &R,
15016 state: AssertionTypeDeserializerState,
15017 ) -> Result<(), Error>
15018 where
15019 R: DeserializeReader,
15020 {
15021 use AssertionTypeDeserializerState as S;
15022 match state {
15023 S::Annotation(Some(deserializer)) => {
15024 self.store_annotation(deserializer.finish(reader)?)?
15025 }
15026 _ => (),
15027 }
15028 Ok(())
15029 }
15030 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
15031 if self.annotation.is_some() {
15032 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
15033 b"annotation",
15034 )))?;
15035 }
15036 self.annotation = Some(value);
15037 Ok(())
15038 }
15039 fn handle_annotation<'de, R>(
15040 &mut self,
15041 reader: &R,
15042 output: DeserializerOutput<'de, super::Annotation>,
15043 fallback: &mut Option<AssertionTypeDeserializerState>,
15044 ) -> Result<ElementHandlerOutput<'de>, Error>
15045 where
15046 R: DeserializeReader,
15047 {
15048 let DeserializerOutput {
15049 artifact,
15050 event,
15051 allow_any,
15052 } = output;
15053 if artifact.is_none() {
15054 fallback.get_or_insert(AssertionTypeDeserializerState::Annotation(None));
15055 *self.state = AssertionTypeDeserializerState::Done__;
15056 return Ok(ElementHandlerOutput::from_event(event, allow_any));
15057 }
15058 if let Some(fallback) = fallback.take() {
15059 self.finish_state(reader, fallback)?;
15060 }
15061 Ok(match artifact {
15062 DeserializerArtifact::None => unreachable!(),
15063 DeserializerArtifact::Data(data) => {
15064 self.store_annotation(data)?;
15065 *self.state = AssertionTypeDeserializerState::Done__;
15066 ElementHandlerOutput::from_event(event, allow_any)
15067 }
15068 DeserializerArtifact::Deserializer(deserializer) => {
15069 let ret = ElementHandlerOutput::from_event(event, allow_any);
15070 match &ret {
15071 ElementHandlerOutput::Continue { .. } => {
15072 fallback.get_or_insert(AssertionTypeDeserializerState::Annotation(
15073 Some(deserializer),
15074 ));
15075 *self.state = AssertionTypeDeserializerState::Done__;
15076 }
15077 ElementHandlerOutput::Break { .. } => {
15078 *self.state =
15079 AssertionTypeDeserializerState::Annotation(Some(deserializer));
15080 }
15081 }
15082 ret
15083 }
15084 })
15085 }
15086 }
15087 impl<'de> Deserializer<'de, super::AssertionType> for AssertionTypeDeserializer {
15088 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::AssertionType>
15089 where
15090 R: DeserializeReader,
15091 {
15092 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
15093 }
15094 fn next<R>(
15095 mut self,
15096 reader: &R,
15097 event: Event<'de>,
15098 ) -> DeserializerResult<'de, super::AssertionType>
15099 where
15100 R: DeserializeReader,
15101 {
15102 use AssertionTypeDeserializerState as S;
15103 let mut event = event;
15104 let mut fallback = None;
15105 let mut allow_any_element = false;
15106 let (event, allow_any) = loop {
15107 let state = replace(&mut *self.state, S::Unknown__);
15108 event = match (state, event) {
15109 (S::Annotation(Some(deserializer)), event) => {
15110 let output = deserializer.next(reader, event)?;
15111 match self.handle_annotation(reader, output, &mut fallback)? {
15112 ElementHandlerOutput::Continue { event, allow_any } => {
15113 allow_any_element = allow_any_element || allow_any;
15114 event
15115 }
15116 ElementHandlerOutput::Break { event, allow_any } => {
15117 break (event, allow_any)
15118 }
15119 }
15120 }
15121 (_, Event::End(_)) => {
15122 if let Some(fallback) = fallback.take() {
15123 self.finish_state(reader, fallback)?;
15124 }
15125 return Ok(DeserializerOutput {
15126 artifact: DeserializerArtifact::Data(self.finish(reader)?),
15127 event: DeserializerEvent::None,
15128 allow_any: false,
15129 });
15130 }
15131 (S::Init__, event) => {
15132 fallback.get_or_insert(S::Init__);
15133 *self.state = AssertionTypeDeserializerState::Annotation(None);
15134 event
15135 }
15136 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
15137 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
15138 let output =
15139 <super::Annotation as WithDeserializer>::Deserializer::init(
15140 reader, event,
15141 )?;
15142 match self.handle_annotation(reader, output, &mut fallback)? {
15143 ElementHandlerOutput::Continue { event, allow_any } => {
15144 allow_any_element = allow_any_element || allow_any;
15145 event
15146 }
15147 ElementHandlerOutput::Break { event, allow_any } => {
15148 break (event, allow_any)
15149 }
15150 }
15151 } else {
15152 *self.state = S::Done__;
15153 allow_any_element = true;
15154 fallback.get_or_insert(S::Annotation(None));
15155 event
15156 }
15157 }
15158 (S::Done__, event) => {
15159 fallback.get_or_insert(S::Done__);
15160 break (DeserializerEvent::Continue(event), allow_any_element);
15161 }
15162 (S::Unknown__, _) => unreachable!(),
15163 (state, event) => {
15164 *self.state = state;
15165 break (DeserializerEvent::Break(event), false);
15166 }
15167 }
15168 };
15169 if let Some(fallback) = fallback {
15170 *self.state = fallback;
15171 }
15172 Ok(DeserializerOutput {
15173 artifact: DeserializerArtifact::Deserializer(self),
15174 event,
15175 allow_any,
15176 })
15177 }
15178 fn finish<R>(mut self, reader: &R) -> Result<super::AssertionType, Error>
15179 where
15180 R: DeserializeReader,
15181 {
15182 let state = replace(&mut *self.state, AssertionTypeDeserializerState::Unknown__);
15183 self.finish_state(reader, state)?;
15184 Ok(super::AssertionType {
15185 id: self.id,
15186 test: self.test,
15187 xpath_default_namespace: self.xpath_default_namespace,
15188 annotation: self.annotation,
15189 })
15190 }
15191 }
15192 #[derive(Debug)]
15193 pub struct AnyDeserializer {
15194 id: Option<String>,
15195 namespace: Option<super::NamespaceListType>,
15196 not_namespace: Option<super::BasicNamespaceListType>,
15197 process_contents: super::ProcessContentsType,
15198 not_q_name: Option<super::QnameListType>,
15199 min_occurs: usize,
15200 max_occurs: super::MaxOccurs,
15201 annotation: Option<super::Annotation>,
15202 state: Box<AnyDeserializerState>,
15203 }
15204 #[derive(Debug)]
15205 enum AnyDeserializerState {
15206 Init__,
15207 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
15208 Done__,
15209 Unknown__,
15210 }
15211 impl AnyDeserializer {
15212 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
15213 where
15214 R: DeserializeReader,
15215 {
15216 let mut id: Option<String> = None;
15217 let mut namespace: Option<super::NamespaceListType> = None;
15218 let mut not_namespace: Option<super::BasicNamespaceListType> = None;
15219 let mut process_contents: Option<super::ProcessContentsType> = None;
15220 let mut not_q_name: Option<super::QnameListType> = None;
15221 let mut min_occurs: Option<usize> = None;
15222 let mut max_occurs: Option<super::MaxOccurs> = None;
15223 for attrib in filter_xmlns_attributes(bytes_start) {
15224 let attrib = attrib?;
15225 if matches!(
15226 reader.resolve_local_name(attrib.key, &super::NS_XS),
15227 Some(b"id")
15228 ) {
15229 reader.read_attrib(&mut id, b"id", &attrib.value)?;
15230 } else if matches!(
15231 reader.resolve_local_name(attrib.key, &super::NS_XS),
15232 Some(b"namespace")
15233 ) {
15234 reader.read_attrib(&mut namespace, b"namespace", &attrib.value)?;
15235 } else if matches!(
15236 reader.resolve_local_name(attrib.key, &super::NS_XS),
15237 Some(b"notNamespace")
15238 ) {
15239 reader.read_attrib(&mut not_namespace, b"notNamespace", &attrib.value)?;
15240 } else if matches!(
15241 reader.resolve_local_name(attrib.key, &super::NS_XS),
15242 Some(b"processContents")
15243 ) {
15244 reader.read_attrib(&mut process_contents, b"processContents", &attrib.value)?;
15245 } else if matches!(
15246 reader.resolve_local_name(attrib.key, &super::NS_XS),
15247 Some(b"notQName")
15248 ) {
15249 reader.read_attrib(&mut not_q_name, b"notQName", &attrib.value)?;
15250 } else if matches!(
15251 reader.resolve_local_name(attrib.key, &super::NS_XS),
15252 Some(b"minOccurs")
15253 ) {
15254 reader.read_attrib(&mut min_occurs, b"minOccurs", &attrib.value)?;
15255 } else if matches!(
15256 reader.resolve_local_name(attrib.key, &super::NS_XS),
15257 Some(b"maxOccurs")
15258 ) {
15259 reader.read_attrib(&mut max_occurs, b"maxOccurs", &attrib.value)?;
15260 }
15261 }
15262 Ok(Self {
15263 id: id,
15264 namespace: namespace,
15265 not_namespace: not_namespace,
15266 process_contents: process_contents
15267 .unwrap_or_else(super::Any::default_process_contents),
15268 not_q_name: not_q_name,
15269 min_occurs: min_occurs.unwrap_or_else(super::Any::default_min_occurs),
15270 max_occurs: max_occurs.unwrap_or_else(super::Any::default_max_occurs),
15271 annotation: None,
15272 state: Box::new(AnyDeserializerState::Init__),
15273 })
15274 }
15275 fn finish_state<R>(&mut self, reader: &R, state: AnyDeserializerState) -> Result<(), Error>
15276 where
15277 R: DeserializeReader,
15278 {
15279 use AnyDeserializerState as S;
15280 match state {
15281 S::Annotation(Some(deserializer)) => {
15282 self.store_annotation(deserializer.finish(reader)?)?
15283 }
15284 _ => (),
15285 }
15286 Ok(())
15287 }
15288 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
15289 if self.annotation.is_some() {
15290 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
15291 b"annotation",
15292 )))?;
15293 }
15294 self.annotation = Some(value);
15295 Ok(())
15296 }
15297 fn handle_annotation<'de, R>(
15298 &mut self,
15299 reader: &R,
15300 output: DeserializerOutput<'de, super::Annotation>,
15301 fallback: &mut Option<AnyDeserializerState>,
15302 ) -> Result<ElementHandlerOutput<'de>, Error>
15303 where
15304 R: DeserializeReader,
15305 {
15306 let DeserializerOutput {
15307 artifact,
15308 event,
15309 allow_any,
15310 } = output;
15311 if artifact.is_none() {
15312 fallback.get_or_insert(AnyDeserializerState::Annotation(None));
15313 *self.state = AnyDeserializerState::Done__;
15314 return Ok(ElementHandlerOutput::from_event(event, allow_any));
15315 }
15316 if let Some(fallback) = fallback.take() {
15317 self.finish_state(reader, fallback)?;
15318 }
15319 Ok(match artifact {
15320 DeserializerArtifact::None => unreachable!(),
15321 DeserializerArtifact::Data(data) => {
15322 self.store_annotation(data)?;
15323 *self.state = AnyDeserializerState::Done__;
15324 ElementHandlerOutput::from_event(event, allow_any)
15325 }
15326 DeserializerArtifact::Deserializer(deserializer) => {
15327 let ret = ElementHandlerOutput::from_event(event, allow_any);
15328 match &ret {
15329 ElementHandlerOutput::Continue { .. } => {
15330 fallback.get_or_insert(AnyDeserializerState::Annotation(Some(
15331 deserializer,
15332 )));
15333 *self.state = AnyDeserializerState::Done__;
15334 }
15335 ElementHandlerOutput::Break { .. } => {
15336 *self.state = AnyDeserializerState::Annotation(Some(deserializer));
15337 }
15338 }
15339 ret
15340 }
15341 })
15342 }
15343 }
15344 impl<'de> Deserializer<'de, super::Any> for AnyDeserializer {
15345 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Any>
15346 where
15347 R: DeserializeReader,
15348 {
15349 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
15350 }
15351 fn next<R>(mut self, reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Any>
15352 where
15353 R: DeserializeReader,
15354 {
15355 use AnyDeserializerState as S;
15356 let mut event = event;
15357 let mut fallback = None;
15358 let mut allow_any_element = false;
15359 let (event, allow_any) = loop {
15360 let state = replace(&mut *self.state, S::Unknown__);
15361 event = match (state, event) {
15362 (S::Annotation(Some(deserializer)), event) => {
15363 let output = deserializer.next(reader, event)?;
15364 match self.handle_annotation(reader, output, &mut fallback)? {
15365 ElementHandlerOutput::Continue { event, allow_any } => {
15366 allow_any_element = allow_any_element || allow_any;
15367 event
15368 }
15369 ElementHandlerOutput::Break { event, allow_any } => {
15370 break (event, allow_any)
15371 }
15372 }
15373 }
15374 (_, Event::End(_)) => {
15375 if let Some(fallback) = fallback.take() {
15376 self.finish_state(reader, fallback)?;
15377 }
15378 return Ok(DeserializerOutput {
15379 artifact: DeserializerArtifact::Data(self.finish(reader)?),
15380 event: DeserializerEvent::None,
15381 allow_any: false,
15382 });
15383 }
15384 (S::Init__, event) => {
15385 fallback.get_or_insert(S::Init__);
15386 *self.state = AnyDeserializerState::Annotation(None);
15387 event
15388 }
15389 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
15390 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
15391 let output =
15392 <super::Annotation as WithDeserializer>::Deserializer::init(
15393 reader, event,
15394 )?;
15395 match self.handle_annotation(reader, output, &mut fallback)? {
15396 ElementHandlerOutput::Continue { event, allow_any } => {
15397 allow_any_element = allow_any_element || allow_any;
15398 event
15399 }
15400 ElementHandlerOutput::Break { event, allow_any } => {
15401 break (event, allow_any)
15402 }
15403 }
15404 } else {
15405 *self.state = S::Done__;
15406 allow_any_element = true;
15407 fallback.get_or_insert(S::Annotation(None));
15408 event
15409 }
15410 }
15411 (S::Done__, event) => {
15412 fallback.get_or_insert(S::Done__);
15413 break (DeserializerEvent::Continue(event), allow_any_element);
15414 }
15415 (S::Unknown__, _) => unreachable!(),
15416 (state, event) => {
15417 *self.state = state;
15418 break (DeserializerEvent::Break(event), false);
15419 }
15420 }
15421 };
15422 if let Some(fallback) = fallback {
15423 *self.state = fallback;
15424 }
15425 Ok(DeserializerOutput {
15426 artifact: DeserializerArtifact::Deserializer(self),
15427 event,
15428 allow_any,
15429 })
15430 }
15431 fn finish<R>(mut self, reader: &R) -> Result<super::Any, Error>
15432 where
15433 R: DeserializeReader,
15434 {
15435 let state = replace(&mut *self.state, AnyDeserializerState::Unknown__);
15436 self.finish_state(reader, state)?;
15437 Ok(super::Any {
15438 id: self.id,
15439 namespace: self.namespace,
15440 not_namespace: self.not_namespace,
15441 process_contents: self.process_contents,
15442 not_q_name: self.not_q_name,
15443 min_occurs: self.min_occurs,
15444 max_occurs: self.max_occurs,
15445 annotation: self.annotation,
15446 })
15447 }
15448 }
15449 #[derive(Debug)]
15450 pub struct AltTypeDeserializer {
15451 id: Option<String>,
15452 test: Option<String>,
15453 type_: Option<super::QName>,
15454 xpath_default_namespace: Option<super::XpathDefaultNamespaceType>,
15455 content: Vec<super::AltTypeContent>,
15456 state: Box<AltTypeDeserializerState>,
15457 }
15458 #[derive(Debug)]
15459 enum AltTypeDeserializerState {
15460 Init__,
15461 Next__,
15462 Content__(<super::AltTypeContent as WithDeserializer>::Deserializer),
15463 Unknown__,
15464 }
15465 impl AltTypeDeserializer {
15466 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
15467 where
15468 R: DeserializeReader,
15469 {
15470 let mut id: Option<String> = None;
15471 let mut test: Option<String> = None;
15472 let mut type_: Option<super::QName> = None;
15473 let mut xpath_default_namespace: Option<super::XpathDefaultNamespaceType> = None;
15474 for attrib in filter_xmlns_attributes(bytes_start) {
15475 let attrib = attrib?;
15476 if matches!(
15477 reader.resolve_local_name(attrib.key, &super::NS_XS),
15478 Some(b"id")
15479 ) {
15480 reader.read_attrib(&mut id, b"id", &attrib.value)?;
15481 } else if matches!(
15482 reader.resolve_local_name(attrib.key, &super::NS_XS),
15483 Some(b"test")
15484 ) {
15485 reader.read_attrib(&mut test, b"test", &attrib.value)?;
15486 } else if matches!(
15487 reader.resolve_local_name(attrib.key, &super::NS_XS),
15488 Some(b"type")
15489 ) {
15490 reader.read_attrib(&mut type_, b"type", &attrib.value)?;
15491 } else if matches!(
15492 reader.resolve_local_name(attrib.key, &super::NS_XS),
15493 Some(b"xpathDefaultNamespace")
15494 ) {
15495 reader.read_attrib(
15496 &mut xpath_default_namespace,
15497 b"xpathDefaultNamespace",
15498 &attrib.value,
15499 )?;
15500 }
15501 }
15502 Ok(Self {
15503 id: id,
15504 test: test,
15505 type_: type_,
15506 xpath_default_namespace: xpath_default_namespace,
15507 content: Vec::new(),
15508 state: Box::new(AltTypeDeserializerState::Init__),
15509 })
15510 }
15511 fn finish_state<R>(
15512 &mut self,
15513 reader: &R,
15514 state: AltTypeDeserializerState,
15515 ) -> Result<(), Error>
15516 where
15517 R: DeserializeReader,
15518 {
15519 if let AltTypeDeserializerState::Content__(deserializer) = state {
15520 self.store_content(deserializer.finish(reader)?)?;
15521 }
15522 Ok(())
15523 }
15524 fn store_content(&mut self, value: super::AltTypeContent) -> Result<(), Error> {
15525 self.content.push(value);
15526 Ok(())
15527 }
15528 fn handle_content<'de, R>(
15529 &mut self,
15530 reader: &R,
15531 output: DeserializerOutput<'de, super::AltTypeContent>,
15532 fallback: &mut Option<AltTypeDeserializerState>,
15533 ) -> Result<ElementHandlerOutput<'de>, Error>
15534 where
15535 R: DeserializeReader,
15536 {
15537 let DeserializerOutput {
15538 artifact,
15539 event,
15540 allow_any,
15541 } = output;
15542 if artifact.is_none() {
15543 *self.state = fallback.take().unwrap_or(AltTypeDeserializerState::Next__);
15544 return Ok(ElementHandlerOutput::break_(event, allow_any));
15545 }
15546 if let Some(fallback) = fallback.take() {
15547 self.finish_state(reader, fallback)?;
15548 }
15549 Ok(match artifact {
15550 DeserializerArtifact::None => unreachable!(),
15551 DeserializerArtifact::Data(data) => {
15552 self.store_content(data)?;
15553 *self.state = AltTypeDeserializerState::Next__;
15554 ElementHandlerOutput::from_event(event, allow_any)
15555 }
15556 DeserializerArtifact::Deserializer(deserializer) => {
15557 let ret = ElementHandlerOutput::from_event(event, allow_any);
15558 match &ret {
15559 ElementHandlerOutput::Continue { .. } => {
15560 fallback
15561 .get_or_insert(AltTypeDeserializerState::Content__(deserializer));
15562 *self.state = AltTypeDeserializerState::Next__;
15563 }
15564 ElementHandlerOutput::Break { .. } => {
15565 *self.state = AltTypeDeserializerState::Content__(deserializer);
15566 }
15567 }
15568 ret
15569 }
15570 })
15571 }
15572 }
15573 impl<'de> Deserializer<'de, super::AltType> for AltTypeDeserializer {
15574 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::AltType>
15575 where
15576 R: DeserializeReader,
15577 {
15578 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
15579 }
15580 fn next<R>(
15581 mut self,
15582 reader: &R,
15583 event: Event<'de>,
15584 ) -> DeserializerResult<'de, super::AltType>
15585 where
15586 R: DeserializeReader,
15587 {
15588 use AltTypeDeserializerState as S;
15589 let mut event = event;
15590 let mut fallback = None;
15591 let (event, allow_any) = loop {
15592 let state = replace(&mut *self.state, S::Unknown__);
15593 event = match (state, event) {
15594 (S::Content__(deserializer), event) => {
15595 let output = deserializer.next(reader, event)?;
15596 match self.handle_content(reader, output, &mut fallback)? {
15597 ElementHandlerOutput::Break { event, allow_any } => {
15598 break (event, allow_any)
15599 }
15600 ElementHandlerOutput::Continue { event, .. } => event,
15601 }
15602 }
15603 (_, Event::End(_)) => {
15604 return Ok(DeserializerOutput {
15605 artifact: DeserializerArtifact::Data(self.finish(reader)?),
15606 event: DeserializerEvent::None,
15607 allow_any: false,
15608 });
15609 }
15610 (old_state @ (S::Init__ | S::Next__), event) => {
15611 let output =
15612 <super::AltTypeContent as WithDeserializer>::Deserializer::init(
15613 reader, event,
15614 )?;
15615 match self.handle_content(reader, output, &mut fallback)? {
15616 ElementHandlerOutput::Break { event, allow_any } => {
15617 if matches!(&*self.state, S::Unknown__) {
15618 *self.state = old_state;
15619 }
15620 break (event, allow_any);
15621 }
15622 ElementHandlerOutput::Continue { event, .. } => event,
15623 }
15624 }
15625 (S::Unknown__, _) => unreachable!(),
15626 }
15627 };
15628 Ok(DeserializerOutput {
15629 artifact: DeserializerArtifact::Deserializer(self),
15630 event,
15631 allow_any,
15632 })
15633 }
15634 fn finish<R>(mut self, reader: &R) -> Result<super::AltType, Error>
15635 where
15636 R: DeserializeReader,
15637 {
15638 let state = replace(&mut *self.state, AltTypeDeserializerState::Unknown__);
15639 self.finish_state(reader, state)?;
15640 Ok(super::AltType {
15641 id: self.id,
15642 test: self.test,
15643 type_: self.type_,
15644 xpath_default_namespace: self.xpath_default_namespace,
15645 content: self.content,
15646 })
15647 }
15648 }
15649 #[derive(Debug)]
15650 pub enum AltTypeContentDeserializer {
15651 Init__,
15652 Annotation(
15653 Option<super::Annotation>,
15654 Option<<super::Annotation as WithDeserializer>::Deserializer>,
15655 ),
15656 SimpleType(
15657 Option<super::SimpleBaseType>,
15658 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
15659 ),
15660 ComplexType(
15661 Option<super::ComplexBaseType>,
15662 Option<<super::ComplexBaseType as WithDeserializer>::Deserializer>,
15663 ),
15664 Done__(super::AltTypeContent),
15665 Unknown__,
15666 }
15667 impl AltTypeContentDeserializer {
15668 fn find_suitable<'de, R>(
15669 &mut self,
15670 reader: &R,
15671 event: Event<'de>,
15672 fallback: &mut Option<AltTypeContentDeserializer>,
15673 ) -> Result<ElementHandlerOutput<'de>, Error>
15674 where
15675 R: DeserializeReader,
15676 {
15677 let (Event::Start(x) | Event::Empty(x)) = &event else {
15678 *self = Self::Init__;
15679 return Ok(ElementHandlerOutput::return_to_parent(event, false));
15680 };
15681 if matches!(
15682 reader.resolve_local_name(x.name(), &super::NS_XS),
15683 Some(b"annotation")
15684 ) {
15685 let output =
15686 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
15687 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
15688 }
15689 if matches!(
15690 reader.resolve_local_name(x.name(), &super::NS_XS),
15691 Some(b"simpleType")
15692 ) {
15693 let output =
15694 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(reader, event)?;
15695 return self.handle_simple_type(reader, Default::default(), output, &mut *fallback);
15696 }
15697 if matches!(
15698 reader.resolve_local_name(x.name(), &super::NS_XS),
15699 Some(b"complexType")
15700 ) {
15701 let output = <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
15702 reader, event,
15703 )?;
15704 return self.handle_complex_type(
15705 reader,
15706 Default::default(),
15707 output,
15708 &mut *fallback,
15709 );
15710 }
15711 *self = Self::Init__;
15712 Ok(ElementHandlerOutput::return_to_parent(event, false))
15713 }
15714 fn store_annotation(
15715 values: &mut Option<super::Annotation>,
15716 value: super::Annotation,
15717 ) -> Result<(), Error> {
15718 if values.is_some() {
15719 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
15720 b"annotation",
15721 )))?;
15722 }
15723 *values = Some(value);
15724 Ok(())
15725 }
15726 fn store_simple_type(
15727 values: &mut Option<super::SimpleBaseType>,
15728 value: super::SimpleBaseType,
15729 ) -> Result<(), Error> {
15730 if values.is_some() {
15731 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
15732 b"simpleType",
15733 )))?;
15734 }
15735 *values = Some(value);
15736 Ok(())
15737 }
15738 fn store_complex_type(
15739 values: &mut Option<super::ComplexBaseType>,
15740 value: super::ComplexBaseType,
15741 ) -> Result<(), Error> {
15742 if values.is_some() {
15743 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
15744 b"complexType",
15745 )))?;
15746 }
15747 *values = Some(value);
15748 Ok(())
15749 }
15750 fn handle_annotation<'de, R>(
15751 &mut self,
15752 reader: &R,
15753 mut values: Option<super::Annotation>,
15754 output: DeserializerOutput<'de, super::Annotation>,
15755 fallback: &mut Option<Self>,
15756 ) -> Result<ElementHandlerOutput<'de>, Error>
15757 where
15758 R: DeserializeReader,
15759 {
15760 let DeserializerOutput {
15761 artifact,
15762 event,
15763 allow_any,
15764 } = output;
15765 if artifact.is_none() {
15766 *self = match fallback.take() {
15767 None => Self::Init__,
15768 Some(Self::Annotation(_, Some(deserializer))) => {
15769 Self::Annotation(values, Some(deserializer))
15770 }
15771 _ => unreachable!(),
15772 };
15773 return Ok(ElementHandlerOutput::break_(event, allow_any));
15774 }
15775 match fallback.take() {
15776 None => (),
15777 Some(Self::Annotation(_, Some(deserializer))) => {
15778 let data = deserializer.finish(reader)?;
15779 Self::store_annotation(&mut values, data)?;
15780 }
15781 Some(_) => unreachable!(),
15782 }
15783 Ok(match artifact {
15784 DeserializerArtifact::None => unreachable!(),
15785 DeserializerArtifact::Data(data) => {
15786 Self::store_annotation(&mut values, data)?;
15787 let data = Self::Annotation(values, None).finish(reader)?;
15788 *self = Self::Done__(data);
15789 ElementHandlerOutput::Break { event, allow_any }
15790 }
15791 DeserializerArtifact::Deserializer(deserializer) => {
15792 *self = Self::Annotation(values, Some(deserializer));
15793 ElementHandlerOutput::from_event_end(event, allow_any)
15794 }
15795 })
15796 }
15797 fn handle_simple_type<'de, R>(
15798 &mut self,
15799 reader: &R,
15800 mut values: Option<super::SimpleBaseType>,
15801 output: DeserializerOutput<'de, super::SimpleBaseType>,
15802 fallback: &mut Option<Self>,
15803 ) -> Result<ElementHandlerOutput<'de>, Error>
15804 where
15805 R: DeserializeReader,
15806 {
15807 let DeserializerOutput {
15808 artifact,
15809 event,
15810 allow_any,
15811 } = output;
15812 if artifact.is_none() {
15813 *self = match fallback.take() {
15814 None => Self::Init__,
15815 Some(Self::SimpleType(_, Some(deserializer))) => {
15816 Self::SimpleType(values, Some(deserializer))
15817 }
15818 _ => unreachable!(),
15819 };
15820 return Ok(ElementHandlerOutput::break_(event, allow_any));
15821 }
15822 match fallback.take() {
15823 None => (),
15824 Some(Self::SimpleType(_, Some(deserializer))) => {
15825 let data = deserializer.finish(reader)?;
15826 Self::store_simple_type(&mut values, data)?;
15827 }
15828 Some(_) => unreachable!(),
15829 }
15830 Ok(match artifact {
15831 DeserializerArtifact::None => unreachable!(),
15832 DeserializerArtifact::Data(data) => {
15833 Self::store_simple_type(&mut values, data)?;
15834 let data = Self::SimpleType(values, None).finish(reader)?;
15835 *self = Self::Done__(data);
15836 ElementHandlerOutput::Break { event, allow_any }
15837 }
15838 DeserializerArtifact::Deserializer(deserializer) => {
15839 *self = Self::SimpleType(values, Some(deserializer));
15840 ElementHandlerOutput::from_event_end(event, allow_any)
15841 }
15842 })
15843 }
15844 fn handle_complex_type<'de, R>(
15845 &mut self,
15846 reader: &R,
15847 mut values: Option<super::ComplexBaseType>,
15848 output: DeserializerOutput<'de, super::ComplexBaseType>,
15849 fallback: &mut Option<Self>,
15850 ) -> Result<ElementHandlerOutput<'de>, Error>
15851 where
15852 R: DeserializeReader,
15853 {
15854 let DeserializerOutput {
15855 artifact,
15856 event,
15857 allow_any,
15858 } = output;
15859 if artifact.is_none() {
15860 *self = match fallback.take() {
15861 None => Self::Init__,
15862 Some(Self::ComplexType(_, Some(deserializer))) => {
15863 Self::ComplexType(values, Some(deserializer))
15864 }
15865 _ => unreachable!(),
15866 };
15867 return Ok(ElementHandlerOutput::break_(event, allow_any));
15868 }
15869 match fallback.take() {
15870 None => (),
15871 Some(Self::ComplexType(_, Some(deserializer))) => {
15872 let data = deserializer.finish(reader)?;
15873 Self::store_complex_type(&mut values, data)?;
15874 }
15875 Some(_) => unreachable!(),
15876 }
15877 Ok(match artifact {
15878 DeserializerArtifact::None => unreachable!(),
15879 DeserializerArtifact::Data(data) => {
15880 Self::store_complex_type(&mut values, data)?;
15881 let data = Self::ComplexType(values, None).finish(reader)?;
15882 *self = Self::Done__(data);
15883 ElementHandlerOutput::Break { event, allow_any }
15884 }
15885 DeserializerArtifact::Deserializer(deserializer) => {
15886 *self = Self::ComplexType(values, Some(deserializer));
15887 ElementHandlerOutput::from_event_end(event, allow_any)
15888 }
15889 })
15890 }
15891 }
15892 impl<'de> Deserializer<'de, super::AltTypeContent> for AltTypeContentDeserializer {
15893 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::AltTypeContent>
15894 where
15895 R: DeserializeReader,
15896 {
15897 let deserializer = Self::Init__;
15898 let mut output = deserializer.next(reader, event)?;
15899 output.artifact = match output.artifact {
15900 DeserializerArtifact::Deserializer(Self::Init__) => DeserializerArtifact::None,
15901 artifact => artifact,
15902 };
15903 Ok(output)
15904 }
15905 fn next<R>(
15906 mut self,
15907 reader: &R,
15908 event: Event<'de>,
15909 ) -> DeserializerResult<'de, super::AltTypeContent>
15910 where
15911 R: DeserializeReader,
15912 {
15913 let mut event = event;
15914 let mut fallback = None;
15915 let (event, allow_any) = loop {
15916 let state = replace(&mut self, Self::Unknown__);
15917 event = match (state, event) {
15918 (Self::Annotation(values, Some(deserializer)), event) => {
15919 let output = deserializer.next(reader, event)?;
15920 match self.handle_annotation(reader, values, output, &mut fallback)? {
15921 ElementHandlerOutput::Break { event, allow_any } => {
15922 break (event, allow_any)
15923 }
15924 ElementHandlerOutput::Continue { event, .. } => event,
15925 }
15926 }
15927 (Self::SimpleType(values, Some(deserializer)), event) => {
15928 let output = deserializer.next(reader, event)?;
15929 match self.handle_simple_type(reader, values, output, &mut fallback)? {
15930 ElementHandlerOutput::Break { event, allow_any } => {
15931 break (event, allow_any)
15932 }
15933 ElementHandlerOutput::Continue { event, .. } => event,
15934 }
15935 }
15936 (Self::ComplexType(values, Some(deserializer)), event) => {
15937 let output = deserializer.next(reader, event)?;
15938 match self.handle_complex_type(reader, values, output, &mut fallback)? {
15939 ElementHandlerOutput::Break { event, allow_any } => {
15940 break (event, allow_any)
15941 }
15942 ElementHandlerOutput::Continue { event, .. } => event,
15943 }
15944 }
15945 (state, event @ Event::End(_)) => {
15946 return Ok(DeserializerOutput {
15947 artifact: DeserializerArtifact::Data(state.finish(reader)?),
15948 event: DeserializerEvent::Continue(event),
15949 allow_any: false,
15950 });
15951 }
15952 (Self::Init__, event) => {
15953 match self.find_suitable(reader, event, &mut fallback)? {
15954 ElementHandlerOutput::Break { event, allow_any } => {
15955 break (event, allow_any)
15956 }
15957 ElementHandlerOutput::Continue { event, .. } => event,
15958 }
15959 }
15960 (Self::Annotation(values, None), event) => {
15961 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
15962 reader, event,
15963 )?;
15964 match self.handle_annotation(reader, values, output, &mut fallback)? {
15965 ElementHandlerOutput::Break { event, allow_any } => {
15966 break (event, allow_any)
15967 }
15968 ElementHandlerOutput::Continue { event, .. } => event,
15969 }
15970 }
15971 (Self::SimpleType(values, None), event) => {
15972 let output =
15973 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
15974 reader, event,
15975 )?;
15976 match self.handle_simple_type(reader, values, output, &mut fallback)? {
15977 ElementHandlerOutput::Break { event, allow_any } => {
15978 break (event, allow_any)
15979 }
15980 ElementHandlerOutput::Continue { event, .. } => event,
15981 }
15982 }
15983 (Self::ComplexType(values, None), event) => {
15984 let output =
15985 <super::ComplexBaseType as WithDeserializer>::Deserializer::init(
15986 reader, event,
15987 )?;
15988 match self.handle_complex_type(reader, values, output, &mut fallback)? {
15989 ElementHandlerOutput::Break { event, allow_any } => {
15990 break (event, allow_any)
15991 }
15992 ElementHandlerOutput::Continue { event, .. } => event,
15993 }
15994 }
15995 (s @ Self::Done__(_), event) => {
15996 self = s;
15997 break (DeserializerEvent::Continue(event), false);
15998 }
15999 (Self::Unknown__, _) => unreachable!(),
16000 }
16001 };
16002 let artifact = match self {
16003 Self::Done__(data) => DeserializerArtifact::Data(data),
16004 deserializer => DeserializerArtifact::Deserializer(deserializer),
16005 };
16006 Ok(DeserializerOutput {
16007 artifact,
16008 event,
16009 allow_any,
16010 })
16011 }
16012 fn finish<R>(self, reader: &R) -> Result<super::AltTypeContent, Error>
16013 where
16014 R: DeserializeReader,
16015 {
16016 match self {
16017 Self::Init__ => Err(ErrorKind::MissingContent.into()),
16018 Self::Annotation(mut values, deserializer) => {
16019 if let Some(deserializer) = deserializer {
16020 let value = deserializer.finish(reader)?;
16021 Self::store_annotation(&mut values, value)?;
16022 }
16023 Ok(super::AltTypeContent::Annotation(values.ok_or_else(
16024 || ErrorKind::MissingElement("annotation".into()),
16025 )?))
16026 }
16027 Self::SimpleType(mut values, deserializer) => {
16028 if let Some(deserializer) = deserializer {
16029 let value = deserializer.finish(reader)?;
16030 Self::store_simple_type(&mut values, value)?;
16031 }
16032 Ok(super::AltTypeContent::SimpleType(values.ok_or_else(
16033 || ErrorKind::MissingElement("simpleType".into()),
16034 )?))
16035 }
16036 Self::ComplexType(mut values, deserializer) => {
16037 if let Some(deserializer) = deserializer {
16038 let value = deserializer.finish(reader)?;
16039 Self::store_complex_type(&mut values, value)?;
16040 }
16041 Ok(super::AltTypeContent::ComplexType(values.ok_or_else(
16042 || ErrorKind::MissingElement("complexType".into()),
16043 )?))
16044 }
16045 Self::Done__(data) => Ok(data),
16046 Self::Unknown__ => unreachable!(),
16047 }
16048 }
16049 }
16050 #[derive(Debug)]
16051 pub struct KeybaseTypeDeserializer {
16052 id: Option<String>,
16053 name: Option<String>,
16054 ref_: Option<super::QName>,
16055 content: Option<super::KeybaseTypeContent>,
16056 state: Box<KeybaseTypeDeserializerState>,
16057 }
16058 #[derive(Debug)]
16059 enum KeybaseTypeDeserializerState {
16060 Init__,
16061 Next__,
16062 Content__(<super::KeybaseTypeContent as WithDeserializer>::Deserializer),
16063 Unknown__,
16064 }
16065 impl KeybaseTypeDeserializer {
16066 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
16067 where
16068 R: DeserializeReader,
16069 {
16070 let mut id: Option<String> = None;
16071 let mut name: Option<String> = None;
16072 let mut ref_: Option<super::QName> = None;
16073 for attrib in filter_xmlns_attributes(bytes_start) {
16074 let attrib = attrib?;
16075 if matches!(
16076 reader.resolve_local_name(attrib.key, &super::NS_XS),
16077 Some(b"id")
16078 ) {
16079 reader.read_attrib(&mut id, b"id", &attrib.value)?;
16080 } else if matches!(
16081 reader.resolve_local_name(attrib.key, &super::NS_XS),
16082 Some(b"name")
16083 ) {
16084 reader.read_attrib(&mut name, b"name", &attrib.value)?;
16085 } else if matches!(
16086 reader.resolve_local_name(attrib.key, &super::NS_XS),
16087 Some(b"ref")
16088 ) {
16089 reader.read_attrib(&mut ref_, b"ref", &attrib.value)?;
16090 }
16091 }
16092 Ok(Self {
16093 id: id,
16094 name: name,
16095 ref_: ref_,
16096 content: None,
16097 state: Box::new(KeybaseTypeDeserializerState::Init__),
16098 })
16099 }
16100 fn finish_state<R>(
16101 &mut self,
16102 reader: &R,
16103 state: KeybaseTypeDeserializerState,
16104 ) -> Result<(), Error>
16105 where
16106 R: DeserializeReader,
16107 {
16108 if let KeybaseTypeDeserializerState::Content__(deserializer) = state {
16109 self.store_content(deserializer.finish(reader)?)?;
16110 }
16111 Ok(())
16112 }
16113 fn store_content(&mut self, value: super::KeybaseTypeContent) -> Result<(), Error> {
16114 if self.content.is_some() {
16115 Err(ErrorKind::DuplicateContent)?;
16116 }
16117 self.content = Some(value);
16118 Ok(())
16119 }
16120 fn handle_content<'de, R>(
16121 &mut self,
16122 reader: &R,
16123 output: DeserializerOutput<'de, super::KeybaseTypeContent>,
16124 fallback: &mut Option<KeybaseTypeDeserializerState>,
16125 ) -> Result<ElementHandlerOutput<'de>, Error>
16126 where
16127 R: DeserializeReader,
16128 {
16129 let DeserializerOutput {
16130 artifact,
16131 event,
16132 allow_any,
16133 } = output;
16134 if artifact.is_none() {
16135 *self.state = fallback
16136 .take()
16137 .unwrap_or(KeybaseTypeDeserializerState::Next__);
16138 return Ok(ElementHandlerOutput::break_(event, allow_any));
16139 }
16140 if let Some(fallback) = fallback.take() {
16141 self.finish_state(reader, fallback)?;
16142 }
16143 Ok(match artifact {
16144 DeserializerArtifact::None => unreachable!(),
16145 DeserializerArtifact::Data(data) => {
16146 self.store_content(data)?;
16147 *self.state = KeybaseTypeDeserializerState::Next__;
16148 ElementHandlerOutput::from_event(event, allow_any)
16149 }
16150 DeserializerArtifact::Deserializer(deserializer) => {
16151 let ret = ElementHandlerOutput::from_event(event, allow_any);
16152 match &ret {
16153 ElementHandlerOutput::Continue { .. } => {
16154 fallback.get_or_insert(KeybaseTypeDeserializerState::Content__(
16155 deserializer,
16156 ));
16157 *self.state = KeybaseTypeDeserializerState::Next__;
16158 }
16159 ElementHandlerOutput::Break { .. } => {
16160 *self.state = KeybaseTypeDeserializerState::Content__(deserializer);
16161 }
16162 }
16163 ret
16164 }
16165 })
16166 }
16167 }
16168 impl<'de> Deserializer<'de, super::KeybaseType> for KeybaseTypeDeserializer {
16169 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::KeybaseType>
16170 where
16171 R: DeserializeReader,
16172 {
16173 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
16174 }
16175 fn next<R>(
16176 mut self,
16177 reader: &R,
16178 event: Event<'de>,
16179 ) -> DeserializerResult<'de, super::KeybaseType>
16180 where
16181 R: DeserializeReader,
16182 {
16183 use KeybaseTypeDeserializerState as S;
16184 let mut event = event;
16185 let mut fallback = None;
16186 let (event, allow_any) = loop {
16187 let state = replace(&mut *self.state, S::Unknown__);
16188 event = match (state, event) {
16189 (S::Content__(deserializer), event) => {
16190 let output = deserializer.next(reader, event)?;
16191 match self.handle_content(reader, output, &mut fallback)? {
16192 ElementHandlerOutput::Break { event, allow_any } => {
16193 break (event, allow_any)
16194 }
16195 ElementHandlerOutput::Continue { event, .. } => event,
16196 }
16197 }
16198 (_, Event::End(_)) => {
16199 return Ok(DeserializerOutput {
16200 artifact: DeserializerArtifact::Data(self.finish(reader)?),
16201 event: DeserializerEvent::None,
16202 allow_any: false,
16203 });
16204 }
16205 (old_state @ (S::Init__ | S::Next__), event) => {
16206 let output =
16207 <super::KeybaseTypeContent as WithDeserializer>::Deserializer::init(
16208 reader, event,
16209 )?;
16210 match self.handle_content(reader, output, &mut fallback)? {
16211 ElementHandlerOutput::Break { event, allow_any } => {
16212 if matches!(&*self.state, S::Unknown__) {
16213 *self.state = old_state;
16214 }
16215 break (event, allow_any);
16216 }
16217 ElementHandlerOutput::Continue { event, .. } => event,
16218 }
16219 }
16220 (S::Unknown__, _) => unreachable!(),
16221 }
16222 };
16223 Ok(DeserializerOutput {
16224 artifact: DeserializerArtifact::Deserializer(self),
16225 event,
16226 allow_any,
16227 })
16228 }
16229 fn finish<R>(mut self, reader: &R) -> Result<super::KeybaseType, Error>
16230 where
16231 R: DeserializeReader,
16232 {
16233 let state = replace(&mut *self.state, KeybaseTypeDeserializerState::Unknown__);
16234 self.finish_state(reader, state)?;
16235 Ok(super::KeybaseType {
16236 id: self.id,
16237 name: self.name,
16238 ref_: self.ref_,
16239 content: self.content,
16240 })
16241 }
16242 }
16243 #[derive(Debug)]
16244 pub struct KeybaseTypeContentDeserializer {
16245 annotation: Option<super::Annotation>,
16246 selector: Option<super::Field>,
16247 field: Vec<super::Field>,
16248 state: Box<KeybaseTypeContentDeserializerState>,
16249 }
16250 #[derive(Debug)]
16251 enum KeybaseTypeContentDeserializerState {
16252 Init__,
16253 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
16254 Selector(Option<<super::Field as WithDeserializer>::Deserializer>),
16255 Field(Option<<super::Field as WithDeserializer>::Deserializer>),
16256 Done__,
16257 Unknown__,
16258 }
16259 impl KeybaseTypeContentDeserializer {
16260 fn finish_state<R>(
16261 &mut self,
16262 reader: &R,
16263 state: KeybaseTypeContentDeserializerState,
16264 ) -> Result<(), Error>
16265 where
16266 R: DeserializeReader,
16267 {
16268 use KeybaseTypeContentDeserializerState as S;
16269 match state {
16270 S::Annotation(Some(deserializer)) => {
16271 self.store_annotation(deserializer.finish(reader)?)?
16272 }
16273 S::Selector(Some(deserializer)) => {
16274 self.store_selector(deserializer.finish(reader)?)?
16275 }
16276 S::Field(Some(deserializer)) => self.store_field(deserializer.finish(reader)?)?,
16277 _ => (),
16278 }
16279 Ok(())
16280 }
16281 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
16282 if self.annotation.is_some() {
16283 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
16284 b"annotation",
16285 )))?;
16286 }
16287 self.annotation = Some(value);
16288 Ok(())
16289 }
16290 fn store_selector(&mut self, value: super::Field) -> Result<(), Error> {
16291 if self.selector.is_some() {
16292 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
16293 b"selector",
16294 )))?;
16295 }
16296 self.selector = Some(value);
16297 Ok(())
16298 }
16299 fn store_field(&mut self, value: super::Field) -> Result<(), Error> {
16300 self.field.push(value);
16301 Ok(())
16302 }
16303 fn handle_annotation<'de, R>(
16304 &mut self,
16305 reader: &R,
16306 output: DeserializerOutput<'de, super::Annotation>,
16307 fallback: &mut Option<KeybaseTypeContentDeserializerState>,
16308 ) -> Result<ElementHandlerOutput<'de>, Error>
16309 where
16310 R: DeserializeReader,
16311 {
16312 let DeserializerOutput {
16313 artifact,
16314 event,
16315 allow_any,
16316 } = output;
16317 if artifact.is_none() {
16318 fallback.get_or_insert(KeybaseTypeContentDeserializerState::Annotation(None));
16319 *self.state = KeybaseTypeContentDeserializerState::Selector(None);
16320 return Ok(ElementHandlerOutput::from_event(event, allow_any));
16321 }
16322 if let Some(fallback) = fallback.take() {
16323 self.finish_state(reader, fallback)?;
16324 }
16325 Ok(match artifact {
16326 DeserializerArtifact::None => unreachable!(),
16327 DeserializerArtifact::Data(data) => {
16328 self.store_annotation(data)?;
16329 *self.state = KeybaseTypeContentDeserializerState::Selector(None);
16330 ElementHandlerOutput::from_event(event, allow_any)
16331 }
16332 DeserializerArtifact::Deserializer(deserializer) => {
16333 let ret = ElementHandlerOutput::from_event(event, allow_any);
16334 match &ret {
16335 ElementHandlerOutput::Continue { .. } => {
16336 fallback.get_or_insert(
16337 KeybaseTypeContentDeserializerState::Annotation(Some(deserializer)),
16338 );
16339 *self.state = KeybaseTypeContentDeserializerState::Selector(None);
16340 }
16341 ElementHandlerOutput::Break { .. } => {
16342 *self.state =
16343 KeybaseTypeContentDeserializerState::Annotation(Some(deserializer));
16344 }
16345 }
16346 ret
16347 }
16348 })
16349 }
16350 fn handle_selector<'de, R>(
16351 &mut self,
16352 reader: &R,
16353 output: DeserializerOutput<'de, super::Field>,
16354 fallback: &mut Option<KeybaseTypeContentDeserializerState>,
16355 ) -> Result<ElementHandlerOutput<'de>, Error>
16356 where
16357 R: DeserializeReader,
16358 {
16359 let DeserializerOutput {
16360 artifact,
16361 event,
16362 allow_any,
16363 } = output;
16364 if artifact.is_none() {
16365 if self.selector.is_some() {
16366 fallback.get_or_insert(KeybaseTypeContentDeserializerState::Selector(None));
16367 *self.state = KeybaseTypeContentDeserializerState::Field(None);
16368 return Ok(ElementHandlerOutput::from_event(event, allow_any));
16369 } else {
16370 *self.state = KeybaseTypeContentDeserializerState::Selector(None);
16371 return Ok(ElementHandlerOutput::break_(event, allow_any));
16372 }
16373 }
16374 if let Some(fallback) = fallback.take() {
16375 self.finish_state(reader, fallback)?;
16376 }
16377 Ok(match artifact {
16378 DeserializerArtifact::None => unreachable!(),
16379 DeserializerArtifact::Data(data) => {
16380 self.store_selector(data)?;
16381 *self.state = KeybaseTypeContentDeserializerState::Field(None);
16382 ElementHandlerOutput::from_event(event, allow_any)
16383 }
16384 DeserializerArtifact::Deserializer(deserializer) => {
16385 let ret = ElementHandlerOutput::from_event(event, allow_any);
16386 match &ret {
16387 ElementHandlerOutput::Continue { .. } => {
16388 fallback.get_or_insert(KeybaseTypeContentDeserializerState::Selector(
16389 Some(deserializer),
16390 ));
16391 *self.state = KeybaseTypeContentDeserializerState::Field(None);
16392 }
16393 ElementHandlerOutput::Break { .. } => {
16394 *self.state =
16395 KeybaseTypeContentDeserializerState::Selector(Some(deserializer));
16396 }
16397 }
16398 ret
16399 }
16400 })
16401 }
16402 fn handle_field<'de, R>(
16403 &mut self,
16404 reader: &R,
16405 output: DeserializerOutput<'de, super::Field>,
16406 fallback: &mut Option<KeybaseTypeContentDeserializerState>,
16407 ) -> Result<ElementHandlerOutput<'de>, Error>
16408 where
16409 R: DeserializeReader,
16410 {
16411 let DeserializerOutput {
16412 artifact,
16413 event,
16414 allow_any,
16415 } = output;
16416 if artifact.is_none() {
16417 if self.field.len() < 1usize {
16418 *self.state = KeybaseTypeContentDeserializerState::Field(None);
16419 return Ok(ElementHandlerOutput::break_(event, allow_any));
16420 } else {
16421 fallback.get_or_insert(KeybaseTypeContentDeserializerState::Field(None));
16422 *self.state = KeybaseTypeContentDeserializerState::Done__;
16423 return Ok(ElementHandlerOutput::from_event(event, allow_any));
16424 }
16425 }
16426 if let Some(fallback) = fallback.take() {
16427 self.finish_state(reader, fallback)?;
16428 }
16429 Ok(match artifact {
16430 DeserializerArtifact::None => unreachable!(),
16431 DeserializerArtifact::Data(data) => {
16432 self.store_field(data)?;
16433 *self.state = KeybaseTypeContentDeserializerState::Field(None);
16434 ElementHandlerOutput::from_event(event, allow_any)
16435 }
16436 DeserializerArtifact::Deserializer(deserializer) => {
16437 let ret = ElementHandlerOutput::from_event(event, allow_any);
16438 match &ret {
16439 ElementHandlerOutput::Continue { .. } => {
16440 fallback.get_or_insert(KeybaseTypeContentDeserializerState::Field(
16441 Some(deserializer),
16442 ));
16443 if self.field.len().saturating_add(1) < 1usize {
16444 *self.state = KeybaseTypeContentDeserializerState::Field(None);
16445 } else {
16446 *self.state = KeybaseTypeContentDeserializerState::Done__;
16447 }
16448 }
16449 ElementHandlerOutput::Break { .. } => {
16450 *self.state =
16451 KeybaseTypeContentDeserializerState::Field(Some(deserializer));
16452 }
16453 }
16454 ret
16455 }
16456 })
16457 }
16458 }
16459 impl<'de> Deserializer<'de, super::KeybaseTypeContent> for KeybaseTypeContentDeserializer {
16460 fn init<R>(
16461 reader: &R,
16462 event: Event<'de>,
16463 ) -> DeserializerResult<'de, super::KeybaseTypeContent>
16464 where
16465 R: DeserializeReader,
16466 {
16467 let deserializer = Self {
16468 annotation: None,
16469 selector: None,
16470 field: Vec::new(),
16471 state: Box::new(KeybaseTypeContentDeserializerState::Init__),
16472 };
16473 let mut output = deserializer.next(reader, event)?;
16474 output.artifact = match output.artifact {
16475 DeserializerArtifact::Deserializer(x)
16476 if matches!(&*x.state, KeybaseTypeContentDeserializerState::Init__) =>
16477 {
16478 DeserializerArtifact::None
16479 }
16480 artifact => artifact,
16481 };
16482 Ok(output)
16483 }
16484 fn next<R>(
16485 mut self,
16486 reader: &R,
16487 event: Event<'de>,
16488 ) -> DeserializerResult<'de, super::KeybaseTypeContent>
16489 where
16490 R: DeserializeReader,
16491 {
16492 use KeybaseTypeContentDeserializerState as S;
16493 let mut event = event;
16494 let mut fallback = None;
16495 let mut allow_any_element = false;
16496 let (event, allow_any) = loop {
16497 let state = replace(&mut *self.state, S::Unknown__);
16498 event = match (state, event) {
16499 (S::Annotation(Some(deserializer)), event) => {
16500 let output = deserializer.next(reader, event)?;
16501 match self.handle_annotation(reader, output, &mut fallback)? {
16502 ElementHandlerOutput::Continue { event, allow_any } => {
16503 allow_any_element = allow_any_element || allow_any;
16504 event
16505 }
16506 ElementHandlerOutput::Break { event, allow_any } => {
16507 break (event, allow_any)
16508 }
16509 }
16510 }
16511 (S::Selector(Some(deserializer)), event) => {
16512 let output = deserializer.next(reader, event)?;
16513 match self.handle_selector(reader, output, &mut fallback)? {
16514 ElementHandlerOutput::Continue { event, allow_any } => {
16515 allow_any_element = allow_any_element || allow_any;
16516 event
16517 }
16518 ElementHandlerOutput::Break { event, allow_any } => {
16519 break (event, allow_any)
16520 }
16521 }
16522 }
16523 (S::Field(Some(deserializer)), event) => {
16524 let output = deserializer.next(reader, event)?;
16525 match self.handle_field(reader, output, &mut fallback)? {
16526 ElementHandlerOutput::Continue { event, allow_any } => {
16527 allow_any_element = allow_any_element || allow_any;
16528 event
16529 }
16530 ElementHandlerOutput::Break { event, allow_any } => {
16531 break (event, allow_any)
16532 }
16533 }
16534 }
16535 (_, event @ Event::End(_)) => {
16536 if let Some(fallback) = fallback.take() {
16537 self.finish_state(reader, fallback)?;
16538 }
16539 return Ok(DeserializerOutput {
16540 artifact: DeserializerArtifact::Data(self.finish(reader)?),
16541 event: DeserializerEvent::Continue(event),
16542 allow_any: false,
16543 });
16544 }
16545 (S::Init__, event) => {
16546 fallback.get_or_insert(S::Init__);
16547 *self.state = KeybaseTypeContentDeserializerState::Annotation(None);
16548 event
16549 }
16550 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
16551 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
16552 let output =
16553 <super::Annotation as WithDeserializer>::Deserializer::init(
16554 reader, event,
16555 )?;
16556 match self.handle_annotation(reader, output, &mut fallback)? {
16557 ElementHandlerOutput::Continue { event, allow_any } => {
16558 allow_any_element = allow_any_element || allow_any;
16559 event
16560 }
16561 ElementHandlerOutput::Break { event, allow_any } => {
16562 break (event, allow_any)
16563 }
16564 }
16565 } else {
16566 *self.state = S::Selector(None);
16567 allow_any_element = true;
16568 fallback.get_or_insert(S::Annotation(None));
16569 event
16570 }
16571 }
16572 (S::Selector(None), event @ (Event::Start(_) | Event::Empty(_))) => {
16573 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"selector") {
16574 let output = <super::Field as WithDeserializer>::Deserializer::init(
16575 reader, event,
16576 )?;
16577 match self.handle_selector(reader, output, &mut fallback)? {
16578 ElementHandlerOutput::Continue { event, allow_any } => {
16579 allow_any_element = allow_any_element || allow_any;
16580 event
16581 }
16582 ElementHandlerOutput::Break { event, allow_any } => {
16583 break (event, allow_any)
16584 }
16585 }
16586 } else {
16587 *self.state = S::Field(None);
16588 allow_any_element = true;
16589 fallback.get_or_insert(S::Selector(None));
16590 event
16591 }
16592 }
16593 (S::Field(None), event @ (Event::Start(_) | Event::Empty(_))) => {
16594 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"field") {
16595 let output = <super::Field as WithDeserializer>::Deserializer::init(
16596 reader, event,
16597 )?;
16598 match self.handle_field(reader, output, &mut fallback)? {
16599 ElementHandlerOutput::Continue { event, allow_any } => {
16600 allow_any_element = allow_any_element || allow_any;
16601 event
16602 }
16603 ElementHandlerOutput::Break { event, allow_any } => {
16604 break (event, allow_any)
16605 }
16606 }
16607 } else {
16608 *self.state = S::Done__;
16609 allow_any_element = true;
16610 fallback.get_or_insert(S::Field(None));
16611 event
16612 }
16613 }
16614 (S::Done__, event) => {
16615 fallback.get_or_insert(S::Done__);
16616 break (DeserializerEvent::Continue(event), allow_any_element);
16617 }
16618 (S::Unknown__, _) => unreachable!(),
16619 (state, event) => {
16620 *self.state = state;
16621 break (DeserializerEvent::Break(event), false);
16622 }
16623 }
16624 };
16625 if let Some(fallback) = fallback {
16626 *self.state = fallback;
16627 }
16628 Ok(DeserializerOutput {
16629 artifact: DeserializerArtifact::Deserializer(self),
16630 event,
16631 allow_any,
16632 })
16633 }
16634 fn finish<R>(mut self, reader: &R) -> Result<super::KeybaseTypeContent, Error>
16635 where
16636 R: DeserializeReader,
16637 {
16638 let state = replace(
16639 &mut *self.state,
16640 KeybaseTypeContentDeserializerState::Unknown__,
16641 );
16642 self.finish_state(reader, state)?;
16643 Ok(super::KeybaseTypeContent {
16644 annotation: self.annotation,
16645 selector: self
16646 .selector
16647 .ok_or_else(|| ErrorKind::MissingElement("selector".into()))?,
16648 field: self.field,
16649 })
16650 }
16651 }
16652 #[derive(Debug)]
16653 pub struct KeyrefDeserializer {
16654 id: Option<String>,
16655 name: Option<String>,
16656 ref_: Option<super::QName>,
16657 refer: Option<super::QName>,
16658 content: Option<super::KeyrefContent>,
16659 state: Box<KeyrefDeserializerState>,
16660 }
16661 #[derive(Debug)]
16662 enum KeyrefDeserializerState {
16663 Init__,
16664 Next__,
16665 Content__(<super::KeyrefContent as WithDeserializer>::Deserializer),
16666 Unknown__,
16667 }
16668 impl KeyrefDeserializer {
16669 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
16670 where
16671 R: DeserializeReader,
16672 {
16673 let mut id: Option<String> = None;
16674 let mut name: Option<String> = None;
16675 let mut ref_: Option<super::QName> = None;
16676 let mut refer: Option<super::QName> = None;
16677 for attrib in filter_xmlns_attributes(bytes_start) {
16678 let attrib = attrib?;
16679 if matches!(
16680 reader.resolve_local_name(attrib.key, &super::NS_XS),
16681 Some(b"id")
16682 ) {
16683 reader.read_attrib(&mut id, b"id", &attrib.value)?;
16684 } else if matches!(
16685 reader.resolve_local_name(attrib.key, &super::NS_XS),
16686 Some(b"name")
16687 ) {
16688 reader.read_attrib(&mut name, b"name", &attrib.value)?;
16689 } else if matches!(
16690 reader.resolve_local_name(attrib.key, &super::NS_XS),
16691 Some(b"ref")
16692 ) {
16693 reader.read_attrib(&mut ref_, b"ref", &attrib.value)?;
16694 } else if matches!(
16695 reader.resolve_local_name(attrib.key, &super::NS_XS),
16696 Some(b"refer")
16697 ) {
16698 reader.read_attrib(&mut refer, b"refer", &attrib.value)?;
16699 }
16700 }
16701 Ok(Self {
16702 id: id,
16703 name: name,
16704 ref_: ref_,
16705 refer: refer,
16706 content: None,
16707 state: Box::new(KeyrefDeserializerState::Init__),
16708 })
16709 }
16710 fn finish_state<R>(
16711 &mut self,
16712 reader: &R,
16713 state: KeyrefDeserializerState,
16714 ) -> Result<(), Error>
16715 where
16716 R: DeserializeReader,
16717 {
16718 if let KeyrefDeserializerState::Content__(deserializer) = state {
16719 self.store_content(deserializer.finish(reader)?)?;
16720 }
16721 Ok(())
16722 }
16723 fn store_content(&mut self, value: super::KeyrefContent) -> Result<(), Error> {
16724 if self.content.is_some() {
16725 Err(ErrorKind::DuplicateContent)?;
16726 }
16727 self.content = Some(value);
16728 Ok(())
16729 }
16730 fn handle_content<'de, R>(
16731 &mut self,
16732 reader: &R,
16733 output: DeserializerOutput<'de, super::KeyrefContent>,
16734 fallback: &mut Option<KeyrefDeserializerState>,
16735 ) -> Result<ElementHandlerOutput<'de>, Error>
16736 where
16737 R: DeserializeReader,
16738 {
16739 let DeserializerOutput {
16740 artifact,
16741 event,
16742 allow_any,
16743 } = output;
16744 if artifact.is_none() {
16745 *self.state = fallback.take().unwrap_or(KeyrefDeserializerState::Next__);
16746 return Ok(ElementHandlerOutput::break_(event, allow_any));
16747 }
16748 if let Some(fallback) = fallback.take() {
16749 self.finish_state(reader, fallback)?;
16750 }
16751 Ok(match artifact {
16752 DeserializerArtifact::None => unreachable!(),
16753 DeserializerArtifact::Data(data) => {
16754 self.store_content(data)?;
16755 *self.state = KeyrefDeserializerState::Next__;
16756 ElementHandlerOutput::from_event(event, allow_any)
16757 }
16758 DeserializerArtifact::Deserializer(deserializer) => {
16759 let ret = ElementHandlerOutput::from_event(event, allow_any);
16760 match &ret {
16761 ElementHandlerOutput::Continue { .. } => {
16762 fallback
16763 .get_or_insert(KeyrefDeserializerState::Content__(deserializer));
16764 *self.state = KeyrefDeserializerState::Next__;
16765 }
16766 ElementHandlerOutput::Break { .. } => {
16767 *self.state = KeyrefDeserializerState::Content__(deserializer);
16768 }
16769 }
16770 ret
16771 }
16772 })
16773 }
16774 }
16775 impl<'de> Deserializer<'de, super::Keyref> for KeyrefDeserializer {
16776 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Keyref>
16777 where
16778 R: DeserializeReader,
16779 {
16780 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
16781 }
16782 fn next<R>(
16783 mut self,
16784 reader: &R,
16785 event: Event<'de>,
16786 ) -> DeserializerResult<'de, super::Keyref>
16787 where
16788 R: DeserializeReader,
16789 {
16790 use KeyrefDeserializerState as S;
16791 let mut event = event;
16792 let mut fallback = None;
16793 let (event, allow_any) = loop {
16794 let state = replace(&mut *self.state, S::Unknown__);
16795 event = match (state, event) {
16796 (S::Content__(deserializer), event) => {
16797 let output = deserializer.next(reader, event)?;
16798 match self.handle_content(reader, output, &mut fallback)? {
16799 ElementHandlerOutput::Break { event, allow_any } => {
16800 break (event, allow_any)
16801 }
16802 ElementHandlerOutput::Continue { event, .. } => event,
16803 }
16804 }
16805 (_, Event::End(_)) => {
16806 return Ok(DeserializerOutput {
16807 artifact: DeserializerArtifact::Data(self.finish(reader)?),
16808 event: DeserializerEvent::None,
16809 allow_any: false,
16810 });
16811 }
16812 (old_state @ (S::Init__ | S::Next__), event) => {
16813 let output =
16814 <super::KeyrefContent as WithDeserializer>::Deserializer::init(
16815 reader, event,
16816 )?;
16817 match self.handle_content(reader, output, &mut fallback)? {
16818 ElementHandlerOutput::Break { event, allow_any } => {
16819 if matches!(&*self.state, S::Unknown__) {
16820 *self.state = old_state;
16821 }
16822 break (event, allow_any);
16823 }
16824 ElementHandlerOutput::Continue { event, .. } => event,
16825 }
16826 }
16827 (S::Unknown__, _) => unreachable!(),
16828 }
16829 };
16830 Ok(DeserializerOutput {
16831 artifact: DeserializerArtifact::Deserializer(self),
16832 event,
16833 allow_any,
16834 })
16835 }
16836 fn finish<R>(mut self, reader: &R) -> Result<super::Keyref, Error>
16837 where
16838 R: DeserializeReader,
16839 {
16840 let state = replace(&mut *self.state, KeyrefDeserializerState::Unknown__);
16841 self.finish_state(reader, state)?;
16842 Ok(super::Keyref {
16843 id: self.id,
16844 name: self.name,
16845 ref_: self.ref_,
16846 refer: self.refer,
16847 content: self.content,
16848 })
16849 }
16850 }
16851 #[derive(Debug)]
16852 pub struct KeyrefContentDeserializer {
16853 annotation: Option<super::Annotation>,
16854 selector: Option<super::Field>,
16855 field: Vec<super::Field>,
16856 state: Box<KeyrefContentDeserializerState>,
16857 }
16858 #[derive(Debug)]
16859 enum KeyrefContentDeserializerState {
16860 Init__,
16861 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
16862 Selector(Option<<super::Field as WithDeserializer>::Deserializer>),
16863 Field(Option<<super::Field as WithDeserializer>::Deserializer>),
16864 Done__,
16865 Unknown__,
16866 }
16867 impl KeyrefContentDeserializer {
16868 fn finish_state<R>(
16869 &mut self,
16870 reader: &R,
16871 state: KeyrefContentDeserializerState,
16872 ) -> Result<(), Error>
16873 where
16874 R: DeserializeReader,
16875 {
16876 use KeyrefContentDeserializerState as S;
16877 match state {
16878 S::Annotation(Some(deserializer)) => {
16879 self.store_annotation(deserializer.finish(reader)?)?
16880 }
16881 S::Selector(Some(deserializer)) => {
16882 self.store_selector(deserializer.finish(reader)?)?
16883 }
16884 S::Field(Some(deserializer)) => self.store_field(deserializer.finish(reader)?)?,
16885 _ => (),
16886 }
16887 Ok(())
16888 }
16889 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
16890 if self.annotation.is_some() {
16891 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
16892 b"annotation",
16893 )))?;
16894 }
16895 self.annotation = Some(value);
16896 Ok(())
16897 }
16898 fn store_selector(&mut self, value: super::Field) -> Result<(), Error> {
16899 if self.selector.is_some() {
16900 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
16901 b"selector",
16902 )))?;
16903 }
16904 self.selector = Some(value);
16905 Ok(())
16906 }
16907 fn store_field(&mut self, value: super::Field) -> Result<(), Error> {
16908 self.field.push(value);
16909 Ok(())
16910 }
16911 fn handle_annotation<'de, R>(
16912 &mut self,
16913 reader: &R,
16914 output: DeserializerOutput<'de, super::Annotation>,
16915 fallback: &mut Option<KeyrefContentDeserializerState>,
16916 ) -> Result<ElementHandlerOutput<'de>, Error>
16917 where
16918 R: DeserializeReader,
16919 {
16920 let DeserializerOutput {
16921 artifact,
16922 event,
16923 allow_any,
16924 } = output;
16925 if artifact.is_none() {
16926 fallback.get_or_insert(KeyrefContentDeserializerState::Annotation(None));
16927 *self.state = KeyrefContentDeserializerState::Selector(None);
16928 return Ok(ElementHandlerOutput::from_event(event, allow_any));
16929 }
16930 if let Some(fallback) = fallback.take() {
16931 self.finish_state(reader, fallback)?;
16932 }
16933 Ok(match artifact {
16934 DeserializerArtifact::None => unreachable!(),
16935 DeserializerArtifact::Data(data) => {
16936 self.store_annotation(data)?;
16937 *self.state = KeyrefContentDeserializerState::Selector(None);
16938 ElementHandlerOutput::from_event(event, allow_any)
16939 }
16940 DeserializerArtifact::Deserializer(deserializer) => {
16941 let ret = ElementHandlerOutput::from_event(event, allow_any);
16942 match &ret {
16943 ElementHandlerOutput::Continue { .. } => {
16944 fallback.get_or_insert(KeyrefContentDeserializerState::Annotation(
16945 Some(deserializer),
16946 ));
16947 *self.state = KeyrefContentDeserializerState::Selector(None);
16948 }
16949 ElementHandlerOutput::Break { .. } => {
16950 *self.state =
16951 KeyrefContentDeserializerState::Annotation(Some(deserializer));
16952 }
16953 }
16954 ret
16955 }
16956 })
16957 }
16958 fn handle_selector<'de, R>(
16959 &mut self,
16960 reader: &R,
16961 output: DeserializerOutput<'de, super::Field>,
16962 fallback: &mut Option<KeyrefContentDeserializerState>,
16963 ) -> Result<ElementHandlerOutput<'de>, Error>
16964 where
16965 R: DeserializeReader,
16966 {
16967 let DeserializerOutput {
16968 artifact,
16969 event,
16970 allow_any,
16971 } = output;
16972 if artifact.is_none() {
16973 if self.selector.is_some() {
16974 fallback.get_or_insert(KeyrefContentDeserializerState::Selector(None));
16975 *self.state = KeyrefContentDeserializerState::Field(None);
16976 return Ok(ElementHandlerOutput::from_event(event, allow_any));
16977 } else {
16978 *self.state = KeyrefContentDeserializerState::Selector(None);
16979 return Ok(ElementHandlerOutput::break_(event, allow_any));
16980 }
16981 }
16982 if let Some(fallback) = fallback.take() {
16983 self.finish_state(reader, fallback)?;
16984 }
16985 Ok(match artifact {
16986 DeserializerArtifact::None => unreachable!(),
16987 DeserializerArtifact::Data(data) => {
16988 self.store_selector(data)?;
16989 *self.state = KeyrefContentDeserializerState::Field(None);
16990 ElementHandlerOutput::from_event(event, allow_any)
16991 }
16992 DeserializerArtifact::Deserializer(deserializer) => {
16993 let ret = ElementHandlerOutput::from_event(event, allow_any);
16994 match &ret {
16995 ElementHandlerOutput::Continue { .. } => {
16996 fallback.get_or_insert(KeyrefContentDeserializerState::Selector(Some(
16997 deserializer,
16998 )));
16999 *self.state = KeyrefContentDeserializerState::Field(None);
17000 }
17001 ElementHandlerOutput::Break { .. } => {
17002 *self.state =
17003 KeyrefContentDeserializerState::Selector(Some(deserializer));
17004 }
17005 }
17006 ret
17007 }
17008 })
17009 }
17010 fn handle_field<'de, R>(
17011 &mut self,
17012 reader: &R,
17013 output: DeserializerOutput<'de, super::Field>,
17014 fallback: &mut Option<KeyrefContentDeserializerState>,
17015 ) -> Result<ElementHandlerOutput<'de>, Error>
17016 where
17017 R: DeserializeReader,
17018 {
17019 let DeserializerOutput {
17020 artifact,
17021 event,
17022 allow_any,
17023 } = output;
17024 if artifact.is_none() {
17025 if self.field.len() < 1usize {
17026 *self.state = KeyrefContentDeserializerState::Field(None);
17027 return Ok(ElementHandlerOutput::break_(event, allow_any));
17028 } else {
17029 fallback.get_or_insert(KeyrefContentDeserializerState::Field(None));
17030 *self.state = KeyrefContentDeserializerState::Done__;
17031 return Ok(ElementHandlerOutput::from_event(event, allow_any));
17032 }
17033 }
17034 if let Some(fallback) = fallback.take() {
17035 self.finish_state(reader, fallback)?;
17036 }
17037 Ok(match artifact {
17038 DeserializerArtifact::None => unreachable!(),
17039 DeserializerArtifact::Data(data) => {
17040 self.store_field(data)?;
17041 *self.state = KeyrefContentDeserializerState::Field(None);
17042 ElementHandlerOutput::from_event(event, allow_any)
17043 }
17044 DeserializerArtifact::Deserializer(deserializer) => {
17045 let ret = ElementHandlerOutput::from_event(event, allow_any);
17046 match &ret {
17047 ElementHandlerOutput::Continue { .. } => {
17048 fallback.get_or_insert(KeyrefContentDeserializerState::Field(Some(
17049 deserializer,
17050 )));
17051 if self.field.len().saturating_add(1) < 1usize {
17052 *self.state = KeyrefContentDeserializerState::Field(None);
17053 } else {
17054 *self.state = KeyrefContentDeserializerState::Done__;
17055 }
17056 }
17057 ElementHandlerOutput::Break { .. } => {
17058 *self.state = KeyrefContentDeserializerState::Field(Some(deserializer));
17059 }
17060 }
17061 ret
17062 }
17063 })
17064 }
17065 }
17066 impl<'de> Deserializer<'de, super::KeyrefContent> for KeyrefContentDeserializer {
17067 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::KeyrefContent>
17068 where
17069 R: DeserializeReader,
17070 {
17071 let deserializer = Self {
17072 annotation: None,
17073 selector: None,
17074 field: Vec::new(),
17075 state: Box::new(KeyrefContentDeserializerState::Init__),
17076 };
17077 let mut output = deserializer.next(reader, event)?;
17078 output.artifact = match output.artifact {
17079 DeserializerArtifact::Deserializer(x)
17080 if matches!(&*x.state, KeyrefContentDeserializerState::Init__) =>
17081 {
17082 DeserializerArtifact::None
17083 }
17084 artifact => artifact,
17085 };
17086 Ok(output)
17087 }
17088 fn next<R>(
17089 mut self,
17090 reader: &R,
17091 event: Event<'de>,
17092 ) -> DeserializerResult<'de, super::KeyrefContent>
17093 where
17094 R: DeserializeReader,
17095 {
17096 use KeyrefContentDeserializerState as S;
17097 let mut event = event;
17098 let mut fallback = None;
17099 let mut allow_any_element = false;
17100 let (event, allow_any) = loop {
17101 let state = replace(&mut *self.state, S::Unknown__);
17102 event = match (state, event) {
17103 (S::Annotation(Some(deserializer)), event) => {
17104 let output = deserializer.next(reader, event)?;
17105 match self.handle_annotation(reader, output, &mut fallback)? {
17106 ElementHandlerOutput::Continue { event, allow_any } => {
17107 allow_any_element = allow_any_element || allow_any;
17108 event
17109 }
17110 ElementHandlerOutput::Break { event, allow_any } => {
17111 break (event, allow_any)
17112 }
17113 }
17114 }
17115 (S::Selector(Some(deserializer)), event) => {
17116 let output = deserializer.next(reader, event)?;
17117 match self.handle_selector(reader, output, &mut fallback)? {
17118 ElementHandlerOutput::Continue { event, allow_any } => {
17119 allow_any_element = allow_any_element || allow_any;
17120 event
17121 }
17122 ElementHandlerOutput::Break { event, allow_any } => {
17123 break (event, allow_any)
17124 }
17125 }
17126 }
17127 (S::Field(Some(deserializer)), event) => {
17128 let output = deserializer.next(reader, event)?;
17129 match self.handle_field(reader, output, &mut fallback)? {
17130 ElementHandlerOutput::Continue { event, allow_any } => {
17131 allow_any_element = allow_any_element || allow_any;
17132 event
17133 }
17134 ElementHandlerOutput::Break { event, allow_any } => {
17135 break (event, allow_any)
17136 }
17137 }
17138 }
17139 (_, event @ Event::End(_)) => {
17140 if let Some(fallback) = fallback.take() {
17141 self.finish_state(reader, fallback)?;
17142 }
17143 return Ok(DeserializerOutput {
17144 artifact: DeserializerArtifact::Data(self.finish(reader)?),
17145 event: DeserializerEvent::Continue(event),
17146 allow_any: false,
17147 });
17148 }
17149 (S::Init__, event) => {
17150 fallback.get_or_insert(S::Init__);
17151 *self.state = KeyrefContentDeserializerState::Annotation(None);
17152 event
17153 }
17154 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
17155 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
17156 let output =
17157 <super::Annotation as WithDeserializer>::Deserializer::init(
17158 reader, event,
17159 )?;
17160 match self.handle_annotation(reader, output, &mut fallback)? {
17161 ElementHandlerOutput::Continue { event, allow_any } => {
17162 allow_any_element = allow_any_element || allow_any;
17163 event
17164 }
17165 ElementHandlerOutput::Break { event, allow_any } => {
17166 break (event, allow_any)
17167 }
17168 }
17169 } else {
17170 *self.state = S::Selector(None);
17171 allow_any_element = true;
17172 fallback.get_or_insert(S::Annotation(None));
17173 event
17174 }
17175 }
17176 (S::Selector(None), event @ (Event::Start(_) | Event::Empty(_))) => {
17177 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"selector") {
17178 let output = <super::Field as WithDeserializer>::Deserializer::init(
17179 reader, event,
17180 )?;
17181 match self.handle_selector(reader, output, &mut fallback)? {
17182 ElementHandlerOutput::Continue { event, allow_any } => {
17183 allow_any_element = allow_any_element || allow_any;
17184 event
17185 }
17186 ElementHandlerOutput::Break { event, allow_any } => {
17187 break (event, allow_any)
17188 }
17189 }
17190 } else {
17191 *self.state = S::Field(None);
17192 allow_any_element = true;
17193 fallback.get_or_insert(S::Selector(None));
17194 event
17195 }
17196 }
17197 (S::Field(None), event @ (Event::Start(_) | Event::Empty(_))) => {
17198 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"field") {
17199 let output = <super::Field as WithDeserializer>::Deserializer::init(
17200 reader, event,
17201 )?;
17202 match self.handle_field(reader, output, &mut fallback)? {
17203 ElementHandlerOutput::Continue { event, allow_any } => {
17204 allow_any_element = allow_any_element || allow_any;
17205 event
17206 }
17207 ElementHandlerOutput::Break { event, allow_any } => {
17208 break (event, allow_any)
17209 }
17210 }
17211 } else {
17212 *self.state = S::Done__;
17213 allow_any_element = true;
17214 fallback.get_or_insert(S::Field(None));
17215 event
17216 }
17217 }
17218 (S::Done__, event) => {
17219 fallback.get_or_insert(S::Done__);
17220 break (DeserializerEvent::Continue(event), allow_any_element);
17221 }
17222 (S::Unknown__, _) => unreachable!(),
17223 (state, event) => {
17224 *self.state = state;
17225 break (DeserializerEvent::Break(event), false);
17226 }
17227 }
17228 };
17229 if let Some(fallback) = fallback {
17230 *self.state = fallback;
17231 }
17232 Ok(DeserializerOutput {
17233 artifact: DeserializerArtifact::Deserializer(self),
17234 event,
17235 allow_any,
17236 })
17237 }
17238 fn finish<R>(mut self, reader: &R) -> Result<super::KeyrefContent, Error>
17239 where
17240 R: DeserializeReader,
17241 {
17242 let state = replace(&mut *self.state, KeyrefContentDeserializerState::Unknown__);
17243 self.finish_state(reader, state)?;
17244 Ok(super::KeyrefContent {
17245 annotation: self.annotation,
17246 selector: self
17247 .selector
17248 .ok_or_else(|| ErrorKind::MissingElement("selector".into()))?,
17249 field: self.field,
17250 })
17251 }
17252 }
17253 #[derive(Debug)]
17254 pub enum FacetDeserializer {
17255 Init__,
17256 MinExclusive(
17257 Option<super::FacetType>,
17258 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17259 ),
17260 MinInclusive(
17261 Option<super::FacetType>,
17262 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17263 ),
17264 MaxExclusive(
17265 Option<super::FacetType>,
17266 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17267 ),
17268 MaxInclusive(
17269 Option<super::FacetType>,
17270 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17271 ),
17272 TotalDigits(
17273 Option<super::FacetType>,
17274 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17275 ),
17276 FractionDigits(
17277 Option<super::FacetType>,
17278 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17279 ),
17280 Length(
17281 Option<super::FacetType>,
17282 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17283 ),
17284 MinLength(
17285 Option<super::FacetType>,
17286 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17287 ),
17288 MaxLength(
17289 Option<super::FacetType>,
17290 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17291 ),
17292 Enumeration(
17293 Option<super::FacetType>,
17294 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17295 ),
17296 WhiteSpace(
17297 Option<super::FacetType>,
17298 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17299 ),
17300 Pattern(
17301 Option<super::FacetType>,
17302 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17303 ),
17304 Assertion(
17305 Option<super::AssertionType>,
17306 Option<<super::AssertionType as WithDeserializer>::Deserializer>,
17307 ),
17308 ExplicitTimezone(
17309 Option<super::FacetType>,
17310 Option<<super::FacetType as WithDeserializer>::Deserializer>,
17311 ),
17312 Done__(super::Facet),
17313 Unknown__,
17314 }
17315 impl FacetDeserializer {
17316 fn find_suitable<'de, R>(
17317 &mut self,
17318 reader: &R,
17319 event: Event<'de>,
17320 fallback: &mut Option<FacetDeserializer>,
17321 ) -> Result<ElementHandlerOutput<'de>, Error>
17322 where
17323 R: DeserializeReader,
17324 {
17325 let (Event::Start(x) | Event::Empty(x)) = &event else {
17326 *self = Self::Init__;
17327 return Ok(ElementHandlerOutput::return_to_parent(event, false));
17328 };
17329 if matches!(
17330 reader.resolve_local_name(x.name(), &super::NS_XS),
17331 Some(b"minExclusive")
17332 ) {
17333 let output =
17334 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
17335 return self.handle_min_exclusive(
17336 reader,
17337 Default::default(),
17338 output,
17339 &mut *fallback,
17340 );
17341 }
17342 if matches!(
17343 reader.resolve_local_name(x.name(), &super::NS_XS),
17344 Some(b"minInclusive")
17345 ) {
17346 let output =
17347 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
17348 return self.handle_min_inclusive(
17349 reader,
17350 Default::default(),
17351 output,
17352 &mut *fallback,
17353 );
17354 }
17355 if matches!(
17356 reader.resolve_local_name(x.name(), &super::NS_XS),
17357 Some(b"maxExclusive")
17358 ) {
17359 let output =
17360 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
17361 return self.handle_max_exclusive(
17362 reader,
17363 Default::default(),
17364 output,
17365 &mut *fallback,
17366 );
17367 }
17368 if matches!(
17369 reader.resolve_local_name(x.name(), &super::NS_XS),
17370 Some(b"maxInclusive")
17371 ) {
17372 let output =
17373 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
17374 return self.handle_max_inclusive(
17375 reader,
17376 Default::default(),
17377 output,
17378 &mut *fallback,
17379 );
17380 }
17381 if matches!(
17382 reader.resolve_local_name(x.name(), &super::NS_XS),
17383 Some(b"totalDigits")
17384 ) {
17385 let output =
17386 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
17387 return self.handle_total_digits(
17388 reader,
17389 Default::default(),
17390 output,
17391 &mut *fallback,
17392 );
17393 }
17394 if matches!(
17395 reader.resolve_local_name(x.name(), &super::NS_XS),
17396 Some(b"fractionDigits")
17397 ) {
17398 let output =
17399 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
17400 return self.handle_fraction_digits(
17401 reader,
17402 Default::default(),
17403 output,
17404 &mut *fallback,
17405 );
17406 }
17407 if matches!(
17408 reader.resolve_local_name(x.name(), &super::NS_XS),
17409 Some(b"length")
17410 ) {
17411 let output =
17412 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
17413 return self.handle_length(reader, Default::default(), output, &mut *fallback);
17414 }
17415 if matches!(
17416 reader.resolve_local_name(x.name(), &super::NS_XS),
17417 Some(b"minLength")
17418 ) {
17419 let output =
17420 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
17421 return self.handle_min_length(reader, Default::default(), output, &mut *fallback);
17422 }
17423 if matches!(
17424 reader.resolve_local_name(x.name(), &super::NS_XS),
17425 Some(b"maxLength")
17426 ) {
17427 let output =
17428 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
17429 return self.handle_max_length(reader, Default::default(), output, &mut *fallback);
17430 }
17431 if matches!(
17432 reader.resolve_local_name(x.name(), &super::NS_XS),
17433 Some(b"enumeration")
17434 ) {
17435 let output =
17436 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
17437 return self.handle_enumeration(reader, Default::default(), output, &mut *fallback);
17438 }
17439 if matches!(
17440 reader.resolve_local_name(x.name(), &super::NS_XS),
17441 Some(b"whiteSpace")
17442 ) {
17443 let output =
17444 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
17445 return self.handle_white_space(reader, Default::default(), output, &mut *fallback);
17446 }
17447 if matches!(
17448 reader.resolve_local_name(x.name(), &super::NS_XS),
17449 Some(b"pattern")
17450 ) {
17451 let output =
17452 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
17453 return self.handle_pattern(reader, Default::default(), output, &mut *fallback);
17454 }
17455 if matches!(
17456 reader.resolve_local_name(x.name(), &super::NS_XS),
17457 Some(b"assertion")
17458 ) {
17459 let output =
17460 <super::AssertionType as WithDeserializer>::Deserializer::init(reader, event)?;
17461 return self.handle_assertion(reader, Default::default(), output, &mut *fallback);
17462 }
17463 if matches!(
17464 reader.resolve_local_name(x.name(), &super::NS_XS),
17465 Some(b"explicitTimezone")
17466 ) {
17467 let output =
17468 <super::FacetType as WithDeserializer>::Deserializer::init(reader, event)?;
17469 return self.handle_explicit_timezone(
17470 reader,
17471 Default::default(),
17472 output,
17473 &mut *fallback,
17474 );
17475 }
17476 *self = Self::Init__;
17477 Ok(ElementHandlerOutput::return_to_parent(event, false))
17478 }
17479 fn store_min_exclusive(
17480 values: &mut Option<super::FacetType>,
17481 value: super::FacetType,
17482 ) -> Result<(), Error> {
17483 if values.is_some() {
17484 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17485 b"minExclusive",
17486 )))?;
17487 }
17488 *values = Some(value);
17489 Ok(())
17490 }
17491 fn store_min_inclusive(
17492 values: &mut Option<super::FacetType>,
17493 value: super::FacetType,
17494 ) -> Result<(), Error> {
17495 if values.is_some() {
17496 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17497 b"minInclusive",
17498 )))?;
17499 }
17500 *values = Some(value);
17501 Ok(())
17502 }
17503 fn store_max_exclusive(
17504 values: &mut Option<super::FacetType>,
17505 value: super::FacetType,
17506 ) -> Result<(), Error> {
17507 if values.is_some() {
17508 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17509 b"maxExclusive",
17510 )))?;
17511 }
17512 *values = Some(value);
17513 Ok(())
17514 }
17515 fn store_max_inclusive(
17516 values: &mut Option<super::FacetType>,
17517 value: super::FacetType,
17518 ) -> Result<(), Error> {
17519 if values.is_some() {
17520 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17521 b"maxInclusive",
17522 )))?;
17523 }
17524 *values = Some(value);
17525 Ok(())
17526 }
17527 fn store_total_digits(
17528 values: &mut Option<super::FacetType>,
17529 value: super::FacetType,
17530 ) -> Result<(), Error> {
17531 if values.is_some() {
17532 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17533 b"totalDigits",
17534 )))?;
17535 }
17536 *values = Some(value);
17537 Ok(())
17538 }
17539 fn store_fraction_digits(
17540 values: &mut Option<super::FacetType>,
17541 value: super::FacetType,
17542 ) -> Result<(), Error> {
17543 if values.is_some() {
17544 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17545 b"fractionDigits",
17546 )))?;
17547 }
17548 *values = Some(value);
17549 Ok(())
17550 }
17551 fn store_length(
17552 values: &mut Option<super::FacetType>,
17553 value: super::FacetType,
17554 ) -> Result<(), Error> {
17555 if values.is_some() {
17556 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17557 b"length",
17558 )))?;
17559 }
17560 *values = Some(value);
17561 Ok(())
17562 }
17563 fn store_min_length(
17564 values: &mut Option<super::FacetType>,
17565 value: super::FacetType,
17566 ) -> Result<(), Error> {
17567 if values.is_some() {
17568 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17569 b"minLength",
17570 )))?;
17571 }
17572 *values = Some(value);
17573 Ok(())
17574 }
17575 fn store_max_length(
17576 values: &mut Option<super::FacetType>,
17577 value: super::FacetType,
17578 ) -> Result<(), Error> {
17579 if values.is_some() {
17580 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17581 b"maxLength",
17582 )))?;
17583 }
17584 *values = Some(value);
17585 Ok(())
17586 }
17587 fn store_enumeration(
17588 values: &mut Option<super::FacetType>,
17589 value: super::FacetType,
17590 ) -> Result<(), Error> {
17591 if values.is_some() {
17592 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17593 b"enumeration",
17594 )))?;
17595 }
17596 *values = Some(value);
17597 Ok(())
17598 }
17599 fn store_white_space(
17600 values: &mut Option<super::FacetType>,
17601 value: super::FacetType,
17602 ) -> Result<(), Error> {
17603 if values.is_some() {
17604 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17605 b"whiteSpace",
17606 )))?;
17607 }
17608 *values = Some(value);
17609 Ok(())
17610 }
17611 fn store_pattern(
17612 values: &mut Option<super::FacetType>,
17613 value: super::FacetType,
17614 ) -> Result<(), Error> {
17615 if values.is_some() {
17616 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17617 b"pattern",
17618 )))?;
17619 }
17620 *values = Some(value);
17621 Ok(())
17622 }
17623 fn store_assertion(
17624 values: &mut Option<super::AssertionType>,
17625 value: super::AssertionType,
17626 ) -> Result<(), Error> {
17627 if values.is_some() {
17628 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17629 b"assertion",
17630 )))?;
17631 }
17632 *values = Some(value);
17633 Ok(())
17634 }
17635 fn store_explicit_timezone(
17636 values: &mut Option<super::FacetType>,
17637 value: super::FacetType,
17638 ) -> Result<(), Error> {
17639 if values.is_some() {
17640 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
17641 b"explicitTimezone",
17642 )))?;
17643 }
17644 *values = Some(value);
17645 Ok(())
17646 }
17647 fn handle_min_exclusive<'de, R>(
17648 &mut self,
17649 reader: &R,
17650 mut values: Option<super::FacetType>,
17651 output: DeserializerOutput<'de, super::FacetType>,
17652 fallback: &mut Option<Self>,
17653 ) -> Result<ElementHandlerOutput<'de>, Error>
17654 where
17655 R: DeserializeReader,
17656 {
17657 let DeserializerOutput {
17658 artifact,
17659 event,
17660 allow_any,
17661 } = output;
17662 if artifact.is_none() {
17663 *self = match fallback.take() {
17664 None => Self::Init__,
17665 Some(Self::MinExclusive(_, Some(deserializer))) => {
17666 Self::MinExclusive(values, Some(deserializer))
17667 }
17668 _ => unreachable!(),
17669 };
17670 return Ok(ElementHandlerOutput::break_(event, allow_any));
17671 }
17672 match fallback.take() {
17673 None => (),
17674 Some(Self::MinExclusive(_, Some(deserializer))) => {
17675 let data = deserializer.finish(reader)?;
17676 Self::store_min_exclusive(&mut values, data)?;
17677 }
17678 Some(_) => unreachable!(),
17679 }
17680 Ok(match artifact {
17681 DeserializerArtifact::None => unreachable!(),
17682 DeserializerArtifact::Data(data) => {
17683 Self::store_min_exclusive(&mut values, data)?;
17684 let data = Self::MinExclusive(values, None).finish(reader)?;
17685 *self = Self::Done__(data);
17686 ElementHandlerOutput::Break { event, allow_any }
17687 }
17688 DeserializerArtifact::Deserializer(deserializer) => {
17689 *self = Self::MinExclusive(values, Some(deserializer));
17690 ElementHandlerOutput::from_event_end(event, allow_any)
17691 }
17692 })
17693 }
17694 fn handle_min_inclusive<'de, R>(
17695 &mut self,
17696 reader: &R,
17697 mut values: Option<super::FacetType>,
17698 output: DeserializerOutput<'de, super::FacetType>,
17699 fallback: &mut Option<Self>,
17700 ) -> Result<ElementHandlerOutput<'de>, Error>
17701 where
17702 R: DeserializeReader,
17703 {
17704 let DeserializerOutput {
17705 artifact,
17706 event,
17707 allow_any,
17708 } = output;
17709 if artifact.is_none() {
17710 *self = match fallback.take() {
17711 None => Self::Init__,
17712 Some(Self::MinInclusive(_, Some(deserializer))) => {
17713 Self::MinInclusive(values, Some(deserializer))
17714 }
17715 _ => unreachable!(),
17716 };
17717 return Ok(ElementHandlerOutput::break_(event, allow_any));
17718 }
17719 match fallback.take() {
17720 None => (),
17721 Some(Self::MinInclusive(_, Some(deserializer))) => {
17722 let data = deserializer.finish(reader)?;
17723 Self::store_min_inclusive(&mut values, data)?;
17724 }
17725 Some(_) => unreachable!(),
17726 }
17727 Ok(match artifact {
17728 DeserializerArtifact::None => unreachable!(),
17729 DeserializerArtifact::Data(data) => {
17730 Self::store_min_inclusive(&mut values, data)?;
17731 let data = Self::MinInclusive(values, None).finish(reader)?;
17732 *self = Self::Done__(data);
17733 ElementHandlerOutput::Break { event, allow_any }
17734 }
17735 DeserializerArtifact::Deserializer(deserializer) => {
17736 *self = Self::MinInclusive(values, Some(deserializer));
17737 ElementHandlerOutput::from_event_end(event, allow_any)
17738 }
17739 })
17740 }
17741 fn handle_max_exclusive<'de, R>(
17742 &mut self,
17743 reader: &R,
17744 mut values: Option<super::FacetType>,
17745 output: DeserializerOutput<'de, super::FacetType>,
17746 fallback: &mut Option<Self>,
17747 ) -> Result<ElementHandlerOutput<'de>, Error>
17748 where
17749 R: DeserializeReader,
17750 {
17751 let DeserializerOutput {
17752 artifact,
17753 event,
17754 allow_any,
17755 } = output;
17756 if artifact.is_none() {
17757 *self = match fallback.take() {
17758 None => Self::Init__,
17759 Some(Self::MaxExclusive(_, Some(deserializer))) => {
17760 Self::MaxExclusive(values, Some(deserializer))
17761 }
17762 _ => unreachable!(),
17763 };
17764 return Ok(ElementHandlerOutput::break_(event, allow_any));
17765 }
17766 match fallback.take() {
17767 None => (),
17768 Some(Self::MaxExclusive(_, Some(deserializer))) => {
17769 let data = deserializer.finish(reader)?;
17770 Self::store_max_exclusive(&mut values, data)?;
17771 }
17772 Some(_) => unreachable!(),
17773 }
17774 Ok(match artifact {
17775 DeserializerArtifact::None => unreachable!(),
17776 DeserializerArtifact::Data(data) => {
17777 Self::store_max_exclusive(&mut values, data)?;
17778 let data = Self::MaxExclusive(values, None).finish(reader)?;
17779 *self = Self::Done__(data);
17780 ElementHandlerOutput::Break { event, allow_any }
17781 }
17782 DeserializerArtifact::Deserializer(deserializer) => {
17783 *self = Self::MaxExclusive(values, Some(deserializer));
17784 ElementHandlerOutput::from_event_end(event, allow_any)
17785 }
17786 })
17787 }
17788 fn handle_max_inclusive<'de, R>(
17789 &mut self,
17790 reader: &R,
17791 mut values: Option<super::FacetType>,
17792 output: DeserializerOutput<'de, super::FacetType>,
17793 fallback: &mut Option<Self>,
17794 ) -> Result<ElementHandlerOutput<'de>, Error>
17795 where
17796 R: DeserializeReader,
17797 {
17798 let DeserializerOutput {
17799 artifact,
17800 event,
17801 allow_any,
17802 } = output;
17803 if artifact.is_none() {
17804 *self = match fallback.take() {
17805 None => Self::Init__,
17806 Some(Self::MaxInclusive(_, Some(deserializer))) => {
17807 Self::MaxInclusive(values, Some(deserializer))
17808 }
17809 _ => unreachable!(),
17810 };
17811 return Ok(ElementHandlerOutput::break_(event, allow_any));
17812 }
17813 match fallback.take() {
17814 None => (),
17815 Some(Self::MaxInclusive(_, Some(deserializer))) => {
17816 let data = deserializer.finish(reader)?;
17817 Self::store_max_inclusive(&mut values, data)?;
17818 }
17819 Some(_) => unreachable!(),
17820 }
17821 Ok(match artifact {
17822 DeserializerArtifact::None => unreachable!(),
17823 DeserializerArtifact::Data(data) => {
17824 Self::store_max_inclusive(&mut values, data)?;
17825 let data = Self::MaxInclusive(values, None).finish(reader)?;
17826 *self = Self::Done__(data);
17827 ElementHandlerOutput::Break { event, allow_any }
17828 }
17829 DeserializerArtifact::Deserializer(deserializer) => {
17830 *self = Self::MaxInclusive(values, Some(deserializer));
17831 ElementHandlerOutput::from_event_end(event, allow_any)
17832 }
17833 })
17834 }
17835 fn handle_total_digits<'de, R>(
17836 &mut self,
17837 reader: &R,
17838 mut values: Option<super::FacetType>,
17839 output: DeserializerOutput<'de, super::FacetType>,
17840 fallback: &mut Option<Self>,
17841 ) -> Result<ElementHandlerOutput<'de>, Error>
17842 where
17843 R: DeserializeReader,
17844 {
17845 let DeserializerOutput {
17846 artifact,
17847 event,
17848 allow_any,
17849 } = output;
17850 if artifact.is_none() {
17851 *self = match fallback.take() {
17852 None => Self::Init__,
17853 Some(Self::TotalDigits(_, Some(deserializer))) => {
17854 Self::TotalDigits(values, Some(deserializer))
17855 }
17856 _ => unreachable!(),
17857 };
17858 return Ok(ElementHandlerOutput::break_(event, allow_any));
17859 }
17860 match fallback.take() {
17861 None => (),
17862 Some(Self::TotalDigits(_, Some(deserializer))) => {
17863 let data = deserializer.finish(reader)?;
17864 Self::store_total_digits(&mut values, data)?;
17865 }
17866 Some(_) => unreachable!(),
17867 }
17868 Ok(match artifact {
17869 DeserializerArtifact::None => unreachable!(),
17870 DeserializerArtifact::Data(data) => {
17871 Self::store_total_digits(&mut values, data)?;
17872 let data = Self::TotalDigits(values, None).finish(reader)?;
17873 *self = Self::Done__(data);
17874 ElementHandlerOutput::Break { event, allow_any }
17875 }
17876 DeserializerArtifact::Deserializer(deserializer) => {
17877 *self = Self::TotalDigits(values, Some(deserializer));
17878 ElementHandlerOutput::from_event_end(event, allow_any)
17879 }
17880 })
17881 }
17882 fn handle_fraction_digits<'de, R>(
17883 &mut self,
17884 reader: &R,
17885 mut values: Option<super::FacetType>,
17886 output: DeserializerOutput<'de, super::FacetType>,
17887 fallback: &mut Option<Self>,
17888 ) -> Result<ElementHandlerOutput<'de>, Error>
17889 where
17890 R: DeserializeReader,
17891 {
17892 let DeserializerOutput {
17893 artifact,
17894 event,
17895 allow_any,
17896 } = output;
17897 if artifact.is_none() {
17898 *self = match fallback.take() {
17899 None => Self::Init__,
17900 Some(Self::FractionDigits(_, Some(deserializer))) => {
17901 Self::FractionDigits(values, Some(deserializer))
17902 }
17903 _ => unreachable!(),
17904 };
17905 return Ok(ElementHandlerOutput::break_(event, allow_any));
17906 }
17907 match fallback.take() {
17908 None => (),
17909 Some(Self::FractionDigits(_, Some(deserializer))) => {
17910 let data = deserializer.finish(reader)?;
17911 Self::store_fraction_digits(&mut values, data)?;
17912 }
17913 Some(_) => unreachable!(),
17914 }
17915 Ok(match artifact {
17916 DeserializerArtifact::None => unreachable!(),
17917 DeserializerArtifact::Data(data) => {
17918 Self::store_fraction_digits(&mut values, data)?;
17919 let data = Self::FractionDigits(values, None).finish(reader)?;
17920 *self = Self::Done__(data);
17921 ElementHandlerOutput::Break { event, allow_any }
17922 }
17923 DeserializerArtifact::Deserializer(deserializer) => {
17924 *self = Self::FractionDigits(values, Some(deserializer));
17925 ElementHandlerOutput::from_event_end(event, allow_any)
17926 }
17927 })
17928 }
17929 fn handle_length<'de, R>(
17930 &mut self,
17931 reader: &R,
17932 mut values: Option<super::FacetType>,
17933 output: DeserializerOutput<'de, super::FacetType>,
17934 fallback: &mut Option<Self>,
17935 ) -> Result<ElementHandlerOutput<'de>, Error>
17936 where
17937 R: DeserializeReader,
17938 {
17939 let DeserializerOutput {
17940 artifact,
17941 event,
17942 allow_any,
17943 } = output;
17944 if artifact.is_none() {
17945 *self = match fallback.take() {
17946 None => Self::Init__,
17947 Some(Self::Length(_, Some(deserializer))) => {
17948 Self::Length(values, Some(deserializer))
17949 }
17950 _ => unreachable!(),
17951 };
17952 return Ok(ElementHandlerOutput::break_(event, allow_any));
17953 }
17954 match fallback.take() {
17955 None => (),
17956 Some(Self::Length(_, Some(deserializer))) => {
17957 let data = deserializer.finish(reader)?;
17958 Self::store_length(&mut values, data)?;
17959 }
17960 Some(_) => unreachable!(),
17961 }
17962 Ok(match artifact {
17963 DeserializerArtifact::None => unreachable!(),
17964 DeserializerArtifact::Data(data) => {
17965 Self::store_length(&mut values, data)?;
17966 let data = Self::Length(values, None).finish(reader)?;
17967 *self = Self::Done__(data);
17968 ElementHandlerOutput::Break { event, allow_any }
17969 }
17970 DeserializerArtifact::Deserializer(deserializer) => {
17971 *self = Self::Length(values, Some(deserializer));
17972 ElementHandlerOutput::from_event_end(event, allow_any)
17973 }
17974 })
17975 }
17976 fn handle_min_length<'de, R>(
17977 &mut self,
17978 reader: &R,
17979 mut values: Option<super::FacetType>,
17980 output: DeserializerOutput<'de, super::FacetType>,
17981 fallback: &mut Option<Self>,
17982 ) -> Result<ElementHandlerOutput<'de>, Error>
17983 where
17984 R: DeserializeReader,
17985 {
17986 let DeserializerOutput {
17987 artifact,
17988 event,
17989 allow_any,
17990 } = output;
17991 if artifact.is_none() {
17992 *self = match fallback.take() {
17993 None => Self::Init__,
17994 Some(Self::MinLength(_, Some(deserializer))) => {
17995 Self::MinLength(values, Some(deserializer))
17996 }
17997 _ => unreachable!(),
17998 };
17999 return Ok(ElementHandlerOutput::break_(event, allow_any));
18000 }
18001 match fallback.take() {
18002 None => (),
18003 Some(Self::MinLength(_, Some(deserializer))) => {
18004 let data = deserializer.finish(reader)?;
18005 Self::store_min_length(&mut values, data)?;
18006 }
18007 Some(_) => unreachable!(),
18008 }
18009 Ok(match artifact {
18010 DeserializerArtifact::None => unreachable!(),
18011 DeserializerArtifact::Data(data) => {
18012 Self::store_min_length(&mut values, data)?;
18013 let data = Self::MinLength(values, None).finish(reader)?;
18014 *self = Self::Done__(data);
18015 ElementHandlerOutput::Break { event, allow_any }
18016 }
18017 DeserializerArtifact::Deserializer(deserializer) => {
18018 *self = Self::MinLength(values, Some(deserializer));
18019 ElementHandlerOutput::from_event_end(event, allow_any)
18020 }
18021 })
18022 }
18023 fn handle_max_length<'de, R>(
18024 &mut self,
18025 reader: &R,
18026 mut values: Option<super::FacetType>,
18027 output: DeserializerOutput<'de, super::FacetType>,
18028 fallback: &mut Option<Self>,
18029 ) -> Result<ElementHandlerOutput<'de>, Error>
18030 where
18031 R: DeserializeReader,
18032 {
18033 let DeserializerOutput {
18034 artifact,
18035 event,
18036 allow_any,
18037 } = output;
18038 if artifact.is_none() {
18039 *self = match fallback.take() {
18040 None => Self::Init__,
18041 Some(Self::MaxLength(_, Some(deserializer))) => {
18042 Self::MaxLength(values, Some(deserializer))
18043 }
18044 _ => unreachable!(),
18045 };
18046 return Ok(ElementHandlerOutput::break_(event, allow_any));
18047 }
18048 match fallback.take() {
18049 None => (),
18050 Some(Self::MaxLength(_, Some(deserializer))) => {
18051 let data = deserializer.finish(reader)?;
18052 Self::store_max_length(&mut values, data)?;
18053 }
18054 Some(_) => unreachable!(),
18055 }
18056 Ok(match artifact {
18057 DeserializerArtifact::None => unreachable!(),
18058 DeserializerArtifact::Data(data) => {
18059 Self::store_max_length(&mut values, data)?;
18060 let data = Self::MaxLength(values, None).finish(reader)?;
18061 *self = Self::Done__(data);
18062 ElementHandlerOutput::Break { event, allow_any }
18063 }
18064 DeserializerArtifact::Deserializer(deserializer) => {
18065 *self = Self::MaxLength(values, Some(deserializer));
18066 ElementHandlerOutput::from_event_end(event, allow_any)
18067 }
18068 })
18069 }
18070 fn handle_enumeration<'de, R>(
18071 &mut self,
18072 reader: &R,
18073 mut values: Option<super::FacetType>,
18074 output: DeserializerOutput<'de, super::FacetType>,
18075 fallback: &mut Option<Self>,
18076 ) -> Result<ElementHandlerOutput<'de>, Error>
18077 where
18078 R: DeserializeReader,
18079 {
18080 let DeserializerOutput {
18081 artifact,
18082 event,
18083 allow_any,
18084 } = output;
18085 if artifact.is_none() {
18086 *self = match fallback.take() {
18087 None => Self::Init__,
18088 Some(Self::Enumeration(_, Some(deserializer))) => {
18089 Self::Enumeration(values, Some(deserializer))
18090 }
18091 _ => unreachable!(),
18092 };
18093 return Ok(ElementHandlerOutput::break_(event, allow_any));
18094 }
18095 match fallback.take() {
18096 None => (),
18097 Some(Self::Enumeration(_, Some(deserializer))) => {
18098 let data = deserializer.finish(reader)?;
18099 Self::store_enumeration(&mut values, data)?;
18100 }
18101 Some(_) => unreachable!(),
18102 }
18103 Ok(match artifact {
18104 DeserializerArtifact::None => unreachable!(),
18105 DeserializerArtifact::Data(data) => {
18106 Self::store_enumeration(&mut values, data)?;
18107 let data = Self::Enumeration(values, None).finish(reader)?;
18108 *self = Self::Done__(data);
18109 ElementHandlerOutput::Break { event, allow_any }
18110 }
18111 DeserializerArtifact::Deserializer(deserializer) => {
18112 *self = Self::Enumeration(values, Some(deserializer));
18113 ElementHandlerOutput::from_event_end(event, allow_any)
18114 }
18115 })
18116 }
18117 fn handle_white_space<'de, R>(
18118 &mut self,
18119 reader: &R,
18120 mut values: Option<super::FacetType>,
18121 output: DeserializerOutput<'de, super::FacetType>,
18122 fallback: &mut Option<Self>,
18123 ) -> Result<ElementHandlerOutput<'de>, Error>
18124 where
18125 R: DeserializeReader,
18126 {
18127 let DeserializerOutput {
18128 artifact,
18129 event,
18130 allow_any,
18131 } = output;
18132 if artifact.is_none() {
18133 *self = match fallback.take() {
18134 None => Self::Init__,
18135 Some(Self::WhiteSpace(_, Some(deserializer))) => {
18136 Self::WhiteSpace(values, Some(deserializer))
18137 }
18138 _ => unreachable!(),
18139 };
18140 return Ok(ElementHandlerOutput::break_(event, allow_any));
18141 }
18142 match fallback.take() {
18143 None => (),
18144 Some(Self::WhiteSpace(_, Some(deserializer))) => {
18145 let data = deserializer.finish(reader)?;
18146 Self::store_white_space(&mut values, data)?;
18147 }
18148 Some(_) => unreachable!(),
18149 }
18150 Ok(match artifact {
18151 DeserializerArtifact::None => unreachable!(),
18152 DeserializerArtifact::Data(data) => {
18153 Self::store_white_space(&mut values, data)?;
18154 let data = Self::WhiteSpace(values, None).finish(reader)?;
18155 *self = Self::Done__(data);
18156 ElementHandlerOutput::Break { event, allow_any }
18157 }
18158 DeserializerArtifact::Deserializer(deserializer) => {
18159 *self = Self::WhiteSpace(values, Some(deserializer));
18160 ElementHandlerOutput::from_event_end(event, allow_any)
18161 }
18162 })
18163 }
18164 fn handle_pattern<'de, R>(
18165 &mut self,
18166 reader: &R,
18167 mut values: Option<super::FacetType>,
18168 output: DeserializerOutput<'de, super::FacetType>,
18169 fallback: &mut Option<Self>,
18170 ) -> Result<ElementHandlerOutput<'de>, Error>
18171 where
18172 R: DeserializeReader,
18173 {
18174 let DeserializerOutput {
18175 artifact,
18176 event,
18177 allow_any,
18178 } = output;
18179 if artifact.is_none() {
18180 *self = match fallback.take() {
18181 None => Self::Init__,
18182 Some(Self::Pattern(_, Some(deserializer))) => {
18183 Self::Pattern(values, Some(deserializer))
18184 }
18185 _ => unreachable!(),
18186 };
18187 return Ok(ElementHandlerOutput::break_(event, allow_any));
18188 }
18189 match fallback.take() {
18190 None => (),
18191 Some(Self::Pattern(_, Some(deserializer))) => {
18192 let data = deserializer.finish(reader)?;
18193 Self::store_pattern(&mut values, data)?;
18194 }
18195 Some(_) => unreachable!(),
18196 }
18197 Ok(match artifact {
18198 DeserializerArtifact::None => unreachable!(),
18199 DeserializerArtifact::Data(data) => {
18200 Self::store_pattern(&mut values, data)?;
18201 let data = Self::Pattern(values, None).finish(reader)?;
18202 *self = Self::Done__(data);
18203 ElementHandlerOutput::Break { event, allow_any }
18204 }
18205 DeserializerArtifact::Deserializer(deserializer) => {
18206 *self = Self::Pattern(values, Some(deserializer));
18207 ElementHandlerOutput::from_event_end(event, allow_any)
18208 }
18209 })
18210 }
18211 fn handle_assertion<'de, R>(
18212 &mut self,
18213 reader: &R,
18214 mut values: Option<super::AssertionType>,
18215 output: DeserializerOutput<'de, super::AssertionType>,
18216 fallback: &mut Option<Self>,
18217 ) -> Result<ElementHandlerOutput<'de>, Error>
18218 where
18219 R: DeserializeReader,
18220 {
18221 let DeserializerOutput {
18222 artifact,
18223 event,
18224 allow_any,
18225 } = output;
18226 if artifact.is_none() {
18227 *self = match fallback.take() {
18228 None => Self::Init__,
18229 Some(Self::Assertion(_, Some(deserializer))) => {
18230 Self::Assertion(values, Some(deserializer))
18231 }
18232 _ => unreachable!(),
18233 };
18234 return Ok(ElementHandlerOutput::break_(event, allow_any));
18235 }
18236 match fallback.take() {
18237 None => (),
18238 Some(Self::Assertion(_, Some(deserializer))) => {
18239 let data = deserializer.finish(reader)?;
18240 Self::store_assertion(&mut values, data)?;
18241 }
18242 Some(_) => unreachable!(),
18243 }
18244 Ok(match artifact {
18245 DeserializerArtifact::None => unreachable!(),
18246 DeserializerArtifact::Data(data) => {
18247 Self::store_assertion(&mut values, data)?;
18248 let data = Self::Assertion(values, None).finish(reader)?;
18249 *self = Self::Done__(data);
18250 ElementHandlerOutput::Break { event, allow_any }
18251 }
18252 DeserializerArtifact::Deserializer(deserializer) => {
18253 *self = Self::Assertion(values, Some(deserializer));
18254 ElementHandlerOutput::from_event_end(event, allow_any)
18255 }
18256 })
18257 }
18258 fn handle_explicit_timezone<'de, R>(
18259 &mut self,
18260 reader: &R,
18261 mut values: Option<super::FacetType>,
18262 output: DeserializerOutput<'de, super::FacetType>,
18263 fallback: &mut Option<Self>,
18264 ) -> Result<ElementHandlerOutput<'de>, Error>
18265 where
18266 R: DeserializeReader,
18267 {
18268 let DeserializerOutput {
18269 artifact,
18270 event,
18271 allow_any,
18272 } = output;
18273 if artifact.is_none() {
18274 *self = match fallback.take() {
18275 None => Self::Init__,
18276 Some(Self::ExplicitTimezone(_, Some(deserializer))) => {
18277 Self::ExplicitTimezone(values, Some(deserializer))
18278 }
18279 _ => unreachable!(),
18280 };
18281 return Ok(ElementHandlerOutput::break_(event, allow_any));
18282 }
18283 match fallback.take() {
18284 None => (),
18285 Some(Self::ExplicitTimezone(_, Some(deserializer))) => {
18286 let data = deserializer.finish(reader)?;
18287 Self::store_explicit_timezone(&mut values, data)?;
18288 }
18289 Some(_) => unreachable!(),
18290 }
18291 Ok(match artifact {
18292 DeserializerArtifact::None => unreachable!(),
18293 DeserializerArtifact::Data(data) => {
18294 Self::store_explicit_timezone(&mut values, data)?;
18295 let data = Self::ExplicitTimezone(values, None).finish(reader)?;
18296 *self = Self::Done__(data);
18297 ElementHandlerOutput::Break { event, allow_any }
18298 }
18299 DeserializerArtifact::Deserializer(deserializer) => {
18300 *self = Self::ExplicitTimezone(values, Some(deserializer));
18301 ElementHandlerOutput::from_event_end(event, allow_any)
18302 }
18303 })
18304 }
18305 }
18306 impl<'de> Deserializer<'de, super::Facet> for FacetDeserializer {
18307 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Facet>
18308 where
18309 R: DeserializeReader,
18310 {
18311 let deserializer = Self::Init__;
18312 let mut output = deserializer.next(reader, event)?;
18313 output.artifact = match output.artifact {
18314 DeserializerArtifact::Deserializer(Self::Init__) => DeserializerArtifact::None,
18315 artifact => artifact,
18316 };
18317 Ok(output)
18318 }
18319 fn next<R>(mut self, reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Facet>
18320 where
18321 R: DeserializeReader,
18322 {
18323 let mut event = event;
18324 let mut fallback = None;
18325 let (event, allow_any) = loop {
18326 let state = replace(&mut self, Self::Unknown__);
18327 event = match (state, event) {
18328 (Self::MinExclusive(values, Some(deserializer)), event) => {
18329 let output = deserializer.next(reader, event)?;
18330 match self.handle_min_exclusive(reader, values, output, &mut fallback)? {
18331 ElementHandlerOutput::Break { event, allow_any } => {
18332 break (event, allow_any)
18333 }
18334 ElementHandlerOutput::Continue { event, .. } => event,
18335 }
18336 }
18337 (Self::MinInclusive(values, Some(deserializer)), event) => {
18338 let output = deserializer.next(reader, event)?;
18339 match self.handle_min_inclusive(reader, values, output, &mut fallback)? {
18340 ElementHandlerOutput::Break { event, allow_any } => {
18341 break (event, allow_any)
18342 }
18343 ElementHandlerOutput::Continue { event, .. } => event,
18344 }
18345 }
18346 (Self::MaxExclusive(values, Some(deserializer)), event) => {
18347 let output = deserializer.next(reader, event)?;
18348 match self.handle_max_exclusive(reader, values, output, &mut fallback)? {
18349 ElementHandlerOutput::Break { event, allow_any } => {
18350 break (event, allow_any)
18351 }
18352 ElementHandlerOutput::Continue { event, .. } => event,
18353 }
18354 }
18355 (Self::MaxInclusive(values, Some(deserializer)), event) => {
18356 let output = deserializer.next(reader, event)?;
18357 match self.handle_max_inclusive(reader, values, output, &mut fallback)? {
18358 ElementHandlerOutput::Break { event, allow_any } => {
18359 break (event, allow_any)
18360 }
18361 ElementHandlerOutput::Continue { event, .. } => event,
18362 }
18363 }
18364 (Self::TotalDigits(values, Some(deserializer)), event) => {
18365 let output = deserializer.next(reader, event)?;
18366 match self.handle_total_digits(reader, values, output, &mut fallback)? {
18367 ElementHandlerOutput::Break { event, allow_any } => {
18368 break (event, allow_any)
18369 }
18370 ElementHandlerOutput::Continue { event, .. } => event,
18371 }
18372 }
18373 (Self::FractionDigits(values, Some(deserializer)), event) => {
18374 let output = deserializer.next(reader, event)?;
18375 match self.handle_fraction_digits(reader, values, output, &mut fallback)? {
18376 ElementHandlerOutput::Break { event, allow_any } => {
18377 break (event, allow_any)
18378 }
18379 ElementHandlerOutput::Continue { event, .. } => event,
18380 }
18381 }
18382 (Self::Length(values, Some(deserializer)), event) => {
18383 let output = deserializer.next(reader, event)?;
18384 match self.handle_length(reader, values, output, &mut fallback)? {
18385 ElementHandlerOutput::Break { event, allow_any } => {
18386 break (event, allow_any)
18387 }
18388 ElementHandlerOutput::Continue { event, .. } => event,
18389 }
18390 }
18391 (Self::MinLength(values, Some(deserializer)), event) => {
18392 let output = deserializer.next(reader, event)?;
18393 match self.handle_min_length(reader, values, output, &mut fallback)? {
18394 ElementHandlerOutput::Break { event, allow_any } => {
18395 break (event, allow_any)
18396 }
18397 ElementHandlerOutput::Continue { event, .. } => event,
18398 }
18399 }
18400 (Self::MaxLength(values, Some(deserializer)), event) => {
18401 let output = deserializer.next(reader, event)?;
18402 match self.handle_max_length(reader, values, output, &mut fallback)? {
18403 ElementHandlerOutput::Break { event, allow_any } => {
18404 break (event, allow_any)
18405 }
18406 ElementHandlerOutput::Continue { event, .. } => event,
18407 }
18408 }
18409 (Self::Enumeration(values, Some(deserializer)), event) => {
18410 let output = deserializer.next(reader, event)?;
18411 match self.handle_enumeration(reader, values, output, &mut fallback)? {
18412 ElementHandlerOutput::Break { event, allow_any } => {
18413 break (event, allow_any)
18414 }
18415 ElementHandlerOutput::Continue { event, .. } => event,
18416 }
18417 }
18418 (Self::WhiteSpace(values, Some(deserializer)), event) => {
18419 let output = deserializer.next(reader, event)?;
18420 match self.handle_white_space(reader, values, output, &mut fallback)? {
18421 ElementHandlerOutput::Break { event, allow_any } => {
18422 break (event, allow_any)
18423 }
18424 ElementHandlerOutput::Continue { event, .. } => event,
18425 }
18426 }
18427 (Self::Pattern(values, Some(deserializer)), event) => {
18428 let output = deserializer.next(reader, event)?;
18429 match self.handle_pattern(reader, values, output, &mut fallback)? {
18430 ElementHandlerOutput::Break { event, allow_any } => {
18431 break (event, allow_any)
18432 }
18433 ElementHandlerOutput::Continue { event, .. } => event,
18434 }
18435 }
18436 (Self::Assertion(values, Some(deserializer)), event) => {
18437 let output = deserializer.next(reader, event)?;
18438 match self.handle_assertion(reader, values, output, &mut fallback)? {
18439 ElementHandlerOutput::Break { event, allow_any } => {
18440 break (event, allow_any)
18441 }
18442 ElementHandlerOutput::Continue { event, .. } => event,
18443 }
18444 }
18445 (Self::ExplicitTimezone(values, Some(deserializer)), event) => {
18446 let output = deserializer.next(reader, event)?;
18447 match self.handle_explicit_timezone(
18448 reader,
18449 values,
18450 output,
18451 &mut fallback,
18452 )? {
18453 ElementHandlerOutput::Break { event, allow_any } => {
18454 break (event, allow_any)
18455 }
18456 ElementHandlerOutput::Continue { event, .. } => event,
18457 }
18458 }
18459 (state, event @ Event::End(_)) => {
18460 return Ok(DeserializerOutput {
18461 artifact: DeserializerArtifact::Data(state.finish(reader)?),
18462 event: DeserializerEvent::Continue(event),
18463 allow_any: false,
18464 });
18465 }
18466 (Self::Init__, event) => {
18467 match self.find_suitable(reader, event, &mut fallback)? {
18468 ElementHandlerOutput::Break { event, allow_any } => {
18469 break (event, allow_any)
18470 }
18471 ElementHandlerOutput::Continue { event, .. } => event,
18472 }
18473 }
18474 (Self::MinExclusive(values, None), event) => {
18475 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
18476 reader, event,
18477 )?;
18478 match self.handle_min_exclusive(reader, values, output, &mut fallback)? {
18479 ElementHandlerOutput::Break { event, allow_any } => {
18480 break (event, allow_any)
18481 }
18482 ElementHandlerOutput::Continue { event, .. } => event,
18483 }
18484 }
18485 (Self::MinInclusive(values, None), event) => {
18486 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
18487 reader, event,
18488 )?;
18489 match self.handle_min_inclusive(reader, values, output, &mut fallback)? {
18490 ElementHandlerOutput::Break { event, allow_any } => {
18491 break (event, allow_any)
18492 }
18493 ElementHandlerOutput::Continue { event, .. } => event,
18494 }
18495 }
18496 (Self::MaxExclusive(values, None), event) => {
18497 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
18498 reader, event,
18499 )?;
18500 match self.handle_max_exclusive(reader, values, output, &mut fallback)? {
18501 ElementHandlerOutput::Break { event, allow_any } => {
18502 break (event, allow_any)
18503 }
18504 ElementHandlerOutput::Continue { event, .. } => event,
18505 }
18506 }
18507 (Self::MaxInclusive(values, None), event) => {
18508 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
18509 reader, event,
18510 )?;
18511 match self.handle_max_inclusive(reader, values, output, &mut fallback)? {
18512 ElementHandlerOutput::Break { event, allow_any } => {
18513 break (event, allow_any)
18514 }
18515 ElementHandlerOutput::Continue { event, .. } => event,
18516 }
18517 }
18518 (Self::TotalDigits(values, None), event) => {
18519 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
18520 reader, event,
18521 )?;
18522 match self.handle_total_digits(reader, values, output, &mut fallback)? {
18523 ElementHandlerOutput::Break { event, allow_any } => {
18524 break (event, allow_any)
18525 }
18526 ElementHandlerOutput::Continue { event, .. } => event,
18527 }
18528 }
18529 (Self::FractionDigits(values, None), event) => {
18530 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
18531 reader, event,
18532 )?;
18533 match self.handle_fraction_digits(reader, values, output, &mut fallback)? {
18534 ElementHandlerOutput::Break { event, allow_any } => {
18535 break (event, allow_any)
18536 }
18537 ElementHandlerOutput::Continue { event, .. } => event,
18538 }
18539 }
18540 (Self::Length(values, None), event) => {
18541 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
18542 reader, event,
18543 )?;
18544 match self.handle_length(reader, values, output, &mut fallback)? {
18545 ElementHandlerOutput::Break { event, allow_any } => {
18546 break (event, allow_any)
18547 }
18548 ElementHandlerOutput::Continue { event, .. } => event,
18549 }
18550 }
18551 (Self::MinLength(values, None), event) => {
18552 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
18553 reader, event,
18554 )?;
18555 match self.handle_min_length(reader, values, output, &mut fallback)? {
18556 ElementHandlerOutput::Break { event, allow_any } => {
18557 break (event, allow_any)
18558 }
18559 ElementHandlerOutput::Continue { event, .. } => event,
18560 }
18561 }
18562 (Self::MaxLength(values, None), event) => {
18563 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
18564 reader, event,
18565 )?;
18566 match self.handle_max_length(reader, values, output, &mut fallback)? {
18567 ElementHandlerOutput::Break { event, allow_any } => {
18568 break (event, allow_any)
18569 }
18570 ElementHandlerOutput::Continue { event, .. } => event,
18571 }
18572 }
18573 (Self::Enumeration(values, None), event) => {
18574 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
18575 reader, event,
18576 )?;
18577 match self.handle_enumeration(reader, values, output, &mut fallback)? {
18578 ElementHandlerOutput::Break { event, allow_any } => {
18579 break (event, allow_any)
18580 }
18581 ElementHandlerOutput::Continue { event, .. } => event,
18582 }
18583 }
18584 (Self::WhiteSpace(values, None), event) => {
18585 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
18586 reader, event,
18587 )?;
18588 match self.handle_white_space(reader, values, output, &mut fallback)? {
18589 ElementHandlerOutput::Break { event, allow_any } => {
18590 break (event, allow_any)
18591 }
18592 ElementHandlerOutput::Continue { event, .. } => event,
18593 }
18594 }
18595 (Self::Pattern(values, None), event) => {
18596 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
18597 reader, event,
18598 )?;
18599 match self.handle_pattern(reader, values, output, &mut fallback)? {
18600 ElementHandlerOutput::Break { event, allow_any } => {
18601 break (event, allow_any)
18602 }
18603 ElementHandlerOutput::Continue { event, .. } => event,
18604 }
18605 }
18606 (Self::Assertion(values, None), event) => {
18607 let output =
18608 <super::AssertionType as WithDeserializer>::Deserializer::init(
18609 reader, event,
18610 )?;
18611 match self.handle_assertion(reader, values, output, &mut fallback)? {
18612 ElementHandlerOutput::Break { event, allow_any } => {
18613 break (event, allow_any)
18614 }
18615 ElementHandlerOutput::Continue { event, .. } => event,
18616 }
18617 }
18618 (Self::ExplicitTimezone(values, None), event) => {
18619 let output = <super::FacetType as WithDeserializer>::Deserializer::init(
18620 reader, event,
18621 )?;
18622 match self.handle_explicit_timezone(
18623 reader,
18624 values,
18625 output,
18626 &mut fallback,
18627 )? {
18628 ElementHandlerOutput::Break { event, allow_any } => {
18629 break (event, allow_any)
18630 }
18631 ElementHandlerOutput::Continue { event, .. } => event,
18632 }
18633 }
18634 (s @ Self::Done__(_), event) => {
18635 self = s;
18636 break (DeserializerEvent::Continue(event), false);
18637 }
18638 (Self::Unknown__, _) => unreachable!(),
18639 }
18640 };
18641 let artifact = match self {
18642 Self::Done__(data) => DeserializerArtifact::Data(data),
18643 deserializer => DeserializerArtifact::Deserializer(deserializer),
18644 };
18645 Ok(DeserializerOutput {
18646 artifact,
18647 event,
18648 allow_any,
18649 })
18650 }
18651 fn finish<R>(self, reader: &R) -> Result<super::Facet, Error>
18652 where
18653 R: DeserializeReader,
18654 {
18655 match self {
18656 Self::Init__ => Err(ErrorKind::MissingContent.into()),
18657 Self::MinExclusive(mut values, deserializer) => {
18658 if let Some(deserializer) = deserializer {
18659 let value = deserializer.finish(reader)?;
18660 Self::store_min_exclusive(&mut values, value)?;
18661 }
18662 Ok(super::Facet::MinExclusive(values.ok_or_else(|| {
18663 ErrorKind::MissingElement("minExclusive".into())
18664 })?))
18665 }
18666 Self::MinInclusive(mut values, deserializer) => {
18667 if let Some(deserializer) = deserializer {
18668 let value = deserializer.finish(reader)?;
18669 Self::store_min_inclusive(&mut values, value)?;
18670 }
18671 Ok(super::Facet::MinInclusive(values.ok_or_else(|| {
18672 ErrorKind::MissingElement("minInclusive".into())
18673 })?))
18674 }
18675 Self::MaxExclusive(mut values, deserializer) => {
18676 if let Some(deserializer) = deserializer {
18677 let value = deserializer.finish(reader)?;
18678 Self::store_max_exclusive(&mut values, value)?;
18679 }
18680 Ok(super::Facet::MaxExclusive(values.ok_or_else(|| {
18681 ErrorKind::MissingElement("maxExclusive".into())
18682 })?))
18683 }
18684 Self::MaxInclusive(mut values, deserializer) => {
18685 if let Some(deserializer) = deserializer {
18686 let value = deserializer.finish(reader)?;
18687 Self::store_max_inclusive(&mut values, value)?;
18688 }
18689 Ok(super::Facet::MaxInclusive(values.ok_or_else(|| {
18690 ErrorKind::MissingElement("maxInclusive".into())
18691 })?))
18692 }
18693 Self::TotalDigits(mut values, deserializer) => {
18694 if let Some(deserializer) = deserializer {
18695 let value = deserializer.finish(reader)?;
18696 Self::store_total_digits(&mut values, value)?;
18697 }
18698 Ok(super::Facet::TotalDigits(values.ok_or_else(|| {
18699 ErrorKind::MissingElement("totalDigits".into())
18700 })?))
18701 }
18702 Self::FractionDigits(mut values, deserializer) => {
18703 if let Some(deserializer) = deserializer {
18704 let value = deserializer.finish(reader)?;
18705 Self::store_fraction_digits(&mut values, value)?;
18706 }
18707 Ok(super::Facet::FractionDigits(values.ok_or_else(|| {
18708 ErrorKind::MissingElement("fractionDigits".into())
18709 })?))
18710 }
18711 Self::Length(mut values, deserializer) => {
18712 if let Some(deserializer) = deserializer {
18713 let value = deserializer.finish(reader)?;
18714 Self::store_length(&mut values, value)?;
18715 }
18716 Ok(super::Facet::Length(values.ok_or_else(|| {
18717 ErrorKind::MissingElement("length".into())
18718 })?))
18719 }
18720 Self::MinLength(mut values, deserializer) => {
18721 if let Some(deserializer) = deserializer {
18722 let value = deserializer.finish(reader)?;
18723 Self::store_min_length(&mut values, value)?;
18724 }
18725 Ok(super::Facet::MinLength(values.ok_or_else(|| {
18726 ErrorKind::MissingElement("minLength".into())
18727 })?))
18728 }
18729 Self::MaxLength(mut values, deserializer) => {
18730 if let Some(deserializer) = deserializer {
18731 let value = deserializer.finish(reader)?;
18732 Self::store_max_length(&mut values, value)?;
18733 }
18734 Ok(super::Facet::MaxLength(values.ok_or_else(|| {
18735 ErrorKind::MissingElement("maxLength".into())
18736 })?))
18737 }
18738 Self::Enumeration(mut values, deserializer) => {
18739 if let Some(deserializer) = deserializer {
18740 let value = deserializer.finish(reader)?;
18741 Self::store_enumeration(&mut values, value)?;
18742 }
18743 Ok(super::Facet::Enumeration(values.ok_or_else(|| {
18744 ErrorKind::MissingElement("enumeration".into())
18745 })?))
18746 }
18747 Self::WhiteSpace(mut values, deserializer) => {
18748 if let Some(deserializer) = deserializer {
18749 let value = deserializer.finish(reader)?;
18750 Self::store_white_space(&mut values, value)?;
18751 }
18752 Ok(super::Facet::WhiteSpace(values.ok_or_else(|| {
18753 ErrorKind::MissingElement("whiteSpace".into())
18754 })?))
18755 }
18756 Self::Pattern(mut values, deserializer) => {
18757 if let Some(deserializer) = deserializer {
18758 let value = deserializer.finish(reader)?;
18759 Self::store_pattern(&mut values, value)?;
18760 }
18761 Ok(super::Facet::Pattern(values.ok_or_else(|| {
18762 ErrorKind::MissingElement("pattern".into())
18763 })?))
18764 }
18765 Self::Assertion(mut values, deserializer) => {
18766 if let Some(deserializer) = deserializer {
18767 let value = deserializer.finish(reader)?;
18768 Self::store_assertion(&mut values, value)?;
18769 }
18770 Ok(super::Facet::Assertion(values.ok_or_else(|| {
18771 ErrorKind::MissingElement("assertion".into())
18772 })?))
18773 }
18774 Self::ExplicitTimezone(mut values, deserializer) => {
18775 if let Some(deserializer) = deserializer {
18776 let value = deserializer.finish(reader)?;
18777 Self::store_explicit_timezone(&mut values, value)?;
18778 }
18779 Ok(super::Facet::ExplicitTimezone(values.ok_or_else(|| {
18780 ErrorKind::MissingElement("explicitTimezone".into())
18781 })?))
18782 }
18783 Self::Done__(data) => Ok(data),
18784 Self::Unknown__ => unreachable!(),
18785 }
18786 }
18787 }
18788 #[derive(Debug)]
18789 pub struct RestrictionTypeDeserializer {
18790 id: Option<String>,
18791 base: super::QName,
18792 content: Vec<super::RestrictionTypeContent>,
18793 state: Box<RestrictionTypeDeserializerState>,
18794 }
18795 #[derive(Debug)]
18796 enum RestrictionTypeDeserializerState {
18797 Init__,
18798 Next__,
18799 Content__(<super::RestrictionTypeContent as WithDeserializer>::Deserializer),
18800 Unknown__,
18801 }
18802 impl RestrictionTypeDeserializer {
18803 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
18804 where
18805 R: DeserializeReader,
18806 {
18807 let mut id: Option<String> = None;
18808 let mut base: Option<super::QName> = None;
18809 for attrib in filter_xmlns_attributes(bytes_start) {
18810 let attrib = attrib?;
18811 if matches!(
18812 reader.resolve_local_name(attrib.key, &super::NS_XS),
18813 Some(b"id")
18814 ) {
18815 reader.read_attrib(&mut id, b"id", &attrib.value)?;
18816 } else if matches!(
18817 reader.resolve_local_name(attrib.key, &super::NS_XS),
18818 Some(b"base")
18819 ) {
18820 reader.read_attrib(&mut base, b"base", &attrib.value)?;
18821 }
18822 }
18823 Ok(Self {
18824 id: id,
18825 base: base
18826 .ok_or_else(|| reader.map_error(ErrorKind::MissingAttribute("base".into())))?,
18827 content: Vec::new(),
18828 state: Box::new(RestrictionTypeDeserializerState::Init__),
18829 })
18830 }
18831 fn finish_state<R>(
18832 &mut self,
18833 reader: &R,
18834 state: RestrictionTypeDeserializerState,
18835 ) -> Result<(), Error>
18836 where
18837 R: DeserializeReader,
18838 {
18839 if let RestrictionTypeDeserializerState::Content__(deserializer) = state {
18840 self.store_content(deserializer.finish(reader)?)?;
18841 }
18842 Ok(())
18843 }
18844 fn store_content(&mut self, value: super::RestrictionTypeContent) -> Result<(), Error> {
18845 self.content.push(value);
18846 Ok(())
18847 }
18848 fn handle_content<'de, R>(
18849 &mut self,
18850 reader: &R,
18851 output: DeserializerOutput<'de, super::RestrictionTypeContent>,
18852 fallback: &mut Option<RestrictionTypeDeserializerState>,
18853 ) -> Result<ElementHandlerOutput<'de>, Error>
18854 where
18855 R: DeserializeReader,
18856 {
18857 let DeserializerOutput {
18858 artifact,
18859 event,
18860 allow_any,
18861 } = output;
18862 if artifact.is_none() {
18863 *self.state = fallback
18864 .take()
18865 .unwrap_or(RestrictionTypeDeserializerState::Next__);
18866 return Ok(ElementHandlerOutput::break_(event, allow_any));
18867 }
18868 if let Some(fallback) = fallback.take() {
18869 self.finish_state(reader, fallback)?;
18870 }
18871 Ok(match artifact {
18872 DeserializerArtifact::None => unreachable!(),
18873 DeserializerArtifact::Data(data) => {
18874 self.store_content(data)?;
18875 *self.state = RestrictionTypeDeserializerState::Next__;
18876 ElementHandlerOutput::from_event(event, allow_any)
18877 }
18878 DeserializerArtifact::Deserializer(deserializer) => {
18879 let ret = ElementHandlerOutput::from_event(event, allow_any);
18880 match &ret {
18881 ElementHandlerOutput::Continue { .. } => {
18882 fallback.get_or_insert(RestrictionTypeDeserializerState::Content__(
18883 deserializer,
18884 ));
18885 *self.state = RestrictionTypeDeserializerState::Next__;
18886 }
18887 ElementHandlerOutput::Break { .. } => {
18888 *self.state = RestrictionTypeDeserializerState::Content__(deserializer);
18889 }
18890 }
18891 ret
18892 }
18893 })
18894 }
18895 }
18896 impl<'de> Deserializer<'de, super::RestrictionType> for RestrictionTypeDeserializer {
18897 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::RestrictionType>
18898 where
18899 R: DeserializeReader,
18900 {
18901 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
18902 }
18903 fn next<R>(
18904 mut self,
18905 reader: &R,
18906 event: Event<'de>,
18907 ) -> DeserializerResult<'de, super::RestrictionType>
18908 where
18909 R: DeserializeReader,
18910 {
18911 use RestrictionTypeDeserializerState as S;
18912 let mut event = event;
18913 let mut fallback = None;
18914 let (event, allow_any) = loop {
18915 let state = replace(&mut *self.state, S::Unknown__);
18916 event = match (state, event) {
18917 (S::Content__(deserializer), event) => {
18918 let output = deserializer.next(reader, event)?;
18919 match self.handle_content(reader, output, &mut fallback)? {
18920 ElementHandlerOutput::Break { event, allow_any } => {
18921 break (event, allow_any)
18922 }
18923 ElementHandlerOutput::Continue { event, .. } => event,
18924 }
18925 }
18926 (_, Event::End(_)) => {
18927 return Ok(DeserializerOutput {
18928 artifact: DeserializerArtifact::Data(self.finish(reader)?),
18929 event: DeserializerEvent::None,
18930 allow_any: false,
18931 });
18932 }
18933 (old_state @ (S::Init__ | S::Next__), event) => {
18934 let output = < super :: RestrictionTypeContent as WithDeserializer > :: Deserializer :: init (reader , event) ? ;
18935 match self.handle_content(reader, output, &mut fallback)? {
18936 ElementHandlerOutput::Break { event, allow_any } => {
18937 if matches!(&*self.state, S::Unknown__) {
18938 *self.state = old_state;
18939 }
18940 break (event, allow_any);
18941 }
18942 ElementHandlerOutput::Continue { event, .. } => event,
18943 }
18944 }
18945 (S::Unknown__, _) => unreachable!(),
18946 }
18947 };
18948 Ok(DeserializerOutput {
18949 artifact: DeserializerArtifact::Deserializer(self),
18950 event,
18951 allow_any,
18952 })
18953 }
18954 fn finish<R>(mut self, reader: &R) -> Result<super::RestrictionType, Error>
18955 where
18956 R: DeserializeReader,
18957 {
18958 let state = replace(
18959 &mut *self.state,
18960 RestrictionTypeDeserializerState::Unknown__,
18961 );
18962 self.finish_state(reader, state)?;
18963 Ok(super::RestrictionType {
18964 id: self.id,
18965 base: self.base,
18966 content: self.content,
18967 })
18968 }
18969 }
18970 #[derive(Debug)]
18971 pub enum RestrictionTypeContentDeserializer {
18972 Init__,
18973 Annotation(
18974 Option<super::Annotation>,
18975 Option<<super::Annotation as WithDeserializer>::Deserializer>,
18976 ),
18977 OpenContent(
18978 Option<super::OpenContent>,
18979 Option<<super::OpenContent as WithDeserializer>::Deserializer>,
18980 ),
18981 Group(
18982 Option<super::GroupType>,
18983 Option<<super::GroupType as WithDeserializer>::Deserializer>,
18984 ),
18985 All(
18986 Option<super::GroupType>,
18987 Option<<super::GroupType as WithDeserializer>::Deserializer>,
18988 ),
18989 Choice(
18990 Option<super::GroupType>,
18991 Option<<super::GroupType as WithDeserializer>::Deserializer>,
18992 ),
18993 Sequence(
18994 Option<super::GroupType>,
18995 Option<<super::GroupType as WithDeserializer>::Deserializer>,
18996 ),
18997 SimpleType(
18998 Option<super::SimpleBaseType>,
18999 Option<<super::SimpleBaseType as WithDeserializer>::Deserializer>,
19000 ),
19001 Facet(
19002 Option<super::Facet>,
19003 Option<<super::Facet as WithDeserializer>::Deserializer>,
19004 ),
19005 Attribute(
19006 Option<super::AttributeType>,
19007 Option<<super::AttributeType as WithDeserializer>::Deserializer>,
19008 ),
19009 AttributeGroup(
19010 Option<super::AttributeGroupType>,
19011 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
19012 ),
19013 AnyAttribute(
19014 Option<super::AnyAttribute>,
19015 Option<<super::AnyAttribute as WithDeserializer>::Deserializer>,
19016 ),
19017 Assert(
19018 Option<super::AssertionType>,
19019 Option<<super::AssertionType as WithDeserializer>::Deserializer>,
19020 ),
19021 Done__(super::RestrictionTypeContent),
19022 Unknown__,
19023 }
19024 impl RestrictionTypeContentDeserializer {
19025 fn find_suitable<'de, R>(
19026 &mut self,
19027 reader: &R,
19028 event: Event<'de>,
19029 fallback: &mut Option<RestrictionTypeContentDeserializer>,
19030 ) -> Result<ElementHandlerOutput<'de>, Error>
19031 where
19032 R: DeserializeReader,
19033 {
19034 let (Event::Start(x) | Event::Empty(x)) = &event else {
19035 *self = Self::Init__;
19036 return Ok(ElementHandlerOutput::return_to_parent(event, true));
19037 };
19038 if matches!(
19039 reader.resolve_local_name(x.name(), &super::NS_XS),
19040 Some(b"annotation")
19041 ) {
19042 let output =
19043 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
19044 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
19045 }
19046 if matches!(
19047 reader.resolve_local_name(x.name(), &super::NS_XS),
19048 Some(b"openContent")
19049 ) {
19050 let output =
19051 <super::OpenContent as WithDeserializer>::Deserializer::init(reader, event)?;
19052 return self.handle_open_content(
19053 reader,
19054 Default::default(),
19055 output,
19056 &mut *fallback,
19057 );
19058 }
19059 if matches!(
19060 reader.resolve_local_name(x.name(), &super::NS_XS),
19061 Some(b"group")
19062 ) {
19063 let output =
19064 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
19065 return self.handle_group(reader, Default::default(), output, &mut *fallback);
19066 }
19067 if matches!(
19068 reader.resolve_local_name(x.name(), &super::NS_XS),
19069 Some(b"all")
19070 ) {
19071 let output =
19072 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
19073 return self.handle_all(reader, Default::default(), output, &mut *fallback);
19074 }
19075 if matches!(
19076 reader.resolve_local_name(x.name(), &super::NS_XS),
19077 Some(b"choice")
19078 ) {
19079 let output =
19080 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
19081 return self.handle_choice(reader, Default::default(), output, &mut *fallback);
19082 }
19083 if matches!(
19084 reader.resolve_local_name(x.name(), &super::NS_XS),
19085 Some(b"sequence")
19086 ) {
19087 let output =
19088 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
19089 return self.handle_sequence(reader, Default::default(), output, &mut *fallback);
19090 }
19091 if matches!(
19092 reader.resolve_local_name(x.name(), &super::NS_XS),
19093 Some(b"simpleType")
19094 ) {
19095 let output =
19096 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(reader, event)?;
19097 return self.handle_simple_type(reader, Default::default(), output, &mut *fallback);
19098 }
19099 if matches!(
19100 reader.resolve_local_name(x.name(), &super::NS_XS),
19101 Some(b"attribute")
19102 ) {
19103 let output =
19104 <super::AttributeType as WithDeserializer>::Deserializer::init(reader, event)?;
19105 return self.handle_attribute(reader, Default::default(), output, &mut *fallback);
19106 }
19107 if matches!(
19108 reader.resolve_local_name(x.name(), &super::NS_XS),
19109 Some(b"attributeGroup")
19110 ) {
19111 let output = <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
19112 reader, event,
19113 )?;
19114 return self.handle_attribute_group(
19115 reader,
19116 Default::default(),
19117 output,
19118 &mut *fallback,
19119 );
19120 }
19121 if matches!(
19122 reader.resolve_local_name(x.name(), &super::NS_XS),
19123 Some(b"anyAttribute")
19124 ) {
19125 let output =
19126 <super::AnyAttribute as WithDeserializer>::Deserializer::init(reader, event)?;
19127 return self.handle_any_attribute(
19128 reader,
19129 Default::default(),
19130 output,
19131 &mut *fallback,
19132 );
19133 }
19134 if matches!(
19135 reader.resolve_local_name(x.name(), &super::NS_XS),
19136 Some(b"assert")
19137 ) {
19138 let output =
19139 <super::AssertionType as WithDeserializer>::Deserializer::init(reader, event)?;
19140 return self.handle_assert(reader, Default::default(), output, &mut *fallback);
19141 }
19142 let event = {
19143 let output = <super::Facet as WithDeserializer>::Deserializer::init(reader, event)?;
19144 match self.handle_facet(reader, Default::default(), output, &mut *fallback)? {
19145 ElementHandlerOutput::Continue { event, .. } => event,
19146 output => {
19147 return Ok(output);
19148 }
19149 }
19150 };
19151 *self = Self::Init__;
19152 Ok(ElementHandlerOutput::return_to_parent(event, true))
19153 }
19154 fn store_annotation(
19155 values: &mut Option<super::Annotation>,
19156 value: super::Annotation,
19157 ) -> Result<(), Error> {
19158 if values.is_some() {
19159 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
19160 b"annotation",
19161 )))?;
19162 }
19163 *values = Some(value);
19164 Ok(())
19165 }
19166 fn store_open_content(
19167 values: &mut Option<super::OpenContent>,
19168 value: super::OpenContent,
19169 ) -> Result<(), Error> {
19170 if values.is_some() {
19171 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
19172 b"openContent",
19173 )))?;
19174 }
19175 *values = Some(value);
19176 Ok(())
19177 }
19178 fn store_group(
19179 values: &mut Option<super::GroupType>,
19180 value: super::GroupType,
19181 ) -> Result<(), Error> {
19182 if values.is_some() {
19183 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
19184 b"group",
19185 )))?;
19186 }
19187 *values = Some(value);
19188 Ok(())
19189 }
19190 fn store_all(
19191 values: &mut Option<super::GroupType>,
19192 value: super::GroupType,
19193 ) -> Result<(), Error> {
19194 if values.is_some() {
19195 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"all")))?;
19196 }
19197 *values = Some(value);
19198 Ok(())
19199 }
19200 fn store_choice(
19201 values: &mut Option<super::GroupType>,
19202 value: super::GroupType,
19203 ) -> Result<(), Error> {
19204 if values.is_some() {
19205 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
19206 b"choice",
19207 )))?;
19208 }
19209 *values = Some(value);
19210 Ok(())
19211 }
19212 fn store_sequence(
19213 values: &mut Option<super::GroupType>,
19214 value: super::GroupType,
19215 ) -> Result<(), Error> {
19216 if values.is_some() {
19217 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
19218 b"sequence",
19219 )))?;
19220 }
19221 *values = Some(value);
19222 Ok(())
19223 }
19224 fn store_simple_type(
19225 values: &mut Option<super::SimpleBaseType>,
19226 value: super::SimpleBaseType,
19227 ) -> Result<(), Error> {
19228 if values.is_some() {
19229 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
19230 b"simpleType",
19231 )))?;
19232 }
19233 *values = Some(value);
19234 Ok(())
19235 }
19236 fn store_facet(
19237 values: &mut Option<super::Facet>,
19238 value: super::Facet,
19239 ) -> Result<(), Error> {
19240 if values.is_some() {
19241 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
19242 b"facet",
19243 )))?;
19244 }
19245 *values = Some(value);
19246 Ok(())
19247 }
19248 fn store_attribute(
19249 values: &mut Option<super::AttributeType>,
19250 value: super::AttributeType,
19251 ) -> Result<(), Error> {
19252 if values.is_some() {
19253 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
19254 b"attribute",
19255 )))?;
19256 }
19257 *values = Some(value);
19258 Ok(())
19259 }
19260 fn store_attribute_group(
19261 values: &mut Option<super::AttributeGroupType>,
19262 value: super::AttributeGroupType,
19263 ) -> Result<(), Error> {
19264 if values.is_some() {
19265 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
19266 b"attributeGroup",
19267 )))?;
19268 }
19269 *values = Some(value);
19270 Ok(())
19271 }
19272 fn store_any_attribute(
19273 values: &mut Option<super::AnyAttribute>,
19274 value: super::AnyAttribute,
19275 ) -> Result<(), Error> {
19276 if values.is_some() {
19277 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
19278 b"anyAttribute",
19279 )))?;
19280 }
19281 *values = Some(value);
19282 Ok(())
19283 }
19284 fn store_assert(
19285 values: &mut Option<super::AssertionType>,
19286 value: super::AssertionType,
19287 ) -> Result<(), Error> {
19288 if values.is_some() {
19289 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
19290 b"assert",
19291 )))?;
19292 }
19293 *values = Some(value);
19294 Ok(())
19295 }
19296 fn handle_annotation<'de, R>(
19297 &mut self,
19298 reader: &R,
19299 mut values: Option<super::Annotation>,
19300 output: DeserializerOutput<'de, super::Annotation>,
19301 fallback: &mut Option<Self>,
19302 ) -> Result<ElementHandlerOutput<'de>, Error>
19303 where
19304 R: DeserializeReader,
19305 {
19306 let DeserializerOutput {
19307 artifact,
19308 event,
19309 allow_any,
19310 } = output;
19311 if artifact.is_none() {
19312 *self = match fallback.take() {
19313 None => Self::Init__,
19314 Some(Self::Annotation(_, Some(deserializer))) => {
19315 Self::Annotation(values, Some(deserializer))
19316 }
19317 _ => unreachable!(),
19318 };
19319 return Ok(ElementHandlerOutput::break_(event, allow_any));
19320 }
19321 match fallback.take() {
19322 None => (),
19323 Some(Self::Annotation(_, Some(deserializer))) => {
19324 let data = deserializer.finish(reader)?;
19325 Self::store_annotation(&mut values, data)?;
19326 }
19327 Some(_) => unreachable!(),
19328 }
19329 Ok(match artifact {
19330 DeserializerArtifact::None => unreachable!(),
19331 DeserializerArtifact::Data(data) => {
19332 Self::store_annotation(&mut values, data)?;
19333 let data = Self::Annotation(values, None).finish(reader)?;
19334 *self = Self::Done__(data);
19335 ElementHandlerOutput::Break { event, allow_any }
19336 }
19337 DeserializerArtifact::Deserializer(deserializer) => {
19338 *self = Self::Annotation(values, Some(deserializer));
19339 ElementHandlerOutput::from_event_end(event, allow_any)
19340 }
19341 })
19342 }
19343 fn handle_open_content<'de, R>(
19344 &mut self,
19345 reader: &R,
19346 mut values: Option<super::OpenContent>,
19347 output: DeserializerOutput<'de, super::OpenContent>,
19348 fallback: &mut Option<Self>,
19349 ) -> Result<ElementHandlerOutput<'de>, Error>
19350 where
19351 R: DeserializeReader,
19352 {
19353 let DeserializerOutput {
19354 artifact,
19355 event,
19356 allow_any,
19357 } = output;
19358 if artifact.is_none() {
19359 *self = match fallback.take() {
19360 None => Self::Init__,
19361 Some(Self::OpenContent(_, Some(deserializer))) => {
19362 Self::OpenContent(values, Some(deserializer))
19363 }
19364 _ => unreachable!(),
19365 };
19366 return Ok(ElementHandlerOutput::break_(event, allow_any));
19367 }
19368 match fallback.take() {
19369 None => (),
19370 Some(Self::OpenContent(_, Some(deserializer))) => {
19371 let data = deserializer.finish(reader)?;
19372 Self::store_open_content(&mut values, data)?;
19373 }
19374 Some(_) => unreachable!(),
19375 }
19376 Ok(match artifact {
19377 DeserializerArtifact::None => unreachable!(),
19378 DeserializerArtifact::Data(data) => {
19379 Self::store_open_content(&mut values, data)?;
19380 let data = Self::OpenContent(values, None).finish(reader)?;
19381 *self = Self::Done__(data);
19382 ElementHandlerOutput::Break { event, allow_any }
19383 }
19384 DeserializerArtifact::Deserializer(deserializer) => {
19385 *self = Self::OpenContent(values, Some(deserializer));
19386 ElementHandlerOutput::from_event_end(event, allow_any)
19387 }
19388 })
19389 }
19390 fn handle_group<'de, R>(
19391 &mut self,
19392 reader: &R,
19393 mut values: Option<super::GroupType>,
19394 output: DeserializerOutput<'de, super::GroupType>,
19395 fallback: &mut Option<Self>,
19396 ) -> Result<ElementHandlerOutput<'de>, Error>
19397 where
19398 R: DeserializeReader,
19399 {
19400 let DeserializerOutput {
19401 artifact,
19402 event,
19403 allow_any,
19404 } = output;
19405 if artifact.is_none() {
19406 *self = match fallback.take() {
19407 None => Self::Init__,
19408 Some(Self::Group(_, Some(deserializer))) => {
19409 Self::Group(values, Some(deserializer))
19410 }
19411 _ => unreachable!(),
19412 };
19413 return Ok(ElementHandlerOutput::break_(event, allow_any));
19414 }
19415 match fallback.take() {
19416 None => (),
19417 Some(Self::Group(_, Some(deserializer))) => {
19418 let data = deserializer.finish(reader)?;
19419 Self::store_group(&mut values, data)?;
19420 }
19421 Some(_) => unreachable!(),
19422 }
19423 Ok(match artifact {
19424 DeserializerArtifact::None => unreachable!(),
19425 DeserializerArtifact::Data(data) => {
19426 Self::store_group(&mut values, data)?;
19427 let data = Self::Group(values, None).finish(reader)?;
19428 *self = Self::Done__(data);
19429 ElementHandlerOutput::Break { event, allow_any }
19430 }
19431 DeserializerArtifact::Deserializer(deserializer) => {
19432 *self = Self::Group(values, Some(deserializer));
19433 ElementHandlerOutput::from_event_end(event, allow_any)
19434 }
19435 })
19436 }
19437 fn handle_all<'de, R>(
19438 &mut self,
19439 reader: &R,
19440 mut values: Option<super::GroupType>,
19441 output: DeserializerOutput<'de, super::GroupType>,
19442 fallback: &mut Option<Self>,
19443 ) -> Result<ElementHandlerOutput<'de>, Error>
19444 where
19445 R: DeserializeReader,
19446 {
19447 let DeserializerOutput {
19448 artifact,
19449 event,
19450 allow_any,
19451 } = output;
19452 if artifact.is_none() {
19453 *self = match fallback.take() {
19454 None => Self::Init__,
19455 Some(Self::All(_, Some(deserializer))) => Self::All(values, Some(deserializer)),
19456 _ => unreachable!(),
19457 };
19458 return Ok(ElementHandlerOutput::break_(event, allow_any));
19459 }
19460 match fallback.take() {
19461 None => (),
19462 Some(Self::All(_, Some(deserializer))) => {
19463 let data = deserializer.finish(reader)?;
19464 Self::store_all(&mut values, data)?;
19465 }
19466 Some(_) => unreachable!(),
19467 }
19468 Ok(match artifact {
19469 DeserializerArtifact::None => unreachable!(),
19470 DeserializerArtifact::Data(data) => {
19471 Self::store_all(&mut values, data)?;
19472 let data = Self::All(values, None).finish(reader)?;
19473 *self = Self::Done__(data);
19474 ElementHandlerOutput::Break { event, allow_any }
19475 }
19476 DeserializerArtifact::Deserializer(deserializer) => {
19477 *self = Self::All(values, Some(deserializer));
19478 ElementHandlerOutput::from_event_end(event, allow_any)
19479 }
19480 })
19481 }
19482 fn handle_choice<'de, R>(
19483 &mut self,
19484 reader: &R,
19485 mut values: Option<super::GroupType>,
19486 output: DeserializerOutput<'de, super::GroupType>,
19487 fallback: &mut Option<Self>,
19488 ) -> Result<ElementHandlerOutput<'de>, Error>
19489 where
19490 R: DeserializeReader,
19491 {
19492 let DeserializerOutput {
19493 artifact,
19494 event,
19495 allow_any,
19496 } = output;
19497 if artifact.is_none() {
19498 *self = match fallback.take() {
19499 None => Self::Init__,
19500 Some(Self::Choice(_, Some(deserializer))) => {
19501 Self::Choice(values, Some(deserializer))
19502 }
19503 _ => unreachable!(),
19504 };
19505 return Ok(ElementHandlerOutput::break_(event, allow_any));
19506 }
19507 match fallback.take() {
19508 None => (),
19509 Some(Self::Choice(_, Some(deserializer))) => {
19510 let data = deserializer.finish(reader)?;
19511 Self::store_choice(&mut values, data)?;
19512 }
19513 Some(_) => unreachable!(),
19514 }
19515 Ok(match artifact {
19516 DeserializerArtifact::None => unreachable!(),
19517 DeserializerArtifact::Data(data) => {
19518 Self::store_choice(&mut values, data)?;
19519 let data = Self::Choice(values, None).finish(reader)?;
19520 *self = Self::Done__(data);
19521 ElementHandlerOutput::Break { event, allow_any }
19522 }
19523 DeserializerArtifact::Deserializer(deserializer) => {
19524 *self = Self::Choice(values, Some(deserializer));
19525 ElementHandlerOutput::from_event_end(event, allow_any)
19526 }
19527 })
19528 }
19529 fn handle_sequence<'de, R>(
19530 &mut self,
19531 reader: &R,
19532 mut values: Option<super::GroupType>,
19533 output: DeserializerOutput<'de, super::GroupType>,
19534 fallback: &mut Option<Self>,
19535 ) -> Result<ElementHandlerOutput<'de>, Error>
19536 where
19537 R: DeserializeReader,
19538 {
19539 let DeserializerOutput {
19540 artifact,
19541 event,
19542 allow_any,
19543 } = output;
19544 if artifact.is_none() {
19545 *self = match fallback.take() {
19546 None => Self::Init__,
19547 Some(Self::Sequence(_, Some(deserializer))) => {
19548 Self::Sequence(values, Some(deserializer))
19549 }
19550 _ => unreachable!(),
19551 };
19552 return Ok(ElementHandlerOutput::break_(event, allow_any));
19553 }
19554 match fallback.take() {
19555 None => (),
19556 Some(Self::Sequence(_, Some(deserializer))) => {
19557 let data = deserializer.finish(reader)?;
19558 Self::store_sequence(&mut values, data)?;
19559 }
19560 Some(_) => unreachable!(),
19561 }
19562 Ok(match artifact {
19563 DeserializerArtifact::None => unreachable!(),
19564 DeserializerArtifact::Data(data) => {
19565 Self::store_sequence(&mut values, data)?;
19566 let data = Self::Sequence(values, None).finish(reader)?;
19567 *self = Self::Done__(data);
19568 ElementHandlerOutput::Break { event, allow_any }
19569 }
19570 DeserializerArtifact::Deserializer(deserializer) => {
19571 *self = Self::Sequence(values, Some(deserializer));
19572 ElementHandlerOutput::from_event_end(event, allow_any)
19573 }
19574 })
19575 }
19576 fn handle_simple_type<'de, R>(
19577 &mut self,
19578 reader: &R,
19579 mut values: Option<super::SimpleBaseType>,
19580 output: DeserializerOutput<'de, super::SimpleBaseType>,
19581 fallback: &mut Option<Self>,
19582 ) -> Result<ElementHandlerOutput<'de>, Error>
19583 where
19584 R: DeserializeReader,
19585 {
19586 let DeserializerOutput {
19587 artifact,
19588 event,
19589 allow_any,
19590 } = output;
19591 if artifact.is_none() {
19592 *self = match fallback.take() {
19593 None => Self::Init__,
19594 Some(Self::SimpleType(_, Some(deserializer))) => {
19595 Self::SimpleType(values, Some(deserializer))
19596 }
19597 _ => unreachable!(),
19598 };
19599 return Ok(ElementHandlerOutput::break_(event, allow_any));
19600 }
19601 match fallback.take() {
19602 None => (),
19603 Some(Self::SimpleType(_, Some(deserializer))) => {
19604 let data = deserializer.finish(reader)?;
19605 Self::store_simple_type(&mut values, data)?;
19606 }
19607 Some(_) => unreachable!(),
19608 }
19609 Ok(match artifact {
19610 DeserializerArtifact::None => unreachable!(),
19611 DeserializerArtifact::Data(data) => {
19612 Self::store_simple_type(&mut values, data)?;
19613 let data = Self::SimpleType(values, None).finish(reader)?;
19614 *self = Self::Done__(data);
19615 ElementHandlerOutput::Break { event, allow_any }
19616 }
19617 DeserializerArtifact::Deserializer(deserializer) => {
19618 *self = Self::SimpleType(values, Some(deserializer));
19619 ElementHandlerOutput::from_event_end(event, allow_any)
19620 }
19621 })
19622 }
19623 fn handle_facet<'de, R>(
19624 &mut self,
19625 reader: &R,
19626 mut values: Option<super::Facet>,
19627 output: DeserializerOutput<'de, super::Facet>,
19628 fallback: &mut Option<Self>,
19629 ) -> Result<ElementHandlerOutput<'de>, Error>
19630 where
19631 R: DeserializeReader,
19632 {
19633 let DeserializerOutput {
19634 artifact,
19635 event,
19636 allow_any,
19637 } = output;
19638 if artifact.is_none() {
19639 *self = match fallback.take() {
19640 None => Self::Init__,
19641 Some(Self::Facet(_, Some(deserializer))) => {
19642 Self::Facet(values, Some(deserializer))
19643 }
19644 _ => unreachable!(),
19645 };
19646 return Ok(ElementHandlerOutput::break_(event, allow_any));
19647 }
19648 match fallback.take() {
19649 None => (),
19650 Some(Self::Facet(_, Some(deserializer))) => {
19651 let data = deserializer.finish(reader)?;
19652 Self::store_facet(&mut values, data)?;
19653 }
19654 Some(_) => unreachable!(),
19655 }
19656 Ok(match artifact {
19657 DeserializerArtifact::None => unreachable!(),
19658 DeserializerArtifact::Data(data) => {
19659 Self::store_facet(&mut values, data)?;
19660 let data = Self::Facet(values, None).finish(reader)?;
19661 *self = Self::Done__(data);
19662 ElementHandlerOutput::Break { event, allow_any }
19663 }
19664 DeserializerArtifact::Deserializer(deserializer) => {
19665 *self = Self::Facet(values, Some(deserializer));
19666 ElementHandlerOutput::from_event_end(event, allow_any)
19667 }
19668 })
19669 }
19670 fn handle_attribute<'de, R>(
19671 &mut self,
19672 reader: &R,
19673 mut values: Option<super::AttributeType>,
19674 output: DeserializerOutput<'de, super::AttributeType>,
19675 fallback: &mut Option<Self>,
19676 ) -> Result<ElementHandlerOutput<'de>, Error>
19677 where
19678 R: DeserializeReader,
19679 {
19680 let DeserializerOutput {
19681 artifact,
19682 event,
19683 allow_any,
19684 } = output;
19685 if artifact.is_none() {
19686 *self = match fallback.take() {
19687 None => Self::Init__,
19688 Some(Self::Attribute(_, Some(deserializer))) => {
19689 Self::Attribute(values, Some(deserializer))
19690 }
19691 _ => unreachable!(),
19692 };
19693 return Ok(ElementHandlerOutput::break_(event, allow_any));
19694 }
19695 match fallback.take() {
19696 None => (),
19697 Some(Self::Attribute(_, Some(deserializer))) => {
19698 let data = deserializer.finish(reader)?;
19699 Self::store_attribute(&mut values, data)?;
19700 }
19701 Some(_) => unreachable!(),
19702 }
19703 Ok(match artifact {
19704 DeserializerArtifact::None => unreachable!(),
19705 DeserializerArtifact::Data(data) => {
19706 Self::store_attribute(&mut values, data)?;
19707 let data = Self::Attribute(values, None).finish(reader)?;
19708 *self = Self::Done__(data);
19709 ElementHandlerOutput::Break { event, allow_any }
19710 }
19711 DeserializerArtifact::Deserializer(deserializer) => {
19712 *self = Self::Attribute(values, Some(deserializer));
19713 ElementHandlerOutput::from_event_end(event, allow_any)
19714 }
19715 })
19716 }
19717 fn handle_attribute_group<'de, R>(
19718 &mut self,
19719 reader: &R,
19720 mut values: Option<super::AttributeGroupType>,
19721 output: DeserializerOutput<'de, super::AttributeGroupType>,
19722 fallback: &mut Option<Self>,
19723 ) -> Result<ElementHandlerOutput<'de>, Error>
19724 where
19725 R: DeserializeReader,
19726 {
19727 let DeserializerOutput {
19728 artifact,
19729 event,
19730 allow_any,
19731 } = output;
19732 if artifact.is_none() {
19733 *self = match fallback.take() {
19734 None => Self::Init__,
19735 Some(Self::AttributeGroup(_, Some(deserializer))) => {
19736 Self::AttributeGroup(values, Some(deserializer))
19737 }
19738 _ => unreachable!(),
19739 };
19740 return Ok(ElementHandlerOutput::break_(event, allow_any));
19741 }
19742 match fallback.take() {
19743 None => (),
19744 Some(Self::AttributeGroup(_, Some(deserializer))) => {
19745 let data = deserializer.finish(reader)?;
19746 Self::store_attribute_group(&mut values, data)?;
19747 }
19748 Some(_) => unreachable!(),
19749 }
19750 Ok(match artifact {
19751 DeserializerArtifact::None => unreachable!(),
19752 DeserializerArtifact::Data(data) => {
19753 Self::store_attribute_group(&mut values, data)?;
19754 let data = Self::AttributeGroup(values, None).finish(reader)?;
19755 *self = Self::Done__(data);
19756 ElementHandlerOutput::Break { event, allow_any }
19757 }
19758 DeserializerArtifact::Deserializer(deserializer) => {
19759 *self = Self::AttributeGroup(values, Some(deserializer));
19760 ElementHandlerOutput::from_event_end(event, allow_any)
19761 }
19762 })
19763 }
19764 fn handle_any_attribute<'de, R>(
19765 &mut self,
19766 reader: &R,
19767 mut values: Option<super::AnyAttribute>,
19768 output: DeserializerOutput<'de, super::AnyAttribute>,
19769 fallback: &mut Option<Self>,
19770 ) -> Result<ElementHandlerOutput<'de>, Error>
19771 where
19772 R: DeserializeReader,
19773 {
19774 let DeserializerOutput {
19775 artifact,
19776 event,
19777 allow_any,
19778 } = output;
19779 if artifact.is_none() {
19780 *self = match fallback.take() {
19781 None => Self::Init__,
19782 Some(Self::AnyAttribute(_, Some(deserializer))) => {
19783 Self::AnyAttribute(values, Some(deserializer))
19784 }
19785 _ => unreachable!(),
19786 };
19787 return Ok(ElementHandlerOutput::break_(event, allow_any));
19788 }
19789 match fallback.take() {
19790 None => (),
19791 Some(Self::AnyAttribute(_, Some(deserializer))) => {
19792 let data = deserializer.finish(reader)?;
19793 Self::store_any_attribute(&mut values, data)?;
19794 }
19795 Some(_) => unreachable!(),
19796 }
19797 Ok(match artifact {
19798 DeserializerArtifact::None => unreachable!(),
19799 DeserializerArtifact::Data(data) => {
19800 Self::store_any_attribute(&mut values, data)?;
19801 let data = Self::AnyAttribute(values, None).finish(reader)?;
19802 *self = Self::Done__(data);
19803 ElementHandlerOutput::Break { event, allow_any }
19804 }
19805 DeserializerArtifact::Deserializer(deserializer) => {
19806 *self = Self::AnyAttribute(values, Some(deserializer));
19807 ElementHandlerOutput::from_event_end(event, allow_any)
19808 }
19809 })
19810 }
19811 fn handle_assert<'de, R>(
19812 &mut self,
19813 reader: &R,
19814 mut values: Option<super::AssertionType>,
19815 output: DeserializerOutput<'de, super::AssertionType>,
19816 fallback: &mut Option<Self>,
19817 ) -> Result<ElementHandlerOutput<'de>, Error>
19818 where
19819 R: DeserializeReader,
19820 {
19821 let DeserializerOutput {
19822 artifact,
19823 event,
19824 allow_any,
19825 } = output;
19826 if artifact.is_none() {
19827 *self = match fallback.take() {
19828 None => Self::Init__,
19829 Some(Self::Assert(_, Some(deserializer))) => {
19830 Self::Assert(values, Some(deserializer))
19831 }
19832 _ => unreachable!(),
19833 };
19834 return Ok(ElementHandlerOutput::break_(event, allow_any));
19835 }
19836 match fallback.take() {
19837 None => (),
19838 Some(Self::Assert(_, Some(deserializer))) => {
19839 let data = deserializer.finish(reader)?;
19840 Self::store_assert(&mut values, data)?;
19841 }
19842 Some(_) => unreachable!(),
19843 }
19844 Ok(match artifact {
19845 DeserializerArtifact::None => unreachable!(),
19846 DeserializerArtifact::Data(data) => {
19847 Self::store_assert(&mut values, data)?;
19848 let data = Self::Assert(values, None).finish(reader)?;
19849 *self = Self::Done__(data);
19850 ElementHandlerOutput::Break { event, allow_any }
19851 }
19852 DeserializerArtifact::Deserializer(deserializer) => {
19853 *self = Self::Assert(values, Some(deserializer));
19854 ElementHandlerOutput::from_event_end(event, allow_any)
19855 }
19856 })
19857 }
19858 }
19859 impl<'de> Deserializer<'de, super::RestrictionTypeContent> for RestrictionTypeContentDeserializer {
19860 fn init<R>(
19861 reader: &R,
19862 event: Event<'de>,
19863 ) -> DeserializerResult<'de, super::RestrictionTypeContent>
19864 where
19865 R: DeserializeReader,
19866 {
19867 let deserializer = Self::Init__;
19868 let mut output = deserializer.next(reader, event)?;
19869 output.artifact = match output.artifact {
19870 DeserializerArtifact::Deserializer(Self::Init__) => DeserializerArtifact::None,
19871 artifact => artifact,
19872 };
19873 Ok(output)
19874 }
19875 fn next<R>(
19876 mut self,
19877 reader: &R,
19878 event: Event<'de>,
19879 ) -> DeserializerResult<'de, super::RestrictionTypeContent>
19880 where
19881 R: DeserializeReader,
19882 {
19883 let mut event = event;
19884 let mut fallback = None;
19885 let (event, allow_any) = loop {
19886 let state = replace(&mut self, Self::Unknown__);
19887 event = match (state, event) {
19888 (Self::Annotation(values, Some(deserializer)), event) => {
19889 let output = deserializer.next(reader, event)?;
19890 match self.handle_annotation(reader, values, output, &mut fallback)? {
19891 ElementHandlerOutput::Break { event, allow_any } => {
19892 break (event, allow_any)
19893 }
19894 ElementHandlerOutput::Continue { event, .. } => event,
19895 }
19896 }
19897 (Self::OpenContent(values, Some(deserializer)), event) => {
19898 let output = deserializer.next(reader, event)?;
19899 match self.handle_open_content(reader, values, output, &mut fallback)? {
19900 ElementHandlerOutput::Break { event, allow_any } => {
19901 break (event, allow_any)
19902 }
19903 ElementHandlerOutput::Continue { event, .. } => event,
19904 }
19905 }
19906 (Self::Group(values, Some(deserializer)), event) => {
19907 let output = deserializer.next(reader, event)?;
19908 match self.handle_group(reader, values, output, &mut fallback)? {
19909 ElementHandlerOutput::Break { event, allow_any } => {
19910 break (event, allow_any)
19911 }
19912 ElementHandlerOutput::Continue { event, .. } => event,
19913 }
19914 }
19915 (Self::All(values, Some(deserializer)), event) => {
19916 let output = deserializer.next(reader, event)?;
19917 match self.handle_all(reader, values, output, &mut fallback)? {
19918 ElementHandlerOutput::Break { event, allow_any } => {
19919 break (event, allow_any)
19920 }
19921 ElementHandlerOutput::Continue { event, .. } => event,
19922 }
19923 }
19924 (Self::Choice(values, Some(deserializer)), event) => {
19925 let output = deserializer.next(reader, event)?;
19926 match self.handle_choice(reader, values, output, &mut fallback)? {
19927 ElementHandlerOutput::Break { event, allow_any } => {
19928 break (event, allow_any)
19929 }
19930 ElementHandlerOutput::Continue { event, .. } => event,
19931 }
19932 }
19933 (Self::Sequence(values, Some(deserializer)), event) => {
19934 let output = deserializer.next(reader, event)?;
19935 match self.handle_sequence(reader, values, output, &mut fallback)? {
19936 ElementHandlerOutput::Break { event, allow_any } => {
19937 break (event, allow_any)
19938 }
19939 ElementHandlerOutput::Continue { event, .. } => event,
19940 }
19941 }
19942 (Self::SimpleType(values, Some(deserializer)), event) => {
19943 let output = deserializer.next(reader, event)?;
19944 match self.handle_simple_type(reader, values, output, &mut fallback)? {
19945 ElementHandlerOutput::Break { event, allow_any } => {
19946 break (event, allow_any)
19947 }
19948 ElementHandlerOutput::Continue { event, .. } => event,
19949 }
19950 }
19951 (Self::Facet(values, Some(deserializer)), event) => {
19952 let output = deserializer.next(reader, event)?;
19953 match self.handle_facet(reader, values, output, &mut fallback)? {
19954 ElementHandlerOutput::Break { event, allow_any } => {
19955 break (event, allow_any)
19956 }
19957 ElementHandlerOutput::Continue { event, .. } => event,
19958 }
19959 }
19960 (Self::Attribute(values, Some(deserializer)), event) => {
19961 let output = deserializer.next(reader, event)?;
19962 match self.handle_attribute(reader, values, output, &mut fallback)? {
19963 ElementHandlerOutput::Break { event, allow_any } => {
19964 break (event, allow_any)
19965 }
19966 ElementHandlerOutput::Continue { event, .. } => event,
19967 }
19968 }
19969 (Self::AttributeGroup(values, Some(deserializer)), event) => {
19970 let output = deserializer.next(reader, event)?;
19971 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
19972 ElementHandlerOutput::Break { event, allow_any } => {
19973 break (event, allow_any)
19974 }
19975 ElementHandlerOutput::Continue { event, .. } => event,
19976 }
19977 }
19978 (Self::AnyAttribute(values, Some(deserializer)), event) => {
19979 let output = deserializer.next(reader, event)?;
19980 match self.handle_any_attribute(reader, values, output, &mut fallback)? {
19981 ElementHandlerOutput::Break { event, allow_any } => {
19982 break (event, allow_any)
19983 }
19984 ElementHandlerOutput::Continue { event, .. } => event,
19985 }
19986 }
19987 (Self::Assert(values, Some(deserializer)), event) => {
19988 let output = deserializer.next(reader, event)?;
19989 match self.handle_assert(reader, values, output, &mut fallback)? {
19990 ElementHandlerOutput::Break { event, allow_any } => {
19991 break (event, allow_any)
19992 }
19993 ElementHandlerOutput::Continue { event, .. } => event,
19994 }
19995 }
19996 (state, event @ Event::End(_)) => {
19997 return Ok(DeserializerOutput {
19998 artifact: DeserializerArtifact::Data(state.finish(reader)?),
19999 event: DeserializerEvent::Continue(event),
20000 allow_any: false,
20001 });
20002 }
20003 (Self::Init__, event) => {
20004 match self.find_suitable(reader, event, &mut fallback)? {
20005 ElementHandlerOutput::Break { event, allow_any } => {
20006 break (event, allow_any)
20007 }
20008 ElementHandlerOutput::Continue { event, .. } => event,
20009 }
20010 }
20011 (Self::Annotation(values, None), event) => {
20012 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
20013 reader, event,
20014 )?;
20015 match self.handle_annotation(reader, values, output, &mut fallback)? {
20016 ElementHandlerOutput::Break { event, allow_any } => {
20017 break (event, allow_any)
20018 }
20019 ElementHandlerOutput::Continue { event, .. } => event,
20020 }
20021 }
20022 (Self::OpenContent(values, None), event) => {
20023 let output = <super::OpenContent as WithDeserializer>::Deserializer::init(
20024 reader, event,
20025 )?;
20026 match self.handle_open_content(reader, values, output, &mut fallback)? {
20027 ElementHandlerOutput::Break { event, allow_any } => {
20028 break (event, allow_any)
20029 }
20030 ElementHandlerOutput::Continue { event, .. } => event,
20031 }
20032 }
20033 (Self::Group(values, None), event) => {
20034 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
20035 reader, event,
20036 )?;
20037 match self.handle_group(reader, values, output, &mut fallback)? {
20038 ElementHandlerOutput::Break { event, allow_any } => {
20039 break (event, allow_any)
20040 }
20041 ElementHandlerOutput::Continue { event, .. } => event,
20042 }
20043 }
20044 (Self::All(values, None), event) => {
20045 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
20046 reader, event,
20047 )?;
20048 match self.handle_all(reader, values, output, &mut fallback)? {
20049 ElementHandlerOutput::Break { event, allow_any } => {
20050 break (event, allow_any)
20051 }
20052 ElementHandlerOutput::Continue { event, .. } => event,
20053 }
20054 }
20055 (Self::Choice(values, None), event) => {
20056 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
20057 reader, event,
20058 )?;
20059 match self.handle_choice(reader, values, output, &mut fallback)? {
20060 ElementHandlerOutput::Break { event, allow_any } => {
20061 break (event, allow_any)
20062 }
20063 ElementHandlerOutput::Continue { event, .. } => event,
20064 }
20065 }
20066 (Self::Sequence(values, None), event) => {
20067 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
20068 reader, event,
20069 )?;
20070 match self.handle_sequence(reader, values, output, &mut fallback)? {
20071 ElementHandlerOutput::Break { event, allow_any } => {
20072 break (event, allow_any)
20073 }
20074 ElementHandlerOutput::Continue { event, .. } => event,
20075 }
20076 }
20077 (Self::SimpleType(values, None), event) => {
20078 let output =
20079 <super::SimpleBaseType as WithDeserializer>::Deserializer::init(
20080 reader, event,
20081 )?;
20082 match self.handle_simple_type(reader, values, output, &mut fallback)? {
20083 ElementHandlerOutput::Break { event, allow_any } => {
20084 break (event, allow_any)
20085 }
20086 ElementHandlerOutput::Continue { event, .. } => event,
20087 }
20088 }
20089 (Self::Facet(values, None), event) => {
20090 let output =
20091 <super::Facet as WithDeserializer>::Deserializer::init(reader, event)?;
20092 match self.handle_facet(reader, values, output, &mut fallback)? {
20093 ElementHandlerOutput::Break { event, allow_any } => {
20094 break (event, allow_any)
20095 }
20096 ElementHandlerOutput::Continue { event, .. } => event,
20097 }
20098 }
20099 (Self::Attribute(values, None), event) => {
20100 let output =
20101 <super::AttributeType as WithDeserializer>::Deserializer::init(
20102 reader, event,
20103 )?;
20104 match self.handle_attribute(reader, values, output, &mut fallback)? {
20105 ElementHandlerOutput::Break { event, allow_any } => {
20106 break (event, allow_any)
20107 }
20108 ElementHandlerOutput::Continue { event, .. } => event,
20109 }
20110 }
20111 (Self::AttributeGroup(values, None), event) => {
20112 let output =
20113 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
20114 reader, event,
20115 )?;
20116 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
20117 ElementHandlerOutput::Break { event, allow_any } => {
20118 break (event, allow_any)
20119 }
20120 ElementHandlerOutput::Continue { event, .. } => event,
20121 }
20122 }
20123 (Self::AnyAttribute(values, None), event) => {
20124 let output = <super::AnyAttribute as WithDeserializer>::Deserializer::init(
20125 reader, event,
20126 )?;
20127 match self.handle_any_attribute(reader, values, output, &mut fallback)? {
20128 ElementHandlerOutput::Break { event, allow_any } => {
20129 break (event, allow_any)
20130 }
20131 ElementHandlerOutput::Continue { event, .. } => event,
20132 }
20133 }
20134 (Self::Assert(values, None), event) => {
20135 let output =
20136 <super::AssertionType as WithDeserializer>::Deserializer::init(
20137 reader, event,
20138 )?;
20139 match self.handle_assert(reader, values, output, &mut fallback)? {
20140 ElementHandlerOutput::Break { event, allow_any } => {
20141 break (event, allow_any)
20142 }
20143 ElementHandlerOutput::Continue { event, .. } => event,
20144 }
20145 }
20146 (s @ Self::Done__(_), event) => {
20147 self = s;
20148 break (DeserializerEvent::Continue(event), false);
20149 }
20150 (Self::Unknown__, _) => unreachable!(),
20151 }
20152 };
20153 let artifact = match self {
20154 Self::Done__(data) => DeserializerArtifact::Data(data),
20155 deserializer => DeserializerArtifact::Deserializer(deserializer),
20156 };
20157 Ok(DeserializerOutput {
20158 artifact,
20159 event,
20160 allow_any,
20161 })
20162 }
20163 fn finish<R>(self, reader: &R) -> Result<super::RestrictionTypeContent, Error>
20164 where
20165 R: DeserializeReader,
20166 {
20167 match self {
20168 Self::Init__ => Err(ErrorKind::MissingContent.into()),
20169 Self::Annotation(mut values, deserializer) => {
20170 if let Some(deserializer) = deserializer {
20171 let value = deserializer.finish(reader)?;
20172 Self::store_annotation(&mut values, value)?;
20173 }
20174 Ok(super::RestrictionTypeContent::Annotation(
20175 values.ok_or_else(|| ErrorKind::MissingElement("annotation".into()))?,
20176 ))
20177 }
20178 Self::OpenContent(mut values, deserializer) => {
20179 if let Some(deserializer) = deserializer {
20180 let value = deserializer.finish(reader)?;
20181 Self::store_open_content(&mut values, value)?;
20182 }
20183 Ok(super::RestrictionTypeContent::OpenContent(
20184 values.ok_or_else(|| ErrorKind::MissingElement("openContent".into()))?,
20185 ))
20186 }
20187 Self::Group(mut values, deserializer) => {
20188 if let Some(deserializer) = deserializer {
20189 let value = deserializer.finish(reader)?;
20190 Self::store_group(&mut values, value)?;
20191 }
20192 Ok(super::RestrictionTypeContent::Group(values.ok_or_else(
20193 || ErrorKind::MissingElement("group".into()),
20194 )?))
20195 }
20196 Self::All(mut values, deserializer) => {
20197 if let Some(deserializer) = deserializer {
20198 let value = deserializer.finish(reader)?;
20199 Self::store_all(&mut values, value)?;
20200 }
20201 Ok(super::RestrictionTypeContent::All(
20202 values.ok_or_else(|| ErrorKind::MissingElement("all".into()))?,
20203 ))
20204 }
20205 Self::Choice(mut values, deserializer) => {
20206 if let Some(deserializer) = deserializer {
20207 let value = deserializer.finish(reader)?;
20208 Self::store_choice(&mut values, value)?;
20209 }
20210 Ok(super::RestrictionTypeContent::Choice(values.ok_or_else(
20211 || ErrorKind::MissingElement("choice".into()),
20212 )?))
20213 }
20214 Self::Sequence(mut values, deserializer) => {
20215 if let Some(deserializer) = deserializer {
20216 let value = deserializer.finish(reader)?;
20217 Self::store_sequence(&mut values, value)?;
20218 }
20219 Ok(super::RestrictionTypeContent::Sequence(values.ok_or_else(
20220 || ErrorKind::MissingElement("sequence".into()),
20221 )?))
20222 }
20223 Self::SimpleType(mut values, deserializer) => {
20224 if let Some(deserializer) = deserializer {
20225 let value = deserializer.finish(reader)?;
20226 Self::store_simple_type(&mut values, value)?;
20227 }
20228 Ok(super::RestrictionTypeContent::SimpleType(
20229 values.ok_or_else(|| ErrorKind::MissingElement("simpleType".into()))?,
20230 ))
20231 }
20232 Self::Facet(mut values, deserializer) => {
20233 if let Some(deserializer) = deserializer {
20234 let value = deserializer.finish(reader)?;
20235 Self::store_facet(&mut values, value)?;
20236 }
20237 Ok(super::RestrictionTypeContent::Facet(values.ok_or_else(
20238 || ErrorKind::MissingElement("facet".into()),
20239 )?))
20240 }
20241 Self::Attribute(mut values, deserializer) => {
20242 if let Some(deserializer) = deserializer {
20243 let value = deserializer.finish(reader)?;
20244 Self::store_attribute(&mut values, value)?;
20245 }
20246 Ok(super::RestrictionTypeContent::Attribute(
20247 values.ok_or_else(|| ErrorKind::MissingElement("attribute".into()))?,
20248 ))
20249 }
20250 Self::AttributeGroup(mut values, deserializer) => {
20251 if let Some(deserializer) = deserializer {
20252 let value = deserializer.finish(reader)?;
20253 Self::store_attribute_group(&mut values, value)?;
20254 }
20255 Ok(super::RestrictionTypeContent::AttributeGroup(
20256 values.ok_or_else(|| ErrorKind::MissingElement("attributeGroup".into()))?,
20257 ))
20258 }
20259 Self::AnyAttribute(mut values, deserializer) => {
20260 if let Some(deserializer) = deserializer {
20261 let value = deserializer.finish(reader)?;
20262 Self::store_any_attribute(&mut values, value)?;
20263 }
20264 Ok(super::RestrictionTypeContent::AnyAttribute(
20265 values.ok_or_else(|| ErrorKind::MissingElement("anyAttribute".into()))?,
20266 ))
20267 }
20268 Self::Assert(mut values, deserializer) => {
20269 if let Some(deserializer) = deserializer {
20270 let value = deserializer.finish(reader)?;
20271 Self::store_assert(&mut values, value)?;
20272 }
20273 Ok(super::RestrictionTypeContent::Assert(values.ok_or_else(
20274 || ErrorKind::MissingElement("assert".into()),
20275 )?))
20276 }
20277 Self::Done__(data) => Ok(data),
20278 Self::Unknown__ => unreachable!(),
20279 }
20280 }
20281 }
20282 #[derive(Debug)]
20283 pub struct ExtensionTypeDeserializer {
20284 id: Option<String>,
20285 base: super::QName,
20286 content: Vec<super::ExtensionTypeContent>,
20287 state: Box<ExtensionTypeDeserializerState>,
20288 }
20289 #[derive(Debug)]
20290 enum ExtensionTypeDeserializerState {
20291 Init__,
20292 Next__,
20293 Content__(<super::ExtensionTypeContent as WithDeserializer>::Deserializer),
20294 Unknown__,
20295 }
20296 impl ExtensionTypeDeserializer {
20297 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
20298 where
20299 R: DeserializeReader,
20300 {
20301 let mut id: Option<String> = None;
20302 let mut base: Option<super::QName> = None;
20303 for attrib in filter_xmlns_attributes(bytes_start) {
20304 let attrib = attrib?;
20305 if matches!(
20306 reader.resolve_local_name(attrib.key, &super::NS_XS),
20307 Some(b"id")
20308 ) {
20309 reader.read_attrib(&mut id, b"id", &attrib.value)?;
20310 } else if matches!(
20311 reader.resolve_local_name(attrib.key, &super::NS_XS),
20312 Some(b"base")
20313 ) {
20314 reader.read_attrib(&mut base, b"base", &attrib.value)?;
20315 }
20316 }
20317 Ok(Self {
20318 id: id,
20319 base: base
20320 .ok_or_else(|| reader.map_error(ErrorKind::MissingAttribute("base".into())))?,
20321 content: Vec::new(),
20322 state: Box::new(ExtensionTypeDeserializerState::Init__),
20323 })
20324 }
20325 fn finish_state<R>(
20326 &mut self,
20327 reader: &R,
20328 state: ExtensionTypeDeserializerState,
20329 ) -> Result<(), Error>
20330 where
20331 R: DeserializeReader,
20332 {
20333 if let ExtensionTypeDeserializerState::Content__(deserializer) = state {
20334 self.store_content(deserializer.finish(reader)?)?;
20335 }
20336 Ok(())
20337 }
20338 fn store_content(&mut self, value: super::ExtensionTypeContent) -> Result<(), Error> {
20339 self.content.push(value);
20340 Ok(())
20341 }
20342 fn handle_content<'de, R>(
20343 &mut self,
20344 reader: &R,
20345 output: DeserializerOutput<'de, super::ExtensionTypeContent>,
20346 fallback: &mut Option<ExtensionTypeDeserializerState>,
20347 ) -> Result<ElementHandlerOutput<'de>, Error>
20348 where
20349 R: DeserializeReader,
20350 {
20351 let DeserializerOutput {
20352 artifact,
20353 event,
20354 allow_any,
20355 } = output;
20356 if artifact.is_none() {
20357 *self.state = fallback
20358 .take()
20359 .unwrap_or(ExtensionTypeDeserializerState::Next__);
20360 return Ok(ElementHandlerOutput::break_(event, allow_any));
20361 }
20362 if let Some(fallback) = fallback.take() {
20363 self.finish_state(reader, fallback)?;
20364 }
20365 Ok(match artifact {
20366 DeserializerArtifact::None => unreachable!(),
20367 DeserializerArtifact::Data(data) => {
20368 self.store_content(data)?;
20369 *self.state = ExtensionTypeDeserializerState::Next__;
20370 ElementHandlerOutput::from_event(event, allow_any)
20371 }
20372 DeserializerArtifact::Deserializer(deserializer) => {
20373 let ret = ElementHandlerOutput::from_event(event, allow_any);
20374 match &ret {
20375 ElementHandlerOutput::Continue { .. } => {
20376 fallback.get_or_insert(ExtensionTypeDeserializerState::Content__(
20377 deserializer,
20378 ));
20379 *self.state = ExtensionTypeDeserializerState::Next__;
20380 }
20381 ElementHandlerOutput::Break { .. } => {
20382 *self.state = ExtensionTypeDeserializerState::Content__(deserializer);
20383 }
20384 }
20385 ret
20386 }
20387 })
20388 }
20389 }
20390 impl<'de> Deserializer<'de, super::ExtensionType> for ExtensionTypeDeserializer {
20391 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::ExtensionType>
20392 where
20393 R: DeserializeReader,
20394 {
20395 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
20396 }
20397 fn next<R>(
20398 mut self,
20399 reader: &R,
20400 event: Event<'de>,
20401 ) -> DeserializerResult<'de, super::ExtensionType>
20402 where
20403 R: DeserializeReader,
20404 {
20405 use ExtensionTypeDeserializerState as S;
20406 let mut event = event;
20407 let mut fallback = None;
20408 let (event, allow_any) = loop {
20409 let state = replace(&mut *self.state, S::Unknown__);
20410 event = match (state, event) {
20411 (S::Content__(deserializer), event) => {
20412 let output = deserializer.next(reader, event)?;
20413 match self.handle_content(reader, output, &mut fallback)? {
20414 ElementHandlerOutput::Break { event, allow_any } => {
20415 break (event, allow_any)
20416 }
20417 ElementHandlerOutput::Continue { event, .. } => event,
20418 }
20419 }
20420 (_, Event::End(_)) => {
20421 return Ok(DeserializerOutput {
20422 artifact: DeserializerArtifact::Data(self.finish(reader)?),
20423 event: DeserializerEvent::None,
20424 allow_any: false,
20425 });
20426 }
20427 (old_state @ (S::Init__ | S::Next__), event) => {
20428 let output =
20429 <super::ExtensionTypeContent as WithDeserializer>::Deserializer::init(
20430 reader, event,
20431 )?;
20432 match self.handle_content(reader, output, &mut fallback)? {
20433 ElementHandlerOutput::Break { event, allow_any } => {
20434 if matches!(&*self.state, S::Unknown__) {
20435 *self.state = old_state;
20436 }
20437 break (event, allow_any);
20438 }
20439 ElementHandlerOutput::Continue { event, .. } => event,
20440 }
20441 }
20442 (S::Unknown__, _) => unreachable!(),
20443 }
20444 };
20445 Ok(DeserializerOutput {
20446 artifact: DeserializerArtifact::Deserializer(self),
20447 event,
20448 allow_any,
20449 })
20450 }
20451 fn finish<R>(mut self, reader: &R) -> Result<super::ExtensionType, Error>
20452 where
20453 R: DeserializeReader,
20454 {
20455 let state = replace(&mut *self.state, ExtensionTypeDeserializerState::Unknown__);
20456 self.finish_state(reader, state)?;
20457 Ok(super::ExtensionType {
20458 id: self.id,
20459 base: self.base,
20460 content: self.content,
20461 })
20462 }
20463 }
20464 #[derive(Debug)]
20465 pub enum ExtensionTypeContentDeserializer {
20466 Init__,
20467 Annotation(
20468 Option<super::Annotation>,
20469 Option<<super::Annotation as WithDeserializer>::Deserializer>,
20470 ),
20471 OpenContent(
20472 Option<super::OpenContent>,
20473 Option<<super::OpenContent as WithDeserializer>::Deserializer>,
20474 ),
20475 Group(
20476 Option<super::GroupType>,
20477 Option<<super::GroupType as WithDeserializer>::Deserializer>,
20478 ),
20479 All(
20480 Option<super::GroupType>,
20481 Option<<super::GroupType as WithDeserializer>::Deserializer>,
20482 ),
20483 Choice(
20484 Option<super::GroupType>,
20485 Option<<super::GroupType as WithDeserializer>::Deserializer>,
20486 ),
20487 Sequence(
20488 Option<super::GroupType>,
20489 Option<<super::GroupType as WithDeserializer>::Deserializer>,
20490 ),
20491 Attribute(
20492 Option<super::AttributeType>,
20493 Option<<super::AttributeType as WithDeserializer>::Deserializer>,
20494 ),
20495 AttributeGroup(
20496 Option<super::AttributeGroupType>,
20497 Option<<super::AttributeGroupType as WithDeserializer>::Deserializer>,
20498 ),
20499 AnyAttribute(
20500 Option<super::AnyAttribute>,
20501 Option<<super::AnyAttribute as WithDeserializer>::Deserializer>,
20502 ),
20503 Assert(
20504 Option<super::AssertionType>,
20505 Option<<super::AssertionType as WithDeserializer>::Deserializer>,
20506 ),
20507 Done__(super::ExtensionTypeContent),
20508 Unknown__,
20509 }
20510 impl ExtensionTypeContentDeserializer {
20511 fn find_suitable<'de, R>(
20512 &mut self,
20513 reader: &R,
20514 event: Event<'de>,
20515 fallback: &mut Option<ExtensionTypeContentDeserializer>,
20516 ) -> Result<ElementHandlerOutput<'de>, Error>
20517 where
20518 R: DeserializeReader,
20519 {
20520 let (Event::Start(x) | Event::Empty(x)) = &event else {
20521 *self = Self::Init__;
20522 return Ok(ElementHandlerOutput::return_to_parent(event, false));
20523 };
20524 if matches!(
20525 reader.resolve_local_name(x.name(), &super::NS_XS),
20526 Some(b"annotation")
20527 ) {
20528 let output =
20529 <super::Annotation as WithDeserializer>::Deserializer::init(reader, event)?;
20530 return self.handle_annotation(reader, Default::default(), output, &mut *fallback);
20531 }
20532 if matches!(
20533 reader.resolve_local_name(x.name(), &super::NS_XS),
20534 Some(b"openContent")
20535 ) {
20536 let output =
20537 <super::OpenContent as WithDeserializer>::Deserializer::init(reader, event)?;
20538 return self.handle_open_content(
20539 reader,
20540 Default::default(),
20541 output,
20542 &mut *fallback,
20543 );
20544 }
20545 if matches!(
20546 reader.resolve_local_name(x.name(), &super::NS_XS),
20547 Some(b"group")
20548 ) {
20549 let output =
20550 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
20551 return self.handle_group(reader, Default::default(), output, &mut *fallback);
20552 }
20553 if matches!(
20554 reader.resolve_local_name(x.name(), &super::NS_XS),
20555 Some(b"all")
20556 ) {
20557 let output =
20558 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
20559 return self.handle_all(reader, Default::default(), output, &mut *fallback);
20560 }
20561 if matches!(
20562 reader.resolve_local_name(x.name(), &super::NS_XS),
20563 Some(b"choice")
20564 ) {
20565 let output =
20566 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
20567 return self.handle_choice(reader, Default::default(), output, &mut *fallback);
20568 }
20569 if matches!(
20570 reader.resolve_local_name(x.name(), &super::NS_XS),
20571 Some(b"sequence")
20572 ) {
20573 let output =
20574 <super::GroupType as WithDeserializer>::Deserializer::init(reader, event)?;
20575 return self.handle_sequence(reader, Default::default(), output, &mut *fallback);
20576 }
20577 if matches!(
20578 reader.resolve_local_name(x.name(), &super::NS_XS),
20579 Some(b"attribute")
20580 ) {
20581 let output =
20582 <super::AttributeType as WithDeserializer>::Deserializer::init(reader, event)?;
20583 return self.handle_attribute(reader, Default::default(), output, &mut *fallback);
20584 }
20585 if matches!(
20586 reader.resolve_local_name(x.name(), &super::NS_XS),
20587 Some(b"attributeGroup")
20588 ) {
20589 let output = <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
20590 reader, event,
20591 )?;
20592 return self.handle_attribute_group(
20593 reader,
20594 Default::default(),
20595 output,
20596 &mut *fallback,
20597 );
20598 }
20599 if matches!(
20600 reader.resolve_local_name(x.name(), &super::NS_XS),
20601 Some(b"anyAttribute")
20602 ) {
20603 let output =
20604 <super::AnyAttribute as WithDeserializer>::Deserializer::init(reader, event)?;
20605 return self.handle_any_attribute(
20606 reader,
20607 Default::default(),
20608 output,
20609 &mut *fallback,
20610 );
20611 }
20612 if matches!(
20613 reader.resolve_local_name(x.name(), &super::NS_XS),
20614 Some(b"assert")
20615 ) {
20616 let output =
20617 <super::AssertionType as WithDeserializer>::Deserializer::init(reader, event)?;
20618 return self.handle_assert(reader, Default::default(), output, &mut *fallback);
20619 }
20620 *self = Self::Init__;
20621 Ok(ElementHandlerOutput::return_to_parent(event, false))
20622 }
20623 fn store_annotation(
20624 values: &mut Option<super::Annotation>,
20625 value: super::Annotation,
20626 ) -> Result<(), Error> {
20627 if values.is_some() {
20628 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20629 b"annotation",
20630 )))?;
20631 }
20632 *values = Some(value);
20633 Ok(())
20634 }
20635 fn store_open_content(
20636 values: &mut Option<super::OpenContent>,
20637 value: super::OpenContent,
20638 ) -> Result<(), Error> {
20639 if values.is_some() {
20640 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20641 b"openContent",
20642 )))?;
20643 }
20644 *values = Some(value);
20645 Ok(())
20646 }
20647 fn store_group(
20648 values: &mut Option<super::GroupType>,
20649 value: super::GroupType,
20650 ) -> Result<(), Error> {
20651 if values.is_some() {
20652 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20653 b"group",
20654 )))?;
20655 }
20656 *values = Some(value);
20657 Ok(())
20658 }
20659 fn store_all(
20660 values: &mut Option<super::GroupType>,
20661 value: super::GroupType,
20662 ) -> Result<(), Error> {
20663 if values.is_some() {
20664 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(b"all")))?;
20665 }
20666 *values = Some(value);
20667 Ok(())
20668 }
20669 fn store_choice(
20670 values: &mut Option<super::GroupType>,
20671 value: super::GroupType,
20672 ) -> Result<(), Error> {
20673 if values.is_some() {
20674 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20675 b"choice",
20676 )))?;
20677 }
20678 *values = Some(value);
20679 Ok(())
20680 }
20681 fn store_sequence(
20682 values: &mut Option<super::GroupType>,
20683 value: super::GroupType,
20684 ) -> Result<(), Error> {
20685 if values.is_some() {
20686 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20687 b"sequence",
20688 )))?;
20689 }
20690 *values = Some(value);
20691 Ok(())
20692 }
20693 fn store_attribute(
20694 values: &mut Option<super::AttributeType>,
20695 value: super::AttributeType,
20696 ) -> Result<(), Error> {
20697 if values.is_some() {
20698 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20699 b"attribute",
20700 )))?;
20701 }
20702 *values = Some(value);
20703 Ok(())
20704 }
20705 fn store_attribute_group(
20706 values: &mut Option<super::AttributeGroupType>,
20707 value: super::AttributeGroupType,
20708 ) -> Result<(), Error> {
20709 if values.is_some() {
20710 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20711 b"attributeGroup",
20712 )))?;
20713 }
20714 *values = Some(value);
20715 Ok(())
20716 }
20717 fn store_any_attribute(
20718 values: &mut Option<super::AnyAttribute>,
20719 value: super::AnyAttribute,
20720 ) -> Result<(), Error> {
20721 if values.is_some() {
20722 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20723 b"anyAttribute",
20724 )))?;
20725 }
20726 *values = Some(value);
20727 Ok(())
20728 }
20729 fn store_assert(
20730 values: &mut Option<super::AssertionType>,
20731 value: super::AssertionType,
20732 ) -> Result<(), Error> {
20733 if values.is_some() {
20734 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
20735 b"assert",
20736 )))?;
20737 }
20738 *values = Some(value);
20739 Ok(())
20740 }
20741 fn handle_annotation<'de, R>(
20742 &mut self,
20743 reader: &R,
20744 mut values: Option<super::Annotation>,
20745 output: DeserializerOutput<'de, super::Annotation>,
20746 fallback: &mut Option<Self>,
20747 ) -> Result<ElementHandlerOutput<'de>, Error>
20748 where
20749 R: DeserializeReader,
20750 {
20751 let DeserializerOutput {
20752 artifact,
20753 event,
20754 allow_any,
20755 } = output;
20756 if artifact.is_none() {
20757 *self = match fallback.take() {
20758 None => Self::Init__,
20759 Some(Self::Annotation(_, Some(deserializer))) => {
20760 Self::Annotation(values, Some(deserializer))
20761 }
20762 _ => unreachable!(),
20763 };
20764 return Ok(ElementHandlerOutput::break_(event, allow_any));
20765 }
20766 match fallback.take() {
20767 None => (),
20768 Some(Self::Annotation(_, Some(deserializer))) => {
20769 let data = deserializer.finish(reader)?;
20770 Self::store_annotation(&mut values, data)?;
20771 }
20772 Some(_) => unreachable!(),
20773 }
20774 Ok(match artifact {
20775 DeserializerArtifact::None => unreachable!(),
20776 DeserializerArtifact::Data(data) => {
20777 Self::store_annotation(&mut values, data)?;
20778 let data = Self::Annotation(values, None).finish(reader)?;
20779 *self = Self::Done__(data);
20780 ElementHandlerOutput::Break { event, allow_any }
20781 }
20782 DeserializerArtifact::Deserializer(deserializer) => {
20783 *self = Self::Annotation(values, Some(deserializer));
20784 ElementHandlerOutput::from_event_end(event, allow_any)
20785 }
20786 })
20787 }
20788 fn handle_open_content<'de, R>(
20789 &mut self,
20790 reader: &R,
20791 mut values: Option<super::OpenContent>,
20792 output: DeserializerOutput<'de, super::OpenContent>,
20793 fallback: &mut Option<Self>,
20794 ) -> Result<ElementHandlerOutput<'de>, Error>
20795 where
20796 R: DeserializeReader,
20797 {
20798 let DeserializerOutput {
20799 artifact,
20800 event,
20801 allow_any,
20802 } = output;
20803 if artifact.is_none() {
20804 *self = match fallback.take() {
20805 None => Self::Init__,
20806 Some(Self::OpenContent(_, Some(deserializer))) => {
20807 Self::OpenContent(values, Some(deserializer))
20808 }
20809 _ => unreachable!(),
20810 };
20811 return Ok(ElementHandlerOutput::break_(event, allow_any));
20812 }
20813 match fallback.take() {
20814 None => (),
20815 Some(Self::OpenContent(_, Some(deserializer))) => {
20816 let data = deserializer.finish(reader)?;
20817 Self::store_open_content(&mut values, data)?;
20818 }
20819 Some(_) => unreachable!(),
20820 }
20821 Ok(match artifact {
20822 DeserializerArtifact::None => unreachable!(),
20823 DeserializerArtifact::Data(data) => {
20824 Self::store_open_content(&mut values, data)?;
20825 let data = Self::OpenContent(values, None).finish(reader)?;
20826 *self = Self::Done__(data);
20827 ElementHandlerOutput::Break { event, allow_any }
20828 }
20829 DeserializerArtifact::Deserializer(deserializer) => {
20830 *self = Self::OpenContent(values, Some(deserializer));
20831 ElementHandlerOutput::from_event_end(event, allow_any)
20832 }
20833 })
20834 }
20835 fn handle_group<'de, R>(
20836 &mut self,
20837 reader: &R,
20838 mut values: Option<super::GroupType>,
20839 output: DeserializerOutput<'de, super::GroupType>,
20840 fallback: &mut Option<Self>,
20841 ) -> Result<ElementHandlerOutput<'de>, Error>
20842 where
20843 R: DeserializeReader,
20844 {
20845 let DeserializerOutput {
20846 artifact,
20847 event,
20848 allow_any,
20849 } = output;
20850 if artifact.is_none() {
20851 *self = match fallback.take() {
20852 None => Self::Init__,
20853 Some(Self::Group(_, Some(deserializer))) => {
20854 Self::Group(values, Some(deserializer))
20855 }
20856 _ => unreachable!(),
20857 };
20858 return Ok(ElementHandlerOutput::break_(event, allow_any));
20859 }
20860 match fallback.take() {
20861 None => (),
20862 Some(Self::Group(_, Some(deserializer))) => {
20863 let data = deserializer.finish(reader)?;
20864 Self::store_group(&mut values, data)?;
20865 }
20866 Some(_) => unreachable!(),
20867 }
20868 Ok(match artifact {
20869 DeserializerArtifact::None => unreachable!(),
20870 DeserializerArtifact::Data(data) => {
20871 Self::store_group(&mut values, data)?;
20872 let data = Self::Group(values, None).finish(reader)?;
20873 *self = Self::Done__(data);
20874 ElementHandlerOutput::Break { event, allow_any }
20875 }
20876 DeserializerArtifact::Deserializer(deserializer) => {
20877 *self = Self::Group(values, Some(deserializer));
20878 ElementHandlerOutput::from_event_end(event, allow_any)
20879 }
20880 })
20881 }
20882 fn handle_all<'de, R>(
20883 &mut self,
20884 reader: &R,
20885 mut values: Option<super::GroupType>,
20886 output: DeserializerOutput<'de, super::GroupType>,
20887 fallback: &mut Option<Self>,
20888 ) -> Result<ElementHandlerOutput<'de>, Error>
20889 where
20890 R: DeserializeReader,
20891 {
20892 let DeserializerOutput {
20893 artifact,
20894 event,
20895 allow_any,
20896 } = output;
20897 if artifact.is_none() {
20898 *self = match fallback.take() {
20899 None => Self::Init__,
20900 Some(Self::All(_, Some(deserializer))) => Self::All(values, Some(deserializer)),
20901 _ => unreachable!(),
20902 };
20903 return Ok(ElementHandlerOutput::break_(event, allow_any));
20904 }
20905 match fallback.take() {
20906 None => (),
20907 Some(Self::All(_, Some(deserializer))) => {
20908 let data = deserializer.finish(reader)?;
20909 Self::store_all(&mut values, data)?;
20910 }
20911 Some(_) => unreachable!(),
20912 }
20913 Ok(match artifact {
20914 DeserializerArtifact::None => unreachable!(),
20915 DeserializerArtifact::Data(data) => {
20916 Self::store_all(&mut values, data)?;
20917 let data = Self::All(values, None).finish(reader)?;
20918 *self = Self::Done__(data);
20919 ElementHandlerOutput::Break { event, allow_any }
20920 }
20921 DeserializerArtifact::Deserializer(deserializer) => {
20922 *self = Self::All(values, Some(deserializer));
20923 ElementHandlerOutput::from_event_end(event, allow_any)
20924 }
20925 })
20926 }
20927 fn handle_choice<'de, R>(
20928 &mut self,
20929 reader: &R,
20930 mut values: Option<super::GroupType>,
20931 output: DeserializerOutput<'de, super::GroupType>,
20932 fallback: &mut Option<Self>,
20933 ) -> Result<ElementHandlerOutput<'de>, Error>
20934 where
20935 R: DeserializeReader,
20936 {
20937 let DeserializerOutput {
20938 artifact,
20939 event,
20940 allow_any,
20941 } = output;
20942 if artifact.is_none() {
20943 *self = match fallback.take() {
20944 None => Self::Init__,
20945 Some(Self::Choice(_, Some(deserializer))) => {
20946 Self::Choice(values, Some(deserializer))
20947 }
20948 _ => unreachable!(),
20949 };
20950 return Ok(ElementHandlerOutput::break_(event, allow_any));
20951 }
20952 match fallback.take() {
20953 None => (),
20954 Some(Self::Choice(_, Some(deserializer))) => {
20955 let data = deserializer.finish(reader)?;
20956 Self::store_choice(&mut values, data)?;
20957 }
20958 Some(_) => unreachable!(),
20959 }
20960 Ok(match artifact {
20961 DeserializerArtifact::None => unreachable!(),
20962 DeserializerArtifact::Data(data) => {
20963 Self::store_choice(&mut values, data)?;
20964 let data = Self::Choice(values, None).finish(reader)?;
20965 *self = Self::Done__(data);
20966 ElementHandlerOutput::Break { event, allow_any }
20967 }
20968 DeserializerArtifact::Deserializer(deserializer) => {
20969 *self = Self::Choice(values, Some(deserializer));
20970 ElementHandlerOutput::from_event_end(event, allow_any)
20971 }
20972 })
20973 }
20974 fn handle_sequence<'de, R>(
20975 &mut self,
20976 reader: &R,
20977 mut values: Option<super::GroupType>,
20978 output: DeserializerOutput<'de, super::GroupType>,
20979 fallback: &mut Option<Self>,
20980 ) -> Result<ElementHandlerOutput<'de>, Error>
20981 where
20982 R: DeserializeReader,
20983 {
20984 let DeserializerOutput {
20985 artifact,
20986 event,
20987 allow_any,
20988 } = output;
20989 if artifact.is_none() {
20990 *self = match fallback.take() {
20991 None => Self::Init__,
20992 Some(Self::Sequence(_, Some(deserializer))) => {
20993 Self::Sequence(values, Some(deserializer))
20994 }
20995 _ => unreachable!(),
20996 };
20997 return Ok(ElementHandlerOutput::break_(event, allow_any));
20998 }
20999 match fallback.take() {
21000 None => (),
21001 Some(Self::Sequence(_, Some(deserializer))) => {
21002 let data = deserializer.finish(reader)?;
21003 Self::store_sequence(&mut values, data)?;
21004 }
21005 Some(_) => unreachable!(),
21006 }
21007 Ok(match artifact {
21008 DeserializerArtifact::None => unreachable!(),
21009 DeserializerArtifact::Data(data) => {
21010 Self::store_sequence(&mut values, data)?;
21011 let data = Self::Sequence(values, None).finish(reader)?;
21012 *self = Self::Done__(data);
21013 ElementHandlerOutput::Break { event, allow_any }
21014 }
21015 DeserializerArtifact::Deserializer(deserializer) => {
21016 *self = Self::Sequence(values, Some(deserializer));
21017 ElementHandlerOutput::from_event_end(event, allow_any)
21018 }
21019 })
21020 }
21021 fn handle_attribute<'de, R>(
21022 &mut self,
21023 reader: &R,
21024 mut values: Option<super::AttributeType>,
21025 output: DeserializerOutput<'de, super::AttributeType>,
21026 fallback: &mut Option<Self>,
21027 ) -> Result<ElementHandlerOutput<'de>, Error>
21028 where
21029 R: DeserializeReader,
21030 {
21031 let DeserializerOutput {
21032 artifact,
21033 event,
21034 allow_any,
21035 } = output;
21036 if artifact.is_none() {
21037 *self = match fallback.take() {
21038 None => Self::Init__,
21039 Some(Self::Attribute(_, Some(deserializer))) => {
21040 Self::Attribute(values, Some(deserializer))
21041 }
21042 _ => unreachable!(),
21043 };
21044 return Ok(ElementHandlerOutput::break_(event, allow_any));
21045 }
21046 match fallback.take() {
21047 None => (),
21048 Some(Self::Attribute(_, Some(deserializer))) => {
21049 let data = deserializer.finish(reader)?;
21050 Self::store_attribute(&mut values, data)?;
21051 }
21052 Some(_) => unreachable!(),
21053 }
21054 Ok(match artifact {
21055 DeserializerArtifact::None => unreachable!(),
21056 DeserializerArtifact::Data(data) => {
21057 Self::store_attribute(&mut values, data)?;
21058 let data = Self::Attribute(values, None).finish(reader)?;
21059 *self = Self::Done__(data);
21060 ElementHandlerOutput::Break { event, allow_any }
21061 }
21062 DeserializerArtifact::Deserializer(deserializer) => {
21063 *self = Self::Attribute(values, Some(deserializer));
21064 ElementHandlerOutput::from_event_end(event, allow_any)
21065 }
21066 })
21067 }
21068 fn handle_attribute_group<'de, R>(
21069 &mut self,
21070 reader: &R,
21071 mut values: Option<super::AttributeGroupType>,
21072 output: DeserializerOutput<'de, super::AttributeGroupType>,
21073 fallback: &mut Option<Self>,
21074 ) -> Result<ElementHandlerOutput<'de>, Error>
21075 where
21076 R: DeserializeReader,
21077 {
21078 let DeserializerOutput {
21079 artifact,
21080 event,
21081 allow_any,
21082 } = output;
21083 if artifact.is_none() {
21084 *self = match fallback.take() {
21085 None => Self::Init__,
21086 Some(Self::AttributeGroup(_, Some(deserializer))) => {
21087 Self::AttributeGroup(values, Some(deserializer))
21088 }
21089 _ => unreachable!(),
21090 };
21091 return Ok(ElementHandlerOutput::break_(event, allow_any));
21092 }
21093 match fallback.take() {
21094 None => (),
21095 Some(Self::AttributeGroup(_, Some(deserializer))) => {
21096 let data = deserializer.finish(reader)?;
21097 Self::store_attribute_group(&mut values, data)?;
21098 }
21099 Some(_) => unreachable!(),
21100 }
21101 Ok(match artifact {
21102 DeserializerArtifact::None => unreachable!(),
21103 DeserializerArtifact::Data(data) => {
21104 Self::store_attribute_group(&mut values, data)?;
21105 let data = Self::AttributeGroup(values, None).finish(reader)?;
21106 *self = Self::Done__(data);
21107 ElementHandlerOutput::Break { event, allow_any }
21108 }
21109 DeserializerArtifact::Deserializer(deserializer) => {
21110 *self = Self::AttributeGroup(values, Some(deserializer));
21111 ElementHandlerOutput::from_event_end(event, allow_any)
21112 }
21113 })
21114 }
21115 fn handle_any_attribute<'de, R>(
21116 &mut self,
21117 reader: &R,
21118 mut values: Option<super::AnyAttribute>,
21119 output: DeserializerOutput<'de, super::AnyAttribute>,
21120 fallback: &mut Option<Self>,
21121 ) -> Result<ElementHandlerOutput<'de>, Error>
21122 where
21123 R: DeserializeReader,
21124 {
21125 let DeserializerOutput {
21126 artifact,
21127 event,
21128 allow_any,
21129 } = output;
21130 if artifact.is_none() {
21131 *self = match fallback.take() {
21132 None => Self::Init__,
21133 Some(Self::AnyAttribute(_, Some(deserializer))) => {
21134 Self::AnyAttribute(values, Some(deserializer))
21135 }
21136 _ => unreachable!(),
21137 };
21138 return Ok(ElementHandlerOutput::break_(event, allow_any));
21139 }
21140 match fallback.take() {
21141 None => (),
21142 Some(Self::AnyAttribute(_, Some(deserializer))) => {
21143 let data = deserializer.finish(reader)?;
21144 Self::store_any_attribute(&mut values, data)?;
21145 }
21146 Some(_) => unreachable!(),
21147 }
21148 Ok(match artifact {
21149 DeserializerArtifact::None => unreachable!(),
21150 DeserializerArtifact::Data(data) => {
21151 Self::store_any_attribute(&mut values, data)?;
21152 let data = Self::AnyAttribute(values, None).finish(reader)?;
21153 *self = Self::Done__(data);
21154 ElementHandlerOutput::Break { event, allow_any }
21155 }
21156 DeserializerArtifact::Deserializer(deserializer) => {
21157 *self = Self::AnyAttribute(values, Some(deserializer));
21158 ElementHandlerOutput::from_event_end(event, allow_any)
21159 }
21160 })
21161 }
21162 fn handle_assert<'de, R>(
21163 &mut self,
21164 reader: &R,
21165 mut values: Option<super::AssertionType>,
21166 output: DeserializerOutput<'de, super::AssertionType>,
21167 fallback: &mut Option<Self>,
21168 ) -> Result<ElementHandlerOutput<'de>, Error>
21169 where
21170 R: DeserializeReader,
21171 {
21172 let DeserializerOutput {
21173 artifact,
21174 event,
21175 allow_any,
21176 } = output;
21177 if artifact.is_none() {
21178 *self = match fallback.take() {
21179 None => Self::Init__,
21180 Some(Self::Assert(_, Some(deserializer))) => {
21181 Self::Assert(values, Some(deserializer))
21182 }
21183 _ => unreachable!(),
21184 };
21185 return Ok(ElementHandlerOutput::break_(event, allow_any));
21186 }
21187 match fallback.take() {
21188 None => (),
21189 Some(Self::Assert(_, Some(deserializer))) => {
21190 let data = deserializer.finish(reader)?;
21191 Self::store_assert(&mut values, data)?;
21192 }
21193 Some(_) => unreachable!(),
21194 }
21195 Ok(match artifact {
21196 DeserializerArtifact::None => unreachable!(),
21197 DeserializerArtifact::Data(data) => {
21198 Self::store_assert(&mut values, data)?;
21199 let data = Self::Assert(values, None).finish(reader)?;
21200 *self = Self::Done__(data);
21201 ElementHandlerOutput::Break { event, allow_any }
21202 }
21203 DeserializerArtifact::Deserializer(deserializer) => {
21204 *self = Self::Assert(values, Some(deserializer));
21205 ElementHandlerOutput::from_event_end(event, allow_any)
21206 }
21207 })
21208 }
21209 }
21210 impl<'de> Deserializer<'de, super::ExtensionTypeContent> for ExtensionTypeContentDeserializer {
21211 fn init<R>(
21212 reader: &R,
21213 event: Event<'de>,
21214 ) -> DeserializerResult<'de, super::ExtensionTypeContent>
21215 where
21216 R: DeserializeReader,
21217 {
21218 let deserializer = Self::Init__;
21219 let mut output = deserializer.next(reader, event)?;
21220 output.artifact = match output.artifact {
21221 DeserializerArtifact::Deserializer(Self::Init__) => DeserializerArtifact::None,
21222 artifact => artifact,
21223 };
21224 Ok(output)
21225 }
21226 fn next<R>(
21227 mut self,
21228 reader: &R,
21229 event: Event<'de>,
21230 ) -> DeserializerResult<'de, super::ExtensionTypeContent>
21231 where
21232 R: DeserializeReader,
21233 {
21234 let mut event = event;
21235 let mut fallback = None;
21236 let (event, allow_any) = loop {
21237 let state = replace(&mut self, Self::Unknown__);
21238 event = match (state, event) {
21239 (Self::Annotation(values, Some(deserializer)), event) => {
21240 let output = deserializer.next(reader, event)?;
21241 match self.handle_annotation(reader, values, output, &mut fallback)? {
21242 ElementHandlerOutput::Break { event, allow_any } => {
21243 break (event, allow_any)
21244 }
21245 ElementHandlerOutput::Continue { event, .. } => event,
21246 }
21247 }
21248 (Self::OpenContent(values, Some(deserializer)), event) => {
21249 let output = deserializer.next(reader, event)?;
21250 match self.handle_open_content(reader, values, output, &mut fallback)? {
21251 ElementHandlerOutput::Break { event, allow_any } => {
21252 break (event, allow_any)
21253 }
21254 ElementHandlerOutput::Continue { event, .. } => event,
21255 }
21256 }
21257 (Self::Group(values, Some(deserializer)), event) => {
21258 let output = deserializer.next(reader, event)?;
21259 match self.handle_group(reader, values, output, &mut fallback)? {
21260 ElementHandlerOutput::Break { event, allow_any } => {
21261 break (event, allow_any)
21262 }
21263 ElementHandlerOutput::Continue { event, .. } => event,
21264 }
21265 }
21266 (Self::All(values, Some(deserializer)), event) => {
21267 let output = deserializer.next(reader, event)?;
21268 match self.handle_all(reader, values, output, &mut fallback)? {
21269 ElementHandlerOutput::Break { event, allow_any } => {
21270 break (event, allow_any)
21271 }
21272 ElementHandlerOutput::Continue { event, .. } => event,
21273 }
21274 }
21275 (Self::Choice(values, Some(deserializer)), event) => {
21276 let output = deserializer.next(reader, event)?;
21277 match self.handle_choice(reader, values, output, &mut fallback)? {
21278 ElementHandlerOutput::Break { event, allow_any } => {
21279 break (event, allow_any)
21280 }
21281 ElementHandlerOutput::Continue { event, .. } => event,
21282 }
21283 }
21284 (Self::Sequence(values, Some(deserializer)), event) => {
21285 let output = deserializer.next(reader, event)?;
21286 match self.handle_sequence(reader, values, output, &mut fallback)? {
21287 ElementHandlerOutput::Break { event, allow_any } => {
21288 break (event, allow_any)
21289 }
21290 ElementHandlerOutput::Continue { event, .. } => event,
21291 }
21292 }
21293 (Self::Attribute(values, Some(deserializer)), event) => {
21294 let output = deserializer.next(reader, event)?;
21295 match self.handle_attribute(reader, values, output, &mut fallback)? {
21296 ElementHandlerOutput::Break { event, allow_any } => {
21297 break (event, allow_any)
21298 }
21299 ElementHandlerOutput::Continue { event, .. } => event,
21300 }
21301 }
21302 (Self::AttributeGroup(values, Some(deserializer)), event) => {
21303 let output = deserializer.next(reader, event)?;
21304 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
21305 ElementHandlerOutput::Break { event, allow_any } => {
21306 break (event, allow_any)
21307 }
21308 ElementHandlerOutput::Continue { event, .. } => event,
21309 }
21310 }
21311 (Self::AnyAttribute(values, Some(deserializer)), event) => {
21312 let output = deserializer.next(reader, event)?;
21313 match self.handle_any_attribute(reader, values, output, &mut fallback)? {
21314 ElementHandlerOutput::Break { event, allow_any } => {
21315 break (event, allow_any)
21316 }
21317 ElementHandlerOutput::Continue { event, .. } => event,
21318 }
21319 }
21320 (Self::Assert(values, Some(deserializer)), event) => {
21321 let output = deserializer.next(reader, event)?;
21322 match self.handle_assert(reader, values, output, &mut fallback)? {
21323 ElementHandlerOutput::Break { event, allow_any } => {
21324 break (event, allow_any)
21325 }
21326 ElementHandlerOutput::Continue { event, .. } => event,
21327 }
21328 }
21329 (state, event @ Event::End(_)) => {
21330 return Ok(DeserializerOutput {
21331 artifact: DeserializerArtifact::Data(state.finish(reader)?),
21332 event: DeserializerEvent::Continue(event),
21333 allow_any: false,
21334 });
21335 }
21336 (Self::Init__, event) => {
21337 match self.find_suitable(reader, event, &mut fallback)? {
21338 ElementHandlerOutput::Break { event, allow_any } => {
21339 break (event, allow_any)
21340 }
21341 ElementHandlerOutput::Continue { event, .. } => event,
21342 }
21343 }
21344 (Self::Annotation(values, None), event) => {
21345 let output = <super::Annotation as WithDeserializer>::Deserializer::init(
21346 reader, event,
21347 )?;
21348 match self.handle_annotation(reader, values, output, &mut fallback)? {
21349 ElementHandlerOutput::Break { event, allow_any } => {
21350 break (event, allow_any)
21351 }
21352 ElementHandlerOutput::Continue { event, .. } => event,
21353 }
21354 }
21355 (Self::OpenContent(values, None), event) => {
21356 let output = <super::OpenContent as WithDeserializer>::Deserializer::init(
21357 reader, event,
21358 )?;
21359 match self.handle_open_content(reader, values, output, &mut fallback)? {
21360 ElementHandlerOutput::Break { event, allow_any } => {
21361 break (event, allow_any)
21362 }
21363 ElementHandlerOutput::Continue { event, .. } => event,
21364 }
21365 }
21366 (Self::Group(values, None), event) => {
21367 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
21368 reader, event,
21369 )?;
21370 match self.handle_group(reader, values, output, &mut fallback)? {
21371 ElementHandlerOutput::Break { event, allow_any } => {
21372 break (event, allow_any)
21373 }
21374 ElementHandlerOutput::Continue { event, .. } => event,
21375 }
21376 }
21377 (Self::All(values, None), event) => {
21378 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
21379 reader, event,
21380 )?;
21381 match self.handle_all(reader, values, output, &mut fallback)? {
21382 ElementHandlerOutput::Break { event, allow_any } => {
21383 break (event, allow_any)
21384 }
21385 ElementHandlerOutput::Continue { event, .. } => event,
21386 }
21387 }
21388 (Self::Choice(values, None), event) => {
21389 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
21390 reader, event,
21391 )?;
21392 match self.handle_choice(reader, values, output, &mut fallback)? {
21393 ElementHandlerOutput::Break { event, allow_any } => {
21394 break (event, allow_any)
21395 }
21396 ElementHandlerOutput::Continue { event, .. } => event,
21397 }
21398 }
21399 (Self::Sequence(values, None), event) => {
21400 let output = <super::GroupType as WithDeserializer>::Deserializer::init(
21401 reader, event,
21402 )?;
21403 match self.handle_sequence(reader, values, output, &mut fallback)? {
21404 ElementHandlerOutput::Break { event, allow_any } => {
21405 break (event, allow_any)
21406 }
21407 ElementHandlerOutput::Continue { event, .. } => event,
21408 }
21409 }
21410 (Self::Attribute(values, None), event) => {
21411 let output =
21412 <super::AttributeType as WithDeserializer>::Deserializer::init(
21413 reader, event,
21414 )?;
21415 match self.handle_attribute(reader, values, output, &mut fallback)? {
21416 ElementHandlerOutput::Break { event, allow_any } => {
21417 break (event, allow_any)
21418 }
21419 ElementHandlerOutput::Continue { event, .. } => event,
21420 }
21421 }
21422 (Self::AttributeGroup(values, None), event) => {
21423 let output =
21424 <super::AttributeGroupType as WithDeserializer>::Deserializer::init(
21425 reader, event,
21426 )?;
21427 match self.handle_attribute_group(reader, values, output, &mut fallback)? {
21428 ElementHandlerOutput::Break { event, allow_any } => {
21429 break (event, allow_any)
21430 }
21431 ElementHandlerOutput::Continue { event, .. } => event,
21432 }
21433 }
21434 (Self::AnyAttribute(values, None), event) => {
21435 let output = <super::AnyAttribute as WithDeserializer>::Deserializer::init(
21436 reader, event,
21437 )?;
21438 match self.handle_any_attribute(reader, values, output, &mut fallback)? {
21439 ElementHandlerOutput::Break { event, allow_any } => {
21440 break (event, allow_any)
21441 }
21442 ElementHandlerOutput::Continue { event, .. } => event,
21443 }
21444 }
21445 (Self::Assert(values, None), event) => {
21446 let output =
21447 <super::AssertionType as WithDeserializer>::Deserializer::init(
21448 reader, event,
21449 )?;
21450 match self.handle_assert(reader, values, output, &mut fallback)? {
21451 ElementHandlerOutput::Break { event, allow_any } => {
21452 break (event, allow_any)
21453 }
21454 ElementHandlerOutput::Continue { event, .. } => event,
21455 }
21456 }
21457 (s @ Self::Done__(_), event) => {
21458 self = s;
21459 break (DeserializerEvent::Continue(event), false);
21460 }
21461 (Self::Unknown__, _) => unreachable!(),
21462 }
21463 };
21464 let artifact = match self {
21465 Self::Done__(data) => DeserializerArtifact::Data(data),
21466 deserializer => DeserializerArtifact::Deserializer(deserializer),
21467 };
21468 Ok(DeserializerOutput {
21469 artifact,
21470 event,
21471 allow_any,
21472 })
21473 }
21474 fn finish<R>(self, reader: &R) -> Result<super::ExtensionTypeContent, Error>
21475 where
21476 R: DeserializeReader,
21477 {
21478 match self {
21479 Self::Init__ => Err(ErrorKind::MissingContent.into()),
21480 Self::Annotation(mut values, deserializer) => {
21481 if let Some(deserializer) = deserializer {
21482 let value = deserializer.finish(reader)?;
21483 Self::store_annotation(&mut values, value)?;
21484 }
21485 Ok(super::ExtensionTypeContent::Annotation(values.ok_or_else(
21486 || ErrorKind::MissingElement("annotation".into()),
21487 )?))
21488 }
21489 Self::OpenContent(mut values, deserializer) => {
21490 if let Some(deserializer) = deserializer {
21491 let value = deserializer.finish(reader)?;
21492 Self::store_open_content(&mut values, value)?;
21493 }
21494 Ok(super::ExtensionTypeContent::OpenContent(
21495 values.ok_or_else(|| ErrorKind::MissingElement("openContent".into()))?,
21496 ))
21497 }
21498 Self::Group(mut values, deserializer) => {
21499 if let Some(deserializer) = deserializer {
21500 let value = deserializer.finish(reader)?;
21501 Self::store_group(&mut values, value)?;
21502 }
21503 Ok(super::ExtensionTypeContent::Group(values.ok_or_else(
21504 || ErrorKind::MissingElement("group".into()),
21505 )?))
21506 }
21507 Self::All(mut values, deserializer) => {
21508 if let Some(deserializer) = deserializer {
21509 let value = deserializer.finish(reader)?;
21510 Self::store_all(&mut values, value)?;
21511 }
21512 Ok(super::ExtensionTypeContent::All(
21513 values.ok_or_else(|| ErrorKind::MissingElement("all".into()))?,
21514 ))
21515 }
21516 Self::Choice(mut values, deserializer) => {
21517 if let Some(deserializer) = deserializer {
21518 let value = deserializer.finish(reader)?;
21519 Self::store_choice(&mut values, value)?;
21520 }
21521 Ok(super::ExtensionTypeContent::Choice(values.ok_or_else(
21522 || ErrorKind::MissingElement("choice".into()),
21523 )?))
21524 }
21525 Self::Sequence(mut values, deserializer) => {
21526 if let Some(deserializer) = deserializer {
21527 let value = deserializer.finish(reader)?;
21528 Self::store_sequence(&mut values, value)?;
21529 }
21530 Ok(super::ExtensionTypeContent::Sequence(values.ok_or_else(
21531 || ErrorKind::MissingElement("sequence".into()),
21532 )?))
21533 }
21534 Self::Attribute(mut values, deserializer) => {
21535 if let Some(deserializer) = deserializer {
21536 let value = deserializer.finish(reader)?;
21537 Self::store_attribute(&mut values, value)?;
21538 }
21539 Ok(super::ExtensionTypeContent::Attribute(values.ok_or_else(
21540 || ErrorKind::MissingElement("attribute".into()),
21541 )?))
21542 }
21543 Self::AttributeGroup(mut values, deserializer) => {
21544 if let Some(deserializer) = deserializer {
21545 let value = deserializer.finish(reader)?;
21546 Self::store_attribute_group(&mut values, value)?;
21547 }
21548 Ok(super::ExtensionTypeContent::AttributeGroup(
21549 values.ok_or_else(|| ErrorKind::MissingElement("attributeGroup".into()))?,
21550 ))
21551 }
21552 Self::AnyAttribute(mut values, deserializer) => {
21553 if let Some(deserializer) = deserializer {
21554 let value = deserializer.finish(reader)?;
21555 Self::store_any_attribute(&mut values, value)?;
21556 }
21557 Ok(super::ExtensionTypeContent::AnyAttribute(
21558 values.ok_or_else(|| ErrorKind::MissingElement("anyAttribute".into()))?,
21559 ))
21560 }
21561 Self::Assert(mut values, deserializer) => {
21562 if let Some(deserializer) = deserializer {
21563 let value = deserializer.finish(reader)?;
21564 Self::store_assert(&mut values, value)?;
21565 }
21566 Ok(super::ExtensionTypeContent::Assert(values.ok_or_else(
21567 || ErrorKind::MissingElement("assert".into()),
21568 )?))
21569 }
21570 Self::Done__(data) => Ok(data),
21571 Self::Unknown__ => unreachable!(),
21572 }
21573 }
21574 }
21575 #[derive(Debug)]
21576 pub struct FieldDeserializer {
21577 id: Option<String>,
21578 xpath: String,
21579 xpath_default_namespace: Option<super::XpathDefaultNamespaceType>,
21580 annotation: Option<super::Annotation>,
21581 state: Box<FieldDeserializerState>,
21582 }
21583 #[derive(Debug)]
21584 enum FieldDeserializerState {
21585 Init__,
21586 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
21587 Done__,
21588 Unknown__,
21589 }
21590 impl FieldDeserializer {
21591 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
21592 where
21593 R: DeserializeReader,
21594 {
21595 let mut id: Option<String> = None;
21596 let mut xpath: Option<String> = None;
21597 let mut xpath_default_namespace: Option<super::XpathDefaultNamespaceType> = None;
21598 for attrib in filter_xmlns_attributes(bytes_start) {
21599 let attrib = attrib?;
21600 if matches!(
21601 reader.resolve_local_name(attrib.key, &super::NS_XS),
21602 Some(b"id")
21603 ) {
21604 reader.read_attrib(&mut id, b"id", &attrib.value)?;
21605 } else if matches!(
21606 reader.resolve_local_name(attrib.key, &super::NS_XS),
21607 Some(b"xpath")
21608 ) {
21609 reader.read_attrib(&mut xpath, b"xpath", &attrib.value)?;
21610 } else if matches!(
21611 reader.resolve_local_name(attrib.key, &super::NS_XS),
21612 Some(b"xpathDefaultNamespace")
21613 ) {
21614 reader.read_attrib(
21615 &mut xpath_default_namespace,
21616 b"xpathDefaultNamespace",
21617 &attrib.value,
21618 )?;
21619 }
21620 }
21621 Ok(Self {
21622 id: id,
21623 xpath: xpath
21624 .ok_or_else(|| reader.map_error(ErrorKind::MissingAttribute("xpath".into())))?,
21625 xpath_default_namespace: xpath_default_namespace,
21626 annotation: None,
21627 state: Box::new(FieldDeserializerState::Init__),
21628 })
21629 }
21630 fn finish_state<R>(
21631 &mut self,
21632 reader: &R,
21633 state: FieldDeserializerState,
21634 ) -> Result<(), Error>
21635 where
21636 R: DeserializeReader,
21637 {
21638 use FieldDeserializerState as S;
21639 match state {
21640 S::Annotation(Some(deserializer)) => {
21641 self.store_annotation(deserializer.finish(reader)?)?
21642 }
21643 _ => (),
21644 }
21645 Ok(())
21646 }
21647 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
21648 if self.annotation.is_some() {
21649 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21650 b"annotation",
21651 )))?;
21652 }
21653 self.annotation = Some(value);
21654 Ok(())
21655 }
21656 fn handle_annotation<'de, R>(
21657 &mut self,
21658 reader: &R,
21659 output: DeserializerOutput<'de, super::Annotation>,
21660 fallback: &mut Option<FieldDeserializerState>,
21661 ) -> Result<ElementHandlerOutput<'de>, Error>
21662 where
21663 R: DeserializeReader,
21664 {
21665 let DeserializerOutput {
21666 artifact,
21667 event,
21668 allow_any,
21669 } = output;
21670 if artifact.is_none() {
21671 fallback.get_or_insert(FieldDeserializerState::Annotation(None));
21672 *self.state = FieldDeserializerState::Done__;
21673 return Ok(ElementHandlerOutput::from_event(event, allow_any));
21674 }
21675 if let Some(fallback) = fallback.take() {
21676 self.finish_state(reader, fallback)?;
21677 }
21678 Ok(match artifact {
21679 DeserializerArtifact::None => unreachable!(),
21680 DeserializerArtifact::Data(data) => {
21681 self.store_annotation(data)?;
21682 *self.state = FieldDeserializerState::Done__;
21683 ElementHandlerOutput::from_event(event, allow_any)
21684 }
21685 DeserializerArtifact::Deserializer(deserializer) => {
21686 let ret = ElementHandlerOutput::from_event(event, allow_any);
21687 match &ret {
21688 ElementHandlerOutput::Continue { .. } => {
21689 fallback.get_or_insert(FieldDeserializerState::Annotation(Some(
21690 deserializer,
21691 )));
21692 *self.state = FieldDeserializerState::Done__;
21693 }
21694 ElementHandlerOutput::Break { .. } => {
21695 *self.state = FieldDeserializerState::Annotation(Some(deserializer));
21696 }
21697 }
21698 ret
21699 }
21700 })
21701 }
21702 }
21703 impl<'de> Deserializer<'de, super::Field> for FieldDeserializer {
21704 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Field>
21705 where
21706 R: DeserializeReader,
21707 {
21708 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
21709 }
21710 fn next<R>(mut self, reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::Field>
21711 where
21712 R: DeserializeReader,
21713 {
21714 use FieldDeserializerState as S;
21715 let mut event = event;
21716 let mut fallback = None;
21717 let mut allow_any_element = false;
21718 let (event, allow_any) = loop {
21719 let state = replace(&mut *self.state, S::Unknown__);
21720 event = match (state, event) {
21721 (S::Annotation(Some(deserializer)), event) => {
21722 let output = deserializer.next(reader, event)?;
21723 match self.handle_annotation(reader, output, &mut fallback)? {
21724 ElementHandlerOutput::Continue { event, allow_any } => {
21725 allow_any_element = allow_any_element || allow_any;
21726 event
21727 }
21728 ElementHandlerOutput::Break { event, allow_any } => {
21729 break (event, allow_any)
21730 }
21731 }
21732 }
21733 (_, Event::End(_)) => {
21734 if let Some(fallback) = fallback.take() {
21735 self.finish_state(reader, fallback)?;
21736 }
21737 return Ok(DeserializerOutput {
21738 artifact: DeserializerArtifact::Data(self.finish(reader)?),
21739 event: DeserializerEvent::None,
21740 allow_any: false,
21741 });
21742 }
21743 (S::Init__, event) => {
21744 fallback.get_or_insert(S::Init__);
21745 *self.state = FieldDeserializerState::Annotation(None);
21746 event
21747 }
21748 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
21749 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
21750 let output =
21751 <super::Annotation as WithDeserializer>::Deserializer::init(
21752 reader, event,
21753 )?;
21754 match self.handle_annotation(reader, output, &mut fallback)? {
21755 ElementHandlerOutput::Continue { event, allow_any } => {
21756 allow_any_element = allow_any_element || allow_any;
21757 event
21758 }
21759 ElementHandlerOutput::Break { event, allow_any } => {
21760 break (event, allow_any)
21761 }
21762 }
21763 } else {
21764 *self.state = S::Done__;
21765 allow_any_element = true;
21766 fallback.get_or_insert(S::Annotation(None));
21767 event
21768 }
21769 }
21770 (S::Done__, event) => {
21771 fallback.get_or_insert(S::Done__);
21772 break (DeserializerEvent::Continue(event), allow_any_element);
21773 }
21774 (S::Unknown__, _) => unreachable!(),
21775 (state, event) => {
21776 *self.state = state;
21777 break (DeserializerEvent::Break(event), false);
21778 }
21779 }
21780 };
21781 if let Some(fallback) = fallback {
21782 *self.state = fallback;
21783 }
21784 Ok(DeserializerOutput {
21785 artifact: DeserializerArtifact::Deserializer(self),
21786 event,
21787 allow_any,
21788 })
21789 }
21790 fn finish<R>(mut self, reader: &R) -> Result<super::Field, Error>
21791 where
21792 R: DeserializeReader,
21793 {
21794 let state = replace(&mut *self.state, FieldDeserializerState::Unknown__);
21795 self.finish_state(reader, state)?;
21796 Ok(super::Field {
21797 id: self.id,
21798 xpath: self.xpath,
21799 xpath_default_namespace: self.xpath_default_namespace,
21800 annotation: self.annotation,
21801 })
21802 }
21803 }
21804 #[derive(Debug)]
21805 pub struct FacetTypeDeserializer {
21806 id: Option<String>,
21807 value: String,
21808 fixed: bool,
21809 annotation: Option<super::Annotation>,
21810 state: Box<FacetTypeDeserializerState>,
21811 }
21812 #[derive(Debug)]
21813 enum FacetTypeDeserializerState {
21814 Init__,
21815 Annotation(Option<<super::Annotation as WithDeserializer>::Deserializer>),
21816 Done__,
21817 Unknown__,
21818 }
21819 impl FacetTypeDeserializer {
21820 fn from_bytes_start<R>(reader: &R, bytes_start: &BytesStart<'_>) -> Result<Self, Error>
21821 where
21822 R: DeserializeReader,
21823 {
21824 let mut id: Option<String> = None;
21825 let mut value: Option<String> = None;
21826 let mut fixed: Option<bool> = None;
21827 for attrib in filter_xmlns_attributes(bytes_start) {
21828 let attrib = attrib?;
21829 if matches!(
21830 reader.resolve_local_name(attrib.key, &super::NS_XS),
21831 Some(b"id")
21832 ) {
21833 reader.read_attrib(&mut id, b"id", &attrib.value)?;
21834 } else if matches!(
21835 reader.resolve_local_name(attrib.key, &super::NS_XS),
21836 Some(b"value")
21837 ) {
21838 reader.read_attrib(&mut value, b"value", &attrib.value)?;
21839 } else if matches!(
21840 reader.resolve_local_name(attrib.key, &super::NS_XS),
21841 Some(b"fixed")
21842 ) {
21843 reader.read_attrib(&mut fixed, b"fixed", &attrib.value)?;
21844 }
21845 }
21846 Ok(Self {
21847 id: id,
21848 value: value
21849 .ok_or_else(|| reader.map_error(ErrorKind::MissingAttribute("value".into())))?,
21850 fixed: fixed.unwrap_or_else(super::FacetType::default_fixed),
21851 annotation: None,
21852 state: Box::new(FacetTypeDeserializerState::Init__),
21853 })
21854 }
21855 fn finish_state<R>(
21856 &mut self,
21857 reader: &R,
21858 state: FacetTypeDeserializerState,
21859 ) -> Result<(), Error>
21860 where
21861 R: DeserializeReader,
21862 {
21863 use FacetTypeDeserializerState as S;
21864 match state {
21865 S::Annotation(Some(deserializer)) => {
21866 self.store_annotation(deserializer.finish(reader)?)?
21867 }
21868 _ => (),
21869 }
21870 Ok(())
21871 }
21872 fn store_annotation(&mut self, value: super::Annotation) -> Result<(), Error> {
21873 if self.annotation.is_some() {
21874 Err(ErrorKind::DuplicateElement(RawByteStr::from_slice(
21875 b"annotation",
21876 )))?;
21877 }
21878 self.annotation = Some(value);
21879 Ok(())
21880 }
21881 fn handle_annotation<'de, R>(
21882 &mut self,
21883 reader: &R,
21884 output: DeserializerOutput<'de, super::Annotation>,
21885 fallback: &mut Option<FacetTypeDeserializerState>,
21886 ) -> Result<ElementHandlerOutput<'de>, Error>
21887 where
21888 R: DeserializeReader,
21889 {
21890 let DeserializerOutput {
21891 artifact,
21892 event,
21893 allow_any,
21894 } = output;
21895 if artifact.is_none() {
21896 fallback.get_or_insert(FacetTypeDeserializerState::Annotation(None));
21897 *self.state = FacetTypeDeserializerState::Done__;
21898 return Ok(ElementHandlerOutput::from_event(event, allow_any));
21899 }
21900 if let Some(fallback) = fallback.take() {
21901 self.finish_state(reader, fallback)?;
21902 }
21903 Ok(match artifact {
21904 DeserializerArtifact::None => unreachable!(),
21905 DeserializerArtifact::Data(data) => {
21906 self.store_annotation(data)?;
21907 *self.state = FacetTypeDeserializerState::Done__;
21908 ElementHandlerOutput::from_event(event, allow_any)
21909 }
21910 DeserializerArtifact::Deserializer(deserializer) => {
21911 let ret = ElementHandlerOutput::from_event(event, allow_any);
21912 match &ret {
21913 ElementHandlerOutput::Continue { .. } => {
21914 fallback.get_or_insert(FacetTypeDeserializerState::Annotation(Some(
21915 deserializer,
21916 )));
21917 *self.state = FacetTypeDeserializerState::Done__;
21918 }
21919 ElementHandlerOutput::Break { .. } => {
21920 *self.state =
21921 FacetTypeDeserializerState::Annotation(Some(deserializer));
21922 }
21923 }
21924 ret
21925 }
21926 })
21927 }
21928 }
21929 impl<'de> Deserializer<'de, super::FacetType> for FacetTypeDeserializer {
21930 fn init<R>(reader: &R, event: Event<'de>) -> DeserializerResult<'de, super::FacetType>
21931 where
21932 R: DeserializeReader,
21933 {
21934 reader.init_deserializer_from_start_event(event, Self::from_bytes_start)
21935 }
21936 fn next<R>(
21937 mut self,
21938 reader: &R,
21939 event: Event<'de>,
21940 ) -> DeserializerResult<'de, super::FacetType>
21941 where
21942 R: DeserializeReader,
21943 {
21944 use FacetTypeDeserializerState as S;
21945 let mut event = event;
21946 let mut fallback = None;
21947 let mut allow_any_element = false;
21948 let (event, allow_any) = loop {
21949 let state = replace(&mut *self.state, S::Unknown__);
21950 event = match (state, event) {
21951 (S::Annotation(Some(deserializer)), event) => {
21952 let output = deserializer.next(reader, event)?;
21953 match self.handle_annotation(reader, output, &mut fallback)? {
21954 ElementHandlerOutput::Continue { event, allow_any } => {
21955 allow_any_element = allow_any_element || allow_any;
21956 event
21957 }
21958 ElementHandlerOutput::Break { event, allow_any } => {
21959 break (event, allow_any)
21960 }
21961 }
21962 }
21963 (_, Event::End(_)) => {
21964 if let Some(fallback) = fallback.take() {
21965 self.finish_state(reader, fallback)?;
21966 }
21967 return Ok(DeserializerOutput {
21968 artifact: DeserializerArtifact::Data(self.finish(reader)?),
21969 event: DeserializerEvent::None,
21970 allow_any: false,
21971 });
21972 }
21973 (S::Init__, event) => {
21974 fallback.get_or_insert(S::Init__);
21975 *self.state = FacetTypeDeserializerState::Annotation(None);
21976 event
21977 }
21978 (S::Annotation(None), event @ (Event::Start(_) | Event::Empty(_))) => {
21979 if reader.check_start_tag_name(&event, Some(&super::NS_XS), b"annotation") {
21980 let output =
21981 <super::Annotation as WithDeserializer>::Deserializer::init(
21982 reader, event,
21983 )?;
21984 match self.handle_annotation(reader, output, &mut fallback)? {
21985 ElementHandlerOutput::Continue { event, allow_any } => {
21986 allow_any_element = allow_any_element || allow_any;
21987 event
21988 }
21989 ElementHandlerOutput::Break { event, allow_any } => {
21990 break (event, allow_any)
21991 }
21992 }
21993 } else {
21994 *self.state = S::Done__;
21995 allow_any_element = true;
21996 fallback.get_or_insert(S::Annotation(None));
21997 event
21998 }
21999 }
22000 (S::Done__, event) => {
22001 fallback.get_or_insert(S::Done__);
22002 break (DeserializerEvent::Continue(event), allow_any_element);
22003 }
22004 (S::Unknown__, _) => unreachable!(),
22005 (state, event) => {
22006 *self.state = state;
22007 break (DeserializerEvent::Break(event), false);
22008 }
22009 }
22010 };
22011 if let Some(fallback) = fallback {
22012 *self.state = fallback;
22013 }
22014 Ok(DeserializerOutput {
22015 artifact: DeserializerArtifact::Deserializer(self),
22016 event,
22017 allow_any,
22018 })
22019 }
22020 fn finish<R>(mut self, reader: &R) -> Result<super::FacetType, Error>
22021 where
22022 R: DeserializeReader,
22023 {
22024 let state = replace(&mut *self.state, FacetTypeDeserializerState::Unknown__);
22025 self.finish_state(reader, state)?;
22026 Ok(super::FacetType {
22027 id: self.id,
22028 value: self.value,
22029 fixed: self.fixed,
22030 annotation: self.annotation,
22031 })
22032 }
22033 }
22034}