instant_epp/domain/
delete.rs

1//! Types for EPP domain delete request
2
3use instant_xml::ToXml;
4
5use super::XMLNS;
6use crate::common::{NoExtension, EPP_XMLNS};
7use crate::request::{Command, Transaction};
8
9impl<'a> Transaction<NoExtension> for DomainDelete<'a> {}
10
11impl<'a> Command for DomainDelete<'a> {
12    type Response = ();
13    const COMMAND: &'static str = "delete";
14}
15
16impl<'a> DomainDelete<'a> {
17    pub fn new(name: &'a str) -> Self {
18        Self {
19            domain: DomainDeleteRequestData { name },
20        }
21    }
22}
23
24/// Type for `<name>` element under the domain `<delete>` tag
25#[derive(Debug, ToXml)]
26#[xml(rename = "delete", ns(XMLNS))]
27pub struct DomainDeleteRequestData<'a> {
28    /// The domain to be deleted
29    name: &'a str,
30}
31
32#[derive(Debug, ToXml)]
33/// Type for EPP XML `<delete>` command for domains
34#[xml(rename = "delete", ns(EPP_XMLNS))]
35pub struct DomainDelete<'a> {
36    /// The data under the `<delete>` tag for domain deletion
37    domain: DomainDeleteRequestData<'a>,
38}
39
40#[cfg(test)]
41mod tests {
42    use super::DomainDelete;
43    use crate::response::ResultCode;
44    use crate::tests::{assert_serialized, response_from_file, CLTRID, SUCCESS_MSG, SVTRID};
45
46    #[test]
47    fn command() {
48        let object = DomainDelete::new("eppdev.com");
49        assert_serialized("request/domain/delete.xml", &object);
50    }
51
52    #[test]
53    fn response() {
54        let object = response_from_file::<DomainDelete>("response/domain/delete.xml");
55
56        assert_eq!(object.result.code, ResultCode::CommandCompletedSuccessfully);
57        assert_eq!(object.result.message, SUCCESS_MSG);
58        assert_eq!(object.tr_ids.client_tr_id.unwrap(), CLTRID);
59        assert_eq!(object.tr_ids.server_tr_id, SVTRID);
60    }
61}