diff --git a/epp-client/src/domain.rs b/epp-client/src/domain.rs index cd7f494..6c80ad8 100644 --- a/epp-client/src/domain.rs +++ b/epp-client/src/domain.rs @@ -3,5 +3,6 @@ pub mod create; pub mod delete; pub mod info; pub mod renew; +pub mod rgp; pub mod transfer; pub mod update; diff --git a/epp-client/src/domain/rgp.rs b/epp-client/src/domain/rgp.rs new file mode 100644 index 0000000..9a962e9 --- /dev/null +++ b/epp-client/src/domain/rgp.rs @@ -0,0 +1,3 @@ +//! Types for EPP RGP restore requests + +pub mod report; diff --git a/epp-client/src/epp/request/domain/rgp/report.rs b/epp-client/src/domain/rgp/report.rs similarity index 89% rename from epp-client/src/epp/request/domain/rgp/report.rs rename to epp-client/src/domain/rgp/report.rs index e9227e0..2d5e873 100644 --- a/epp-client/src/epp/request/domain/rgp/report.rs +++ b/epp-client/src/domain/rgp/report.rs @@ -3,8 +3,9 @@ use epp_client_macros::*; use crate::domain::update::{DomainChangeInfo, DomainUpdateRequest, DomainUpdateRequestData}; -use crate::epp::object::{ElementName, EppObject, StringValue}; -use crate::epp::request::{CommandWithExtension, Extension}; +use crate::epp::object::{ElementName, EppObject, Extension, StringValue}; +use crate::epp::request::CommandWithExtension; +use crate::epp::response::EppCommandResponse; use crate::epp::xml::{EPP_DOMAIN_RGP_EXT_XMLNS, EPP_DOMAIN_XMLNS}; use chrono::{DateTime, SecondsFormat, Utc}; use serde::{Deserialize, Serialize}; @@ -18,7 +19,7 @@ use serde::{Deserialize, Serialize}; /// /// use epp_client::config::{EppClientConfig, EppClientConnection}; /// use epp_client::EppClient; -/// use epp_client::epp::{EppDomainRgpRestoreReport, EppDomainRgpRestoreReportResponse}; +/// use epp_client::domain::rgp::report::{EppDomainRgpRestoreReport, EppDomainRgpRestoreReportResponse}; /// use epp_client::epp::generate_client_tr_id; /// use chrono::{DateTime, NaiveDate}; /// use std::str::FromStr; @@ -81,11 +82,71 @@ use serde::{Deserialize, Serialize}; /// } /// ``` pub type EppDomainRgpRestoreReport = - EppObject>; + EppObject>; + +impl EppDomainRgpRestoreReport { + /// Creates a new EppObject for domain rgp restore report corresponding to the <epp> tag in EPP XML + #[allow(clippy::too_many_arguments)] + pub fn new( + name: &str, + pre_data: &str, + post_data: &str, + deleted_at: DateTime, + restored_at: DateTime, + restore_reason: &str, + statements: &[&str], + other: &str, + client_tr_id: &str, + ) -> EppDomainRgpRestoreReport { + let statements = statements.iter().map(|&s| s.into()).collect(); + + let command = CommandWithExtension:: { + command: DomainUpdateRequest { + domain: DomainUpdateRequestData { + xmlns: EPP_DOMAIN_XMLNS.to_string(), + name: name.into(), + add: None, + remove: None, + change_info: Some(DomainChangeInfo { + registrant: None, + auth_info: None, + }), + }, + }, + extension: Some(Extension { + data: RgpRestoreReportRequest { + xmlns: EPP_DOMAIN_RGP_EXT_XMLNS.to_string(), + restore: RgpRestoreReportRequestSection { + op: "report".to_string(), + report: RgpRestoreReportRequestData { + pre_data: pre_data.into(), + post_data: post_data.into(), + deleted_at: deleted_at + .to_rfc3339_opts(SecondsFormat::AutoSi, true) + .into(), + restored_at: restored_at + .to_rfc3339_opts(SecondsFormat::AutoSi, true) + .into(), + restore_reason: restore_reason.into(), + statements, + other: other.into(), + }, + }, + }, + }), + client_tr_id: client_tr_id.into(), + }; + + EppObject::build(command) + } +} + +/// Type that represents the <epp> tag for the EPP XML rgp restore report response +pub type EppDomainRgpRestoreReportResponse = EppCommandResponse; /// Type corresponding to the <report> section in the EPP rgp restore extension #[derive(Serialize, Deserialize, Debug)] -pub struct RgpRestoreReportData { +pub struct RgpRestoreReportRequestData { /// The pre-delete registration date #[serde(rename = "rgp:preData", alias = "preData")] pre_data: StringValue, @@ -111,79 +172,22 @@ pub struct RgpRestoreReportData { /// Type corresponding to the <restore> section in the rgp restore extension #[derive(Serialize, Deserialize, Debug)] -pub struct RgpRestoreReportSection { +pub struct RgpRestoreReportRequestSection { /// The value of the op attribute for the <restore> tag op: String, /// Data for the <report> tag #[serde(rename = "rgp:report", alias = "report")] - report: RgpRestoreReportData, + report: RgpRestoreReportRequestData, } #[derive(Serialize, Deserialize, Debug, ElementName)] #[element_name(name = "rgp:update")] /// Type for EPP XML <check> command for domains -pub struct RgpRestoreReport { +pub struct RgpRestoreReportRequest { /// XML namespace for the RGP restore extension #[serde(rename = "xmlns:rgp", alias = "xmlns")] xmlns: String, /// The object holding the list of domains to be checked #[serde(rename = "rgp:restore", alias = "restore")] - restore: RgpRestoreReportSection, -} - -impl EppDomainRgpRestoreReport { - /// Creates a new EppObject for domain rgp restore report corresponding to the <epp> tag in EPP XML - #[allow(clippy::too_many_arguments)] - pub fn new( - name: &str, - pre_data: &str, - post_data: &str, - deleted_at: DateTime, - restored_at: DateTime, - restore_reason: &str, - statements: &[&str], - other: &str, - client_tr_id: &str, - ) -> EppDomainRgpRestoreReport { - let statements = statements.iter().map(|&s| s.into()).collect(); - - let command = CommandWithExtension:: { - command: DomainUpdateRequest { - domain: DomainUpdateRequestData { - xmlns: EPP_DOMAIN_XMLNS.to_string(), - name: name.into(), - add: None, - remove: None, - change_info: Some(DomainChangeInfo { - registrant: None, - auth_info: None, - }), - }, - }, - extension: Some(Extension { - data: RgpRestoreReport { - xmlns: EPP_DOMAIN_RGP_EXT_XMLNS.to_string(), - restore: RgpRestoreReportSection { - op: "report".to_string(), - report: RgpRestoreReportData { - pre_data: pre_data.into(), - post_data: post_data.into(), - deleted_at: deleted_at - .to_rfc3339_opts(SecondsFormat::AutoSi, true) - .into(), - restored_at: restored_at - .to_rfc3339_opts(SecondsFormat::AutoSi, true) - .into(), - restore_reason: restore_reason.into(), - statements, - other: other.into(), - }, - }, - }, - }), - client_tr_id: client_tr_id.into(), - }; - - EppObject::build(command) - } + restore: RgpRestoreReportRequestSection, } diff --git a/epp-client/src/epp.rs b/epp-client/src/epp.rs index 8747f38..51f7bc6 100644 --- a/epp-client/src/epp.rs +++ b/epp-client/src/epp.rs @@ -10,7 +10,6 @@ pub use request::contact::create::*; pub use request::contact::delete::*; pub use request::contact::info::*; pub use request::contact::update::*; -pub use request::domain::rgp::report::*; pub use request::domain::rgp::request::*; pub use request::host::check::*; pub use request::host::create::*; @@ -25,7 +24,6 @@ pub use response::contact::create::*; pub use response::contact::delete::*; pub use response::contact::info::*; pub use response::contact::update::*; -pub use response::domain::rgp::report::*; pub use response::domain::rgp::request::*; pub use response::host::check::*; pub use response::host::create::*; diff --git a/epp-client/src/epp/request/domain/rgp.rs b/epp-client/src/epp/request/domain/rgp.rs index 8775fb4..aba4252 100644 --- a/epp-client/src/epp/request/domain/rgp.rs +++ b/epp-client/src/epp/request/domain/rgp.rs @@ -1,4 +1,3 @@ //! Types for EPP RGP restore requests -pub mod report; pub mod request; diff --git a/epp-client/src/epp/response/domain/rgp.rs b/epp-client/src/epp/response/domain/rgp.rs index 20cf477..78a00ea 100644 --- a/epp-client/src/epp/response/domain/rgp.rs +++ b/epp-client/src/epp/response/domain/rgp.rs @@ -1,4 +1,3 @@ //! Types for RGP restore responses -pub mod report; pub mod request; diff --git a/epp-client/src/epp/response/domain/rgp/report.rs b/epp-client/src/epp/response/domain/rgp/report.rs deleted file mode 100644 index 9081457..0000000 --- a/epp-client/src/epp/response/domain/rgp/report.rs +++ /dev/null @@ -1,4 +0,0 @@ -use crate::epp::response::EppCommandResponse; - -/// Type that represents the <epp> tag for the EPP XML rgp restore report response -pub type EppDomainRgpRestoreReportResponse = EppCommandResponse; diff --git a/epp-client/src/tests/se.rs b/epp-client/src/tests/se.rs index 362fc31..ce43e7f 100644 --- a/epp-client/src/tests/se.rs +++ b/epp-client/src/tests/se.rs @@ -8,6 +8,7 @@ mod request { use crate::domain::delete::EppDomainDelete; use crate::domain::info::EppDomainInfo; use crate::domain::renew::EppDomainRenew; + use crate::domain::rgp::report::EppDomainRgpRestoreReport; use crate::domain::transfer::EppDomainTransferApprove; use crate::domain::transfer::EppDomainTransferCancel; use crate::domain::transfer::EppDomainTransferQuery;