Skip to content

Namespaces is not preserved or compared for enum values #217

@vessd

Description

@vessd

Enum values that include a namespace prefix (e.g. tns:Sender) are currently treated as literal strings during serialization/deserialization.

https://www.w3.org/2003/05/soap-envelope/soap-envelope.xsd

  <xs:simpleType name="faultcodeEnum">
    <xs:restriction base="xs:QName">
      <xs:enumeration value="tns:DataEncodingUnknown"/>
      <xs:enumeration value="tns:MustUnderstand"/>
      <xs:enumeration value="tns:Receiver"/>
      <xs:enumeration value="tns:Sender"/>
      <xs:enumeration value="tns:VersionMismatch"/>
    </xs:restriction>
  </xs:simpleType>

Code gen for quick-xml

#[derive(Debug)]
pub enum FaultcodeEnum {
    TnsDataEncodingUnknown,
    TnsMustUnderstand,
    TnsReceiver,
    TnsSender,
    TnsVersionMismatch,
}
impl SerializeBytes for FaultcodeEnum {
    fn serialize_bytes(&self, helper: &mut SerializeHelper) -> Result<Option<Cow<'_, str>>, Error> {
        match self {
            Self::TnsDataEncodingUnknown => Ok(Some(Cow::Borrowed("tns:DataEncodingUnknown"))),
            Self::TnsMustUnderstand => Ok(Some(Cow::Borrowed("tns:MustUnderstand"))),
            Self::TnsReceiver => Ok(Some(Cow::Borrowed("tns:Receiver"))),
            Self::TnsSender => Ok(Some(Cow::Borrowed("tns:Sender"))),
            Self::TnsVersionMismatch => Ok(Some(Cow::Borrowed("tns:VersionMismatch"))),
        }
    }
}
impl DeserializeBytes for FaultcodeEnum {
    fn deserialize_bytes(helper: &mut DeserializeHelper, bytes: &[u8]) -> Result<Self, Error> {
        match bytes {
            b"tns:DataEncodingUnknown" => Ok(Self::TnsDataEncodingUnknown),
            b"tns:MustUnderstand" => Ok(Self::TnsMustUnderstand),
            b"tns:Receiver" => Ok(Self::TnsReceiver),
            b"tns:Sender" => Ok(Self::TnsSender),
            b"tns:VersionMismatch" => Ok(Self::TnsVersionMismatch),
            x => Err(Error::from(ErrorKind::UnknownOrInvalidValue(
                RawByteStr::from_slice(x),
            ))),
        }
    }
}

Metadata

Metadata

Assignees

Labels

featureFeature request

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions