lumeohq / xsd-parser-rs

A xsd/wsdl => rust code generator written in rust
Apache License 2.0
95 stars 33 forks source link

Generate code from all related XSD's at once #35

Open victor-soloviev opened 4 years ago

victor-soloviev commented 4 years ago

As onvif-rs (https://github.com/lumeohq/onvif-rs) user I want all types from onvif-rs::schema fully comply with all XSD's used by onvif.xsd.

onvif.xsd dependency graph is a bit branchy and we have to reflect it in onvif_rs::schema module. To accomplish this we need to run xsd-parser-rs on all XSD's reachable from onvif.xsd and put the generated code into module structure of onvif-rs.

LeonidKrutovsky commented 4 years ago
b-2.xsd: 
targetNamespace="http://docs.oasis-open.org/wsn/b-2" 
xmlns:wsrf-bf="http://docs.oasis-open.org/wsrf/bf-2"

<xsd:complexType name="PauseFailedFaultType">
 <xsd:complexContent>
   <xsd:extension base="wsrf-bf:BaseFaultType"/>
 </xsd:complexContent>
</xsd:complexType>
LeonidKrutovsky commented 4 years ago

ref from metadatastream.xsd

<xs:complexType name="EventStream">
  <xs:choice minOccurs="0" maxOccurs="unbounded">
     <xs:element ref="wsnt:NotificationMessage"/>
     <xs:element name="Extension" type="tt:EventStreamExtension"/>
     <xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>  <!-- reserved for ONVIF -->
  </xs:choice>
</xs:complexType>

to b-2.xsd

<!-- ================== Message Helper Types  ===================== -->
  <xsd:complexType name="NotificationMessageHolderType" >
    <xsd:sequence>
      <xsd:element ref="wsnt:SubscriptionReference" 
                   minOccurs="0" maxOccurs="1" />
      <xsd:element ref="wsnt:Topic" 
                   minOccurs="0" maxOccurs="1" />
      <xsd:element ref="wsnt:ProducerReference" 
                   minOccurs="0" maxOccurs="1" />
      <xsd:element name="Message">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:any namespace="##any" processContents="lax"
                     minOccurs="1" maxOccurs="1"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:element name="NotificationMessage"
               type="wsnt:NotificationMessageHolderType"/>