epp_client/extensions/rgp/
request.rs1use crate::{
4 domain::{info::DomainInfo, update::DomainUpdate},
5 request::{Extension, Transaction},
6};
7
8use serde::{Deserialize, Serialize};
9
10use super::{Update, XMLNS};
11
12impl<'a> Transaction<Update<RgpRestoreRequest<'a>>> for DomainUpdate<'a> {}
13
14impl<'a> Transaction<Update<RgpRestoreRequest<'a>>> for DomainInfo<'a> {}
15
16impl<'a> Extension for Update<RgpRestoreRequest<'a>> {
17 type Response = Update<RgpRequestResponse>;
18}
19
20#[derive(Serialize, Debug)]
24pub struct RgpRestoreRequestData<'a> {
25 pub op: &'a str,
27}
28
29#[derive(Serialize, Debug)]
30pub struct RgpRestoreRequest<'a> {
32 #[serde(rename = "xmlns:rgp")]
34 xmlns: &'a str,
35 #[serde(rename = "rgp:restore")]
37 restore: RgpRestoreRequestData<'a>,
38}
39
40impl Default for RgpRestoreRequest<'static> {
41 fn default() -> Self {
42 Self {
43 xmlns: XMLNS,
44 restore: RgpRestoreRequestData { op: "request" },
45 }
46 }
47}
48
49#[derive(Deserialize, Debug)]
53pub struct RgpStatus {
54 #[serde(rename = "s")]
56 pub status: String,
57}
58
59#[derive(Deserialize, Debug)]
60#[serde(rename = "upData")]
61pub struct RgpRequestResponse {
63 #[serde(rename = "rgpStatus")]
65 pub rgp_status: Vec<RgpStatus>,
66}
67
68#[cfg(test)]
69mod tests {
70 use super::{RgpRestoreRequest, Update};
71 use crate::domain::info::DomainInfo;
72 use crate::domain::update::{DomainChangeInfo, DomainUpdate};
73 use crate::response::ResultCode;
74 use crate::tests::{assert_serialized, response_from_file_with_ext, SUCCESS_MSG, SVTRID};
75
76 #[test]
77 fn request_command() {
78 let domain_restore_request = Update {
79 data: RgpRestoreRequest::default(),
80 };
81
82 let mut object = DomainUpdate::new("eppdev.com");
83
84 let change_info = DomainChangeInfo {
85 registrant: None,
86 auth_info: None,
87 };
88
89 object.info(change_info);
90
91 assert_serialized(
92 "request/extensions/rgp_restore_request.xml",
93 (&object, &domain_restore_request),
94 );
95 }
96
97 #[test]
98 fn request_response() {
99 let object = response_from_file_with_ext::<DomainUpdate, Update<RgpRestoreRequest>>(
100 "response/extensions/rgp_restore.xml",
101 );
102 let ext = object.extension.unwrap();
103
104 assert_eq!(object.result.code, ResultCode::CommandCompletedSuccessfully);
105 assert_eq!(object.result.message, SUCCESS_MSG.into());
106 assert_eq!(ext.data.rgp_status[0].status, "pendingRestore".to_string());
107 assert_eq!(object.tr_ids.server_tr_id, SVTRID.into());
108 }
109
110 #[test]
111 fn domain_info_request_response() {
112 let object = response_from_file_with_ext::<DomainInfo, Update<RgpRestoreRequest>>(
113 "response/extensions/domain_info_rgp.xml",
114 );
115 let ext = object.extension.unwrap();
116
117 assert_eq!(ext.data.rgp_status[0].status, "addPeriod");
118 assert_eq!(ext.data.rgp_status[1].status, "renewPeriod");
119 }
120}