epp_client/domain/
check.rs1use super::XMLNS;
4use crate::common::{CheckResponse, NoExtension, StringValue};
5use crate::request::{Command, Transaction};
6use serde::Serialize;
7
8impl<'a> Transaction<NoExtension> for DomainCheck<'a> {}
9
10impl<'a> Command for DomainCheck<'a> {
11 type Response = CheckResponse;
12 const COMMAND: &'static str = "check";
13}
14
15#[derive(Serialize, Debug)]
19struct DomainList<'a> {
20 #[serde(rename = "xmlns:domain")]
21 xmlns: &'a str,
23 #[serde(rename = "domain:name")]
24 domains: Vec<StringValue<'a>>,
26}
27
28#[derive(Serialize, Debug)]
29struct SerializeDomainCheck<'a> {
30 #[serde(rename = "domain:check")]
31 list: DomainList<'a>,
32}
33
34impl<'a> From<DomainCheck<'a>> for SerializeDomainCheck<'a> {
35 fn from(check: DomainCheck<'a>) -> Self {
36 Self {
37 list: DomainList {
38 xmlns: XMLNS,
39 domains: check.domains.iter().map(|&d| d.into()).collect(),
40 },
41 }
42 }
43}
44
45#[derive(Clone, Debug, Serialize)]
47#[serde(into = "SerializeDomainCheck")]
48pub struct DomainCheck<'a> {
49 pub domains: &'a [&'a str],
51}
52
53#[cfg(test)]
54mod tests {
55 use super::DomainCheck;
56 use crate::response::ResultCode;
57 use crate::tests::{assert_serialized, response_from_file, CLTRID, SUCCESS_MSG, SVTRID};
58
59 #[test]
60 fn command() {
61 let object = DomainCheck {
62 domains: &["eppdev.com", "eppdev.net"],
63 };
64 assert_serialized("request/domain/check.xml", &object);
65 }
66
67 #[test]
68 fn response() {
69 let object = response_from_file::<DomainCheck>("response/domain/check.xml");
70 let result = object.res_data().unwrap();
71
72 assert_eq!(object.result.code, ResultCode::CommandCompletedSuccessfully);
73 assert_eq!(object.result.message, SUCCESS_MSG.into());
74 assert_eq!(result.list[0].id, "eppdev.com");
75 assert!(result.list[0].available);
76 assert_eq!(result.list[1].id, "eppdev.net");
77 assert!(!result.list[1].available);
78 assert_eq!(object.tr_ids.client_tr_id.unwrap(), CLTRID.into());
79 assert_eq!(object.tr_ids.server_tr_id, SVTRID.into());
80 }
81}