diff --git a/src/common.rs b/src/common.rs index 21bc53e..efadcc6 100644 --- a/src/common.rs +++ b/src/common.rs @@ -58,7 +58,7 @@ impl<'a> Options<'a> { pub struct ServiceExtension<'a> { /// The service extension URIs being represented by `` in EPP XML #[xml(rename = "extURI")] - pub ext_uris: Option>>, + pub ext_uris: Vec>, } /// The `` type in EPP XML diff --git a/src/hello.rs b/src/hello.rs index 5d2157a..8a35fa3 100644 --- a/src/hello.rs +++ b/src/hello.rs @@ -341,17 +341,7 @@ mod tests { assert_eq!(object.svc_menu.options.version, "1.0"); assert_eq!(object.svc_menu.options.lang, "en"); assert_eq!(object.svc_menu.services.obj_uris.len(), 4); - assert_eq!( - object - .svc_menu - .services - .svc_ext - .unwrap() - .ext_uris - .unwrap() - .len(), - 5 - ); + assert_eq!(object.svc_menu.services.svc_ext.unwrap().ext_uris.len(), 5); assert_eq!(object.dcp.statement.len(), 2); assert_eq!( object.dcp.expiry.unwrap().inner, diff --git a/src/login.rs b/src/login.rs index 9098a3b..dbf8162 100644 --- a/src/login.rs +++ b/src/login.rs @@ -37,8 +37,6 @@ impl<'a> Login<'a> { new_password: Option<&'a str>, ext_uris: Option<&'_ [&'a str]>, ) -> Self { - let ext_uris = ext_uris.map(|uris| uris.iter().map(|&u| u.into()).collect()); - Self { username, password, @@ -53,7 +51,11 @@ impl<'a> Login<'a> { contact::XMLNS.into(), domain::XMLNS.into(), ], - svc_ext: Some(ServiceExtension { ext_uris }), + svc_ext: ext_uris.and_then(|uris| { + (!uris.is_empty()).then(|| ServiceExtension { + ext_uris: uris.iter().map(|&u| u.into()).collect(), + }) + }), }, } } @@ -87,6 +89,14 @@ mod tests { assert_serialized("request/login.xml", &object); } + #[test] + fn command_no_extension() { + let object = Login::new("username", "password", None, None); + assert_serialized("request/login_no_extension.xml", &object); + let object = Login::new("username", "password", None, Some(&[])); + assert_serialized("request/login_no_extension.xml", &object); + } + #[test] fn response() { let object = response_from_file::("response/login.xml"); diff --git a/tests/resources/request/login_no_extension.xml b/tests/resources/request/login_no_extension.xml new file mode 100644 index 0000000..498c7f0 --- /dev/null +++ b/tests/resources/request/login_no_extension.xml @@ -0,0 +1,19 @@ + + + + + username + password + + 1.0 + en + + + urn:ietf:params:xml:ns:host-1.0 + urn:ietf:params:xml:ns:contact-1.0 + urn:ietf:params:xml:ns:domain-1.0 + + + cltrid:1626454866 + +