diff --git a/epp-client/src/domain.rs b/epp-client/src/domain.rs index 770e8c7..abe3cc5 100644 --- a/epp-client/src/domain.rs +++ b/epp-client/src/domain.rs @@ -2,3 +2,4 @@ pub mod check; pub mod create; pub mod delete; pub mod info; +pub mod renew; diff --git a/epp-client/src/epp/request/domain/renew.rs b/epp-client/src/domain/renew.rs similarity index 73% rename from epp-client/src/epp/request/domain/renew.rs rename to epp-client/src/domain/renew.rs index c2c445b..0607634 100644 --- a/epp-client/src/epp/request/domain/renew.rs +++ b/epp-client/src/domain/renew.rs @@ -5,6 +5,7 @@ use epp_client_macros::*; use crate::epp::object::data::Period; use crate::epp::object::{ElementName, EppObject, StringValue}; use crate::epp::request::Command; +use crate::epp::response::CommandResponse; use crate::epp::xml::EPP_DOMAIN_XMLNS; use chrono::NaiveDate; use serde::{Deserialize, Serialize}; @@ -20,7 +21,7 @@ use serde::{Deserialize, Serialize}; /// /// use epp_client::config::{EppClientConfig, EppClientConnection}; /// use epp_client::EppClient; -/// use epp_client::epp::{EppDomainRenew, EppDomainRenewResponse}; +/// use epp_client::domain::renew::{EppDomainRenew, EppDomainRenewResponse}; /// use epp_client::epp::generate_client_tr_id; /// /// #[tokio::main] @@ -60,11 +61,44 @@ use serde::{Deserialize, Serialize}; /// client.logout().await.unwrap(); /// } /// ``` -pub type EppDomainRenew = EppObject>; +pub type EppDomainRenew = EppObject>; + +impl EppDomainRenew { + /// Creates a new EppObject for domain renew corresponding to the <epp> tag in EPP XML + pub fn new( + name: &str, + current_expiry_date: NaiveDate, + years: u16, + client_tr_id: &str, + ) -> EppDomainRenew { + let exp_date_str = current_expiry_date.format("%Y-%m-%d").to_string().into(); + + EppObject::build(Command::::new( + DomainRenewRequest { + domain: DomainRenewRequestData { + xmlns: EPP_DOMAIN_XMLNS.to_string(), + name: name.into(), + current_expiry_date: exp_date_str, + period: Period::new(years), + }, + }, + client_tr_id, + )) + } + + pub fn set_period(&mut self, period: Period) { + self.data.command.domain.period = period; + } +} + +/// Type that represents the <epp> tag for the EPP XML domain renew response +pub type EppDomainRenewResponse = EppObject>; + +// Request /// Type for data under the domain <renew> tag #[derive(Serialize, Deserialize, Debug)] -pub struct DomainRenewData { +pub struct DomainRenewRequestData { /// XML namespace for domain commands #[serde(rename = "xmlns:domain", alias = "xmlns")] xmlns: String, @@ -82,36 +116,31 @@ pub struct DomainRenewData { #[derive(Serialize, Deserialize, Debug, ElementName)] #[element_name(name = "renew")] /// Type for EPP XML <renew> command for domains -pub struct DomainRenew { +pub struct DomainRenewRequest { /// The data under the <renew> tag for the domain renewal #[serde(rename = "domain:renew", alias = "renew")] - domain: DomainRenewData, + domain: DomainRenewRequestData, } -impl EppDomainRenew { - /// Creates a new EppObject for domain renew corresponding to the <epp> tag in EPP XML - pub fn new( - name: &str, - current_expiry_date: NaiveDate, - years: u16, - client_tr_id: &str, - ) -> EppDomainRenew { - let exp_date_str = current_expiry_date.format("%Y-%m-%d").to_string().into(); +// Response - EppObject::build(Command::::new( - DomainRenew { - domain: DomainRenewData { - xmlns: EPP_DOMAIN_XMLNS.to_string(), - name: name.into(), - current_expiry_date: exp_date_str, - period: Period::new(years), - }, - }, - client_tr_id, - )) - } - - pub fn set_period(&mut self, period: Period) { - self.data.command.domain.period = period; - } +/// Type that represents the <renData> tag for domain renew response +#[derive(Serialize, Deserialize, Debug)] +pub struct DomainRenewResponseData { + /// XML namespace for domain response data + #[serde(rename = "xmlns:domain")] + xmlns: String, + /// The name of the domain + pub name: StringValue, + /// The new expiry date after renewal + #[serde(rename = "exDate")] + pub expiring_at: StringValue, +} + +/// Type that represents the <resData> tag for domain renew response +#[derive(Serialize, Deserialize, Debug)] +pub struct DomainRenewResponse { + /// Data under the <renData> tag + #[serde(rename = "renData")] + pub renew_data: DomainRenewResponseData, } diff --git a/epp-client/src/epp.rs b/epp-client/src/epp.rs index 707b115..362dcbb 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::renew::*; pub use request::domain::rgp::report::*; pub use request::domain::rgp::request::*; pub use request::domain::transfer::*; @@ -28,7 +27,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::renew::*; pub use response::domain::rgp::report::*; pub use response::domain::rgp::request::*; pub use response::domain::transfer::*; diff --git a/epp-client/src/epp/request/domain.rs b/epp-client/src/epp/request/domain.rs index 1545533..f00bebb 100644 --- a/epp-client/src/epp/request/domain.rs +++ b/epp-client/src/epp/request/domain.rs @@ -1,6 +1,5 @@ //! Types for EPP domain requests -pub mod renew; pub mod rgp; pub mod transfer; pub mod update; diff --git a/epp-client/src/epp/response/domain.rs b/epp-client/src/epp/response/domain.rs index c86c669..35d6823 100644 --- a/epp-client/src/epp/response/domain.rs +++ b/epp-client/src/epp/response/domain.rs @@ -1,6 +1,5 @@ //! Types for EPP domain responses -pub mod renew; pub mod rgp; pub mod transfer; pub mod update; diff --git a/epp-client/src/epp/response/domain/renew.rs b/epp-client/src/epp/response/domain/renew.rs deleted file mode 100644 index 17f71b0..0000000 --- a/epp-client/src/epp/response/domain/renew.rs +++ /dev/null @@ -1,29 +0,0 @@ -//! Types for EPP domain renew response -use serde::{Deserialize, Serialize}; - -use crate::epp::object::{EppObject, StringValue}; -use crate::epp::response::CommandResponse; - -/// Type that represents the <epp> tag for the EPP XML domain renew response -pub type EppDomainRenewResponse = EppObject>; - -/// Type that represents the <renData> tag for domain renew response -#[derive(Serialize, Deserialize, Debug)] -pub struct DomainRenewData { - /// XML namespace for domain response data - #[serde(rename = "xmlns:domain")] - xmlns: String, - /// The name of the domain - pub name: StringValue, - /// The new expiry date after renewal - #[serde(rename = "exDate")] - pub expiring_at: StringValue, -} - -/// Type that represents the <resData> tag for domain renew response -#[derive(Serialize, Deserialize, Debug)] -pub struct DomainRenewResult { - /// Data under the <renData> tag - #[serde(rename = "renData")] - pub renew_data: DomainRenewData, -} diff --git a/epp-client/src/tests/de.rs b/epp-client/src/tests/de.rs index bf52db5..01cdf75 100644 --- a/epp-client/src/tests/de.rs +++ b/epp-client/src/tests/de.rs @@ -7,6 +7,7 @@ mod response { use crate::domain::create::EppDomainCreateResponse; use crate::domain::delete::EppDomainDeleteResponse; use crate::domain::info::EppDomainInfoResponse; + use crate::domain::renew::EppDomainRenewResponse; use crate::epp::response::ExpiryType; use crate::epp::response::Relative; use crate::epp::response::{ diff --git a/epp-client/src/tests/se.rs b/epp-client/src/tests/se.rs index bf17a65..1161545 100644 --- a/epp-client/src/tests/se.rs +++ b/epp-client/src/tests/se.rs @@ -7,6 +7,7 @@ mod request { use crate::domain::create::EppDomainCreate; use crate::domain::delete::EppDomainDelete; use crate::domain::info::EppDomainInfo; + use crate::domain::renew::EppDomainRenew; use crate::epp::object::data::{ Address, ContactStatus, DomainAuthInfo, DomainContact, DomainStatus, HostAddr, HostAttr, HostStatus, Phone, PostalInfo,