polyxml 0.29.0__tar.gz → 0.30.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. {polyxml-0.29.0 → polyxml-0.30.0}/Cargo.lock +6 -6
  2. {polyxml-0.29.0 → polyxml-0.30.0}/Cargo.toml +1 -1
  3. {polyxml-0.29.0 → polyxml-0.30.0}/PKG-INFO +1 -1
  4. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/codegen/cpp/mod.rs +8 -6
  5. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/codegen/csharp/mod.rs +7 -7
  6. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/codegen/go/mod.rs +7 -7
  7. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/codegen/java/codec.rs +2 -2
  8. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/codegen/java/mod.rs +3 -3
  9. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/codegen/mod.rs +3 -1
  10. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/codegen/python/mod.rs +4 -1
  11. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/codegen/rust/mod.rs +3 -0
  12. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/codegen/typescript/mod.rs +3 -0
  13. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/ir/mod.rs +13 -0
  14. {polyxml-0.29.0 → polyxml-0.30.0}/pyproject.toml +1 -1
  15. {polyxml-0.29.0 → polyxml-0.30.0}/README.md +0 -0
  16. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/Cargo.toml +0 -0
  17. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/README.md +0 -0
  18. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/benches/core_benchmarks.rs +0 -0
  19. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/benches/support/tag_dispatch_fixtures.rs +0 -0
  20. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/benches/tag_dispatch.rs +0 -0
  21. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/codegen/java/models.rs +0 -0
  22. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/codegen/python/aot.rs +0 -0
  23. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/converters.rs +0 -0
  24. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/error.rs +0 -0
  25. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/ir/tarjan.rs +0 -0
  26. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/json.rs +0 -0
  27. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/lib.rs +0 -0
  28. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/parser.rs +0 -0
  29. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/schema.rs +0 -0
  30. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/schema_parser/mod.rs +0 -0
  31. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/serializer.rs +0 -0
  32. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/transcoder.rs +0 -0
  33. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/src/value.rs +0 -0
  34. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/fixtures/lexical_union.xsd +0 -0
  35. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/fixtures/mixed_content.xsd +0 -0
  36. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_adversarial_identifiers.rs +0 -0
  37. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_conformance.rs +0 -0
  38. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_core.rs +0 -0
  39. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_cpp_codegen.rs +0 -0
  40. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_csharp_codegen.rs +0 -0
  41. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_go_codegen.rs +0 -0
  42. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_java_codegen.rs +0 -0
  43. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_json.rs +0 -0
  44. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_lexical_union_codegen.rs +0 -0
  45. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_mixed_content.rs +0 -0
  46. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_pattern_codegen.rs +0 -0
  47. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_python_codegen.rs +0 -0
  48. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_rust_codecs.rs +0 -0
  49. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_rust_codegen.rs +0 -0
  50. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_schema_audit.rs +0 -0
  51. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_schema_ir.rs +0 -0
  52. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_security.rs +0 -0
  53. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_transcoder.rs +0 -0
  54. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_ts_codegen.rs +0 -0
  55. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_unbounded_choice.rs +0 -0
  56. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-core/tests/test_xsi_type.rs +0 -0
  57. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-python/Cargo.toml +0 -0
  58. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-python/README.md +0 -0
  59. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-python/benches/aot_vs_dataclass.py +0 -0
  60. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-python/src/lib.rs +0 -0
  61. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-python/tests/test_conformance.py +0 -0
  62. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-python/tests/test_generated_models.py +0 -0
  63. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-python/tests/test_json.py +0 -0
  64. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-python/tests/test_mixed_content.py +0 -0
  65. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-python/tests/test_polyxml.py +0 -0
  66. {polyxml-0.29.0 → polyxml-0.30.0}/crates/polyxml-python/tests/test_xsi_type.py +0 -0
  67. {polyxml-0.29.0 → polyxml-0.30.0}/python/polyxml/AGENT_GUIDE.md +0 -0
  68. {polyxml-0.29.0 → polyxml-0.30.0}/python/polyxml/__init__.py +0 -0
  69. {polyxml-0.29.0 → polyxml-0.30.0}/python/polyxml/compat/__init__.py +0 -0
  70. {polyxml-0.29.0 → polyxml-0.30.0}/python/polyxml/compat/xsdata.py +0 -0
  71. {polyxml-0.29.0 → polyxml-0.30.0}/python/polyxml/py.typed +0 -0
@@ -608,7 +608,7 @@ dependencies = [
608
608
 
609
609
  [[package]]
610
610
  name = "polyxml"
611
- version = "0.29.0"
611
+ version = "0.30.0"
612
612
  dependencies = [
613
613
  "criterion",
614
614
  "heck",
@@ -629,14 +629,14 @@ dependencies = [
629
629
 
630
630
  [[package]]
631
631
  name = "polyxml-c"
632
- version = "0.29.0"
632
+ version = "0.30.0"
633
633
  dependencies = [
634
634
  "polyxml",
635
635
  ]
636
636
 
637
637
  [[package]]
638
638
  name = "polyxml-cli"
639
- version = "0.29.0"
639
+ version = "0.30.0"
640
640
  dependencies = [
641
641
  "clap",
642
642
  "glob",
@@ -650,7 +650,7 @@ dependencies = [
650
650
 
651
651
  [[package]]
652
652
  name = "polyxml-js"
653
- version = "0.29.0"
653
+ version = "0.30.0"
654
654
  dependencies = [
655
655
  "napi",
656
656
  "napi-build",
@@ -660,7 +660,7 @@ dependencies = [
660
660
 
661
661
  [[package]]
662
662
  name = "polyxml-python"
663
- version = "0.29.0"
663
+ version = "0.30.0"
664
664
  dependencies = [
665
665
  "lexical-core",
666
666
  "polyxml",
@@ -670,7 +670,7 @@ dependencies = [
670
670
 
671
671
  [[package]]
672
672
  name = "polyxml-wasm"
673
- version = "0.29.0"
673
+ version = "0.30.0"
674
674
  dependencies = [
675
675
  "polyxml",
676
676
  "quick-xml",
@@ -3,7 +3,7 @@ resolver = "2"
3
3
  members = ["crates/polyxml-core", "crates/polyxml-python"]
4
4
 
5
5
  [workspace.package]
6
- version = "0.29.0"
6
+ version = "0.30.0"
7
7
  edition = "2021"
8
8
  rust-version = "1.80"
9
9
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: polyxml
3
- Version: 0.29.0
3
+ Version: 0.30.0
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -497,7 +497,7 @@ endif()
497
497
 
498
498
  fn emit_includes(&self, out: &mut String, ir: &SchemaIR) {
499
499
  if self.options.validate_facets
500
- && ir.types.values().any(|t| match t {
500
+ && ir.emitted_types().any(|t| match t {
501
501
  TypeDef::Simple(s) => !s.facets.patterns.is_empty(),
502
502
  TypeDef::Struct(s) => s
503
503
  .fields
@@ -528,7 +528,7 @@ endif()
528
528
  writeln!(out, "\n// Glaze compile-time reflection metadata\n").unwrap();
529
529
 
530
530
  // 1. Enums
531
- for type_def in ir.types.values() {
531
+ for type_def in ir.emitted_types() {
532
532
  if let TypeDef::Enum(enum_def) = type_def {
533
533
  let enum_name = type_ident(&enum_def.qname);
534
534
  let full_type = format!("{}::{}", ns, enum_name);
@@ -635,8 +635,7 @@ concept XmlModel = requires(T a) {{
635
635
 
636
636
  fn emit_forward_declarations(&self, out: &mut String, ir: &SchemaIR) {
637
637
  let mut structs: Vec<String> = ir
638
- .types
639
- .values()
638
+ .emitted_types()
640
639
  .filter_map(|t| {
641
640
  if let TypeDef::Struct(s) = t {
642
641
  Some(type_ident(&s.qname))
@@ -658,14 +657,14 @@ concept XmlModel = requires(T a) {{
658
657
 
659
658
  fn emit_types(&self, out: &mut String, ir: &SchemaIR) {
660
659
  // Emit simple type aliases first
661
- for type_def in ir.types.values() {
660
+ for type_def in ir.emitted_types() {
662
661
  if let TypeDef::Simple(simple) = type_def {
663
662
  self.emit_simple_type(out, simple, ir);
664
663
  }
665
664
  }
666
665
 
667
666
  // Emit enums next
668
- for type_def in ir.types.values() {
667
+ for type_def in ir.emitted_types() {
669
668
  if let TypeDef::Enum(enum_def) = type_def {
670
669
  self.emit_enum(out, enum_def);
671
670
  }
@@ -675,6 +674,9 @@ concept XmlModel = requires(T a) {{
675
674
  let sorted_qnames = self.topological_sort_types(ir);
676
675
 
677
676
  for qname in sorted_qnames {
677
+ if ir.is_external_type(&qname) {
678
+ continue;
679
+ }
678
680
  if let Some(type_def) = ir.types.get(&qname) {
679
681
  match type_def {
680
682
  TypeDef::Union(u) => self.emit_union(out, u),
@@ -307,7 +307,7 @@ impl CSharpCodegen {
307
307
  };
308
308
 
309
309
  // Emit SimpleTypes / Enums
310
- for def in ir.types.values() {
310
+ for def in ir.emitted_types() {
311
311
  if let TypeDef::Enum(e) = def {
312
312
  self.emit_enum(&mut out, e, indent);
313
313
  } else if let TypeDef::Simple(s) = def {
@@ -320,14 +320,14 @@ impl CSharpCodegen {
320
320
  }
321
321
 
322
322
  // Emit Unions (Choices)
323
- for def in ir.types.values() {
323
+ for def in ir.emitted_types() {
324
324
  if let TypeDef::Union(u) = def {
325
325
  self.emit_union(&mut out, u, ir, indent);
326
326
  }
327
327
  }
328
328
 
329
329
  // Emit Structs (ComplexTypes)
330
- for def in ir.types.values() {
330
+ for def in ir.emitted_types() {
331
331
  if let TypeDef::Struct(s) = def {
332
332
  self.emit_struct(&mut out, s, ir, indent);
333
333
  }
@@ -373,7 +373,7 @@ impl CSharpCodegen {
373
373
  .unwrap();
374
374
 
375
375
  // Enums
376
- for def in ir.types.values() {
376
+ for def in ir.emitted_types() {
377
377
  if let TypeDef::Enum(e) = def {
378
378
  let name = type_ident(&e.qname);
379
379
  writeln!(out, "{}[JsonSerializable(typeof({}))]", indent, name).unwrap();
@@ -381,7 +381,7 @@ impl CSharpCodegen {
381
381
  }
382
382
 
383
383
  // Simple types
384
- for def in ir.types.values() {
384
+ for def in ir.emitted_types() {
385
385
  if let TypeDef::Simple(s) = def {
386
386
  let name = type_ident(&s.qname);
387
387
  writeln!(out, "{}[JsonSerializable(typeof({}))]", indent, name).unwrap();
@@ -389,7 +389,7 @@ impl CSharpCodegen {
389
389
  }
390
390
 
391
391
  // Unions
392
- for def in ir.types.values() {
392
+ for def in ir.emitted_types() {
393
393
  if let TypeDef::Union(u) = def {
394
394
  let name = type_ident(&u.qname);
395
395
  writeln!(out, "{}[JsonSerializable(typeof({}))]", indent, name).unwrap();
@@ -398,7 +398,7 @@ impl CSharpCodegen {
398
398
  }
399
399
 
400
400
  // Structs
401
- for def in ir.types.values() {
401
+ for def in ir.emitted_types() {
402
402
  if let TypeDef::Struct(s) = def {
403
403
  let name = type_ident(&s.qname);
404
404
  writeln!(out, "{}[JsonSerializable(typeof({}))]", indent, name).unwrap();
@@ -255,7 +255,7 @@ impl GoCodegen {
255
255
  set_type_name_map(build_type_name_map(ir, to_go_type_name));
256
256
  let mut body = String::new();
257
257
  let mut has_time = false;
258
- let lexical_patterns = ir.types.values().any(|def| match def {
258
+ let lexical_patterns = ir.emitted_types().any(|def| match def {
259
259
  TypeDef::Union(u) if u.is_lexical() => u.branches.iter().any(|branch| {
260
260
  matches!(&branch.type_ref, TypeRef::Named(q) if matches!(ir.types.get(q), Some(TypeDef::Simple(s)) if !s.facets.patterns.is_empty()))
261
261
  }),
@@ -263,7 +263,7 @@ impl GoCodegen {
263
263
  });
264
264
  let has_patterns = lexical_patterns
265
265
  || (self.options.validate_facets
266
- && ir.types.values().any(|t| match t {
266
+ && ir.emitted_types().any(|t| match t {
267
267
  TypeDef::Simple(s) => !s.facets.patterns.is_empty(),
268
268
  TypeDef::Struct(s) => s
269
269
  .fields
@@ -276,7 +276,7 @@ impl GoCodegen {
276
276
  let mut has_xml = self.options.emit_xml_tags;
277
277
 
278
278
  // Check types for time.Time
279
- for type_def in ir.types.values() {
279
+ for type_def in ir.emitted_types() {
280
280
  match type_def {
281
281
  TypeDef::Struct(s) => {
282
282
  if s.is_mixed && self.options.emit_xml_tags {
@@ -421,28 +421,28 @@ impl GoCodegen {
421
421
 
422
422
  fn emit_types(&self, out: &mut String, ir: &SchemaIR) {
423
423
  // Emit simple types
424
- for type_def in ir.types.values() {
424
+ for type_def in ir.emitted_types() {
425
425
  if let TypeDef::Simple(simple) = type_def {
426
426
  self.emit_simple_type(out, simple, ir);
427
427
  }
428
428
  }
429
429
 
430
430
  // Emit enums
431
- for type_def in ir.types.values() {
431
+ for type_def in ir.emitted_types() {
432
432
  if let TypeDef::Enum(enum_def) = type_def {
433
433
  self.emit_enum(out, enum_def);
434
434
  }
435
435
  }
436
436
 
437
437
  // Emit choices (unions)
438
- for type_def in ir.types.values() {
438
+ for type_def in ir.emitted_types() {
439
439
  if let TypeDef::Union(u) = type_def {
440
440
  self.emit_union(out, u, ir);
441
441
  }
442
442
  }
443
443
 
444
444
  // Emit structs
445
- for type_def in ir.types.values() {
445
+ for type_def in ir.emitted_types() {
446
446
  if let TypeDef::Struct(s) = type_def {
447
447
  self.emit_struct(out, s, ir);
448
448
  }
@@ -20,8 +20,8 @@ impl JavaCodegen {
20
20
  _ => Ok(()),
21
21
  }
22
22
  }
23
- let names: HashSet<_> = ir.types.values().map(|d| type_ident(d.qname())).collect();
24
- for def in ir.types.values() {
23
+ let names: HashSet<_> = ir.emitted_types().map(|d| type_ident(d.qname())).collect();
24
+ for def in ir.emitted_types() {
25
25
  let name = type_ident(def.qname());
26
26
  if names.contains(&format!("{name}Codec")) {
27
27
  return Err(format!(
@@ -260,7 +260,7 @@ impl JavaCodegen {
260
260
  set_type_name_map(build_type_name_map(ir, to_java_type_name));
261
261
  let mut files = Vec::new();
262
262
 
263
- for type_def in ir.types.values() {
263
+ for type_def in ir.emitted_types() {
264
264
  let (type_name, content) = self.generate_single_type(type_def, false, ir);
265
265
  let filename = format!("{}.java", type_name);
266
266
  files.push((filename, content));
@@ -285,7 +285,7 @@ impl JavaCodegen {
285
285
  let _ = writeln!(out, "public final class {} {{", outer_class_name);
286
286
  let _ = writeln!(out, " private {}() {{}}\n", outer_class_name);
287
287
 
288
- for type_def in ir.types.values() {
288
+ for type_def in ir.emitted_types() {
289
289
  let (_, body) = self.generate_type_body(type_def, " ", ir);
290
290
  out.push_str(&body);
291
291
  out.push('\n');
@@ -316,7 +316,7 @@ impl JavaCodegen {
316
316
  }
317
317
 
318
318
  if self.options.emit_direct_codec {
319
- for def in ir.types.values() {
319
+ for def in ir.emitted_types() {
320
320
  let codec = self.generate_codec(def, ir);
321
321
  let body = &codec[codec.find("public final class ").unwrap()..];
322
322
  out.push_str(&body.replacen(
@@ -85,7 +85,9 @@ pub fn build_type_name_map<F: Fn(&str) -> String>(
85
85
  ) -> HashMap<QName, String> {
86
86
  let mut taken: HashSet<String> = HashSet::new();
87
87
  let mut map = HashMap::new();
88
- for qname in ir.types.keys() {
88
+ let mut keys: Vec<&QName> = ir.types.keys().collect();
89
+ keys.sort_by_key(|q| (ir.is_external_type(q), *q));
90
+ for qname in keys {
89
91
  let base = name_of(&qname.local);
90
92
  let mut name = base.clone();
91
93
  let mut n = 2u32;
@@ -276,6 +276,9 @@ impl PythonCodegen {
276
276
  let sorted_types = self.order_types(ir);
277
277
 
278
278
  for type_def in sorted_types {
279
+ if ir.is_external_type(type_def.qname()) {
280
+ continue;
281
+ }
279
282
  out.push('\n');
280
283
  match type_def {
281
284
  TypeDef::Simple(s) => self.emit_simple_type(&mut out, s),
@@ -298,7 +301,7 @@ impl PythonCodegen {
298
301
  let mut has_decimal = false;
299
302
  let mut has_annotated = false;
300
303
 
301
- for type_def in ir.types.values() {
304
+ for type_def in ir.emitted_types() {
302
305
  match type_def {
303
306
  TypeDef::Struct(_) => has_structs = true,
304
307
  TypeDef::Enum(_) => has_enums = true,
@@ -259,6 +259,9 @@ impl RustCodegen {
259
259
  }
260
260
 
261
261
  for type_def in &sorted_types {
262
+ if ir.is_external_type(type_def.qname()) {
263
+ continue;
264
+ }
262
265
  out.push('\n');
263
266
  match type_def {
264
267
  TypeDef::Simple(s) => self.emit_simple_type(&mut out, s, &types_with_lifetime),
@@ -221,6 +221,9 @@ impl TypeScriptCodegen {
221
221
 
222
222
  let ordered = self.order_types(ir);
223
223
  for type_def in ordered {
224
+ if ir.is_external_type(type_def.qname()) {
225
+ continue;
226
+ }
224
227
  match type_def {
225
228
  TypeDef::Simple(s) => {
226
229
  let mut simple = s.clone();
@@ -457,9 +457,22 @@ pub struct SchemaIR {
457
457
  pub types: BTreeMap<QName, TypeDef>,
458
458
  pub elements: BTreeMap<QName, ElementDef>,
459
459
  pub substitution_groups: HashMap<QName, Vec<QName>>,
460
+ /// Type owners outside the module currently being emitted. Definitions
461
+ /// remain in `types` so generators can resolve their field semantics.
462
+ #[serde(default)]
463
+ pub external_types: BTreeMap<QName, String>,
460
464
  }
461
465
 
462
466
  impl SchemaIR {
467
+ pub fn is_external_type(&self, qname: &QName) -> bool {
468
+ self.external_types.contains_key(qname)
469
+ }
470
+
471
+ pub fn emitted_types(&self) -> impl Iterator<Item = &TypeDef> {
472
+ self.types
473
+ .values()
474
+ .filter(|ty| !self.is_external_type(ty.qname()))
475
+ }
463
476
  pub fn new() -> Self {
464
477
  Self::default()
465
478
  }
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "polyxml"
7
- version = "0.29.0"
7
+ version = "0.30.0"
8
8
  description = "High-performance, polyglot XML data-binding engine built in Rust"
9
9
  authors = [
10
10
  { name = "Bailey Nguyen", email = "bailey.tan.nguyen@gmail.com" }
File without changes