<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
             xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
             xmlns:tns="http://rustybin.local/wsdl"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns:usr="http://rustybin.local/users"
             xmlns:ord="http://rustybin.local/orders"
             xmlns:sts="http://rustybin.local/status"
             xmlns:flt="http://rustybin.local/faults"
             name="RustybinService"
             targetNamespace="http://rustybin.local/wsdl">

  <types>
    <xsd:schema targetNamespace="http://rustybin.local/users" elementFormDefault="qualified">
      <xsd:element name="GetUser">
        <xsd:complexType><xsd:sequence>
          <xsd:element name="userId" type="xsd:string"/>
        </xsd:sequence></xsd:complexType>
      </xsd:element>
      <xsd:element name="GetUserResponse">
        <xsd:complexType><xsd:sequence>
          <xsd:element name="user">
            <xsd:complexType><xsd:sequence>
              <xsd:element name="id" type="xsd:string"/>
              <xsd:element name="name" type="xsd:string"/>
              <xsd:element name="email" type="xsd:string"/>
              <xsd:element name="role" type="xsd:string"/>
            </xsd:sequence></xsd:complexType>
          </xsd:element>
        </xsd:sequence></xsd:complexType>
      </xsd:element>
    </xsd:schema>
    <xsd:schema targetNamespace="http://rustybin.local/orders" elementFormDefault="qualified">
      <xsd:element name="CreateOrder">
        <xsd:complexType><xsd:sequence>
          <xsd:element name="merchantId" type="xsd:string"/>
          <xsd:element name="amount" type="xsd:decimal" minOccurs="0"/>
          <xsd:element name="currency" type="xsd:string" minOccurs="0"/>
        </xsd:sequence></xsd:complexType>
      </xsd:element>
      <xsd:element name="CreateOrderResponse">
        <xsd:complexType><xsd:sequence>
          <xsd:element name="orderId" type="xsd:string"/>
          <xsd:element name="merchantId" type="xsd:string"/>
          <xsd:element name="amount" type="xsd:decimal"/>
          <xsd:element name="currency" type="xsd:string"/>
          <xsd:element name="status" type="xsd:string"/>
          <xsd:element name="timestamp" type="xsd:dateTime"/>
        </xsd:sequence></xsd:complexType>
      </xsd:element>
    </xsd:schema>
    <xsd:schema targetNamespace="http://rustybin.local/status" elementFormDefault="qualified">
      <xsd:element name="GetStatus">
        <xsd:complexType><xsd:sequence>
          <xsd:element name="orderId" type="xsd:string" minOccurs="0"/>
        </xsd:sequence></xsd:complexType>
      </xsd:element>
      <xsd:element name="GetStatusResponse">
        <xsd:complexType><xsd:sequence>
          <xsd:element name="orderId" type="xsd:string"/>
          <xsd:element name="status" type="xsd:string"/>
          <xsd:element name="createdAt" type="xsd:dateTime"/>
          <xsd:element name="updatedAt" type="xsd:dateTime"/>
          <xsd:element name="tracking" type="xsd:string"/>
        </xsd:sequence></xsd:complexType>
      </xsd:element>
    </xsd:schema>
    <xsd:schema targetNamespace="http://rustybin.local/faults" elementFormDefault="qualified">
      <xsd:element name="error" type="xsd:string"/>
    </xsd:schema>
  </types>

  <message name="GetUserRequest"><part name="parameters" element="usr:GetUser"/></message>
  <message name="GetUserResponse"><part name="parameters" element="usr:GetUserResponse"/></message>
  <message name="CreateOrderRequest"><part name="parameters" element="ord:CreateOrder"/></message>
  <message name="CreateOrderResponse"><part name="parameters" element="ord:CreateOrderResponse"/></message>
  <message name="GetStatusRequest"><part name="parameters" element="sts:GetStatus"/></message>
  <message name="GetStatusResponse"><part name="parameters" element="sts:GetStatusResponse"/></message>
  <message name="ServiceFault"><part name="fault" element="flt:error"/></message>

  <portType name="RustybinPortType">
    <operation name="GetUser">
      <input message="tns:GetUserRequest"/>
      <output message="tns:GetUserResponse"/>
      <fault name="ServiceFault" message="tns:ServiceFault"/>
    </operation>
    <operation name="CreateOrder">
      <input message="tns:CreateOrderRequest"/>
      <output message="tns:CreateOrderResponse"/>
      <fault name="ServiceFault" message="tns:ServiceFault"/>
    </operation>
    <operation name="GetStatus">
      <input message="tns:GetStatusRequest"/>
      <output message="tns:GetStatusResponse"/>
      <fault name="ServiceFault" message="tns:ServiceFault"/>
    </operation>
  </portType>

  <binding name="RustybinBinding" type="tns:RustybinPortType">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="GetUser">
      <soap:operation soapAction="http://rustybin.local/GetUser"/>
      <input><soap:body use="literal"/></input>
      <output><soap:body use="literal"/></output>
      <fault name="ServiceFault"><soap:fault name="ServiceFault" use="literal"/></fault>
    </operation>
    <operation name="CreateOrder">
      <soap:operation soapAction="http://rustybin.local/CreateOrder"/>
      <input><soap:body use="literal"/></input>
      <output><soap:body use="literal"/></output>
      <fault name="ServiceFault"><soap:fault name="ServiceFault" use="literal"/></fault>
    </operation>
    <operation name="GetStatus">
      <soap:operation soapAction="http://rustybin.local/GetStatus"/>
      <input><soap:body use="literal"/></input>
      <output><soap:body use="literal"/></output>
      <fault name="ServiceFault"><soap:fault name="ServiceFault" use="literal"/></fault>
    </operation>
  </binding>

  <binding name="RustybinBinding12" type="tns:RustybinPortType">
    <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="GetUser">
      <soap12:operation soapAction="http://rustybin.local/GetUser"/>
      <input><soap12:body use="literal"/></input>
      <output><soap12:body use="literal"/></output>
      <fault name="ServiceFault"><soap12:fault name="ServiceFault" use="literal"/></fault>
    </operation>
    <operation name="CreateOrder">
      <soap12:operation soapAction="http://rustybin.local/CreateOrder"/>
      <input><soap12:body use="literal"/></input>
      <output><soap12:body use="literal"/></output>
      <fault name="ServiceFault"><soap12:fault name="ServiceFault" use="literal"/></fault>
    </operation>
    <operation name="GetStatus">
      <soap12:operation soapAction="http://rustybin.local/GetStatus"/>
      <input><soap12:body use="literal"/></input>
      <output><soap12:body use="literal"/></output>
      <fault name="ServiceFault"><soap12:fault name="ServiceFault" use="literal"/></fault>
    </operation>
  </binding>

  <service name="RustybinService">
    <port name="RustybinPort" binding="tns:RustybinBinding">
      <soap:address location="https://demo.rustybin.dev/soap"/>
    </port>
    <port name="RustybinPort12" binding="tns:RustybinBinding12">
      <soap12:address location="https://demo.rustybin.dev/soap"/>
    </port>
  </service>
</definitions>
