instant_epp/domain/
check.rs1use std::fmt;
4
5use instant_xml::{FromXml, Serializer, ToXml};
6
7use super::XMLNS;
8use crate::common::{NoExtension, EPP_XMLNS};
9use crate::request::{Command, Transaction};
10
11impl<'a> Transaction<NoExtension> for DomainCheck<'a> {}
12
13impl<'a> Command for DomainCheck<'a> {
14 type Response = CheckData;
15 const COMMAND: &'static str = "check";
16}
17
18#[derive(Debug, ToXml)]
21#[xml(rename = "check", ns(XMLNS))]
22struct DomainList<'a> {
23 #[xml(rename = "name", ns(XMLNS))]
24 domains: &'a [&'a str],
25}
26
27fn serialize_domains<W: fmt::Write + ?Sized>(
28 domains: &[&str],
29 serializer: &mut Serializer<W>,
30) -> Result<(), instant_xml::Error> {
31 DomainList { domains }.serialize(None, serializer)
32}
33
34#[derive(ToXml, Debug)]
35#[xml(rename = "check", ns(EPP_XMLNS))]
36pub struct DomainCheck<'a> {
37 #[xml(serialize_with = "serialize_domains")]
39 pub domains: &'a [&'a str],
40}
41
42#[derive(Debug, FromXml)]
45#[xml(rename = "name", ns(XMLNS))]
46pub struct Checked {
47 #[xml(attribute, rename = "avail")]
48 pub available: bool,
49 #[xml(attribute)]
50 pub reason: Option<String>,
51 #[xml(direct)]
52 pub id: String,
53}
54
55#[derive(Debug, FromXml)]
56#[xml(rename = "cd", ns(XMLNS))]
57pub struct CheckedDomain {
58 #[xml(rename = "cd")]
60 pub inner: Checked,
61}
62
63#[derive(Debug, FromXml)]
65#[xml(rename = "chkData", ns(XMLNS))]
66pub struct CheckData {
67 pub list: Vec<CheckedDomain>,
68}
69
70#[cfg(test)]
71mod tests {
72 use super::DomainCheck;
73 use crate::response::ResultCode;
74 use crate::tests::{assert_serialized, response_from_file, CLTRID, SUCCESS_MSG, SVTRID};
75
76 #[test]
77 fn command() {
78 let object = DomainCheck {
79 domains: &["eppdev.com", "eppdev.net"],
80 };
81 assert_serialized("request/domain/check.xml", &object);
82 }
83
84 #[test]
85 fn response() {
86 let object = response_from_file::<DomainCheck>("response/domain/check.xml");
87 let result = dbg!(&object).res_data().unwrap();
88
89 assert_eq!(object.result.code, ResultCode::CommandCompletedSuccessfully);
90 assert_eq!(object.result.message, SUCCESS_MSG);
91 assert_eq!(result.list[0].inner.id, "eppdev.com");
92 assert!(result.list[0].inner.available);
93 assert_eq!(result.list[1].inner.id, "eppdev.net");
94 assert!(!result.list[1].inner.available);
95 assert_eq!(object.tr_ids.client_tr_id.unwrap(), CLTRID);
96 assert_eq!(object.tr_ids.server_tr_id, SVTRID);
97 }
98}