Skip to content

Compilation errors and missing attributes for complex types #17

@advolkov

Description

@advolkov

During some testing on the lib we've faced 2 problems:

Schema example:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:complexType name="ComplexElement">
        <xs:sequence>
            <xs:element name="Element" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>Some annotation</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="info" type="xs:string" minOccurs="0"/>
                    </xs:sequence>
                    <xs:attribute name="attrib" type="xs:string"/>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

The first problem is compilation errors for the above schema:

error: proc-macro derive panicked
  --> src/main.rs:11:17
   |
11 | #[derive(Debug, XmlSchema)]
   |                 ^^^^^^^^^
   |
   = help: message: not implemented
   = note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0277]: the trait bound `Element: YaDeserialize` is not satisfied
   --> src/main.rs:11:17
    |
11  | #[derive(Debug, XmlSchema)]
    |                 ^^^^^^^^^ the trait `YaDeserialize` is not implemented for `Element`
    | 
    |
101 |   fn deserialize<R: Read>(reader: &mut de::Deserializer<R>) -> Result<Self, String>;
    |                     ---- required by this bound in `deserialize`
    |
    = note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info)

Another problem seems it ignores attributes for complex types. For the schema above if I set store_generated_code, I see the following output:

#[derive(Clone, Debug, Default, PartialEq, YaDeserialize, YaSerialize)] 
pub struct ComplexElement
{ 
  #[yaserde(rename = "Element")] 
  pub element : Option < Element >, 
}
#[doc = "Some annotation"]
#[derive(Clone, Debug, Default, PartialEq, YaDeserialize, YaSerialize)] 
pub struct Element
{ 
  #[yaserde(rename = "info")] 
  pub infos : Option < Vec < String > >, 
}

There is no attribute attrib in Element.

Also, I've found this problem in the existing test (https://github.com/media-io/xml-schema/blob/master/xml_schema/tests/complex_type.rs): attribute scope is missing.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions