instant_epp/extensions/
namestore.rs1use std::borrow::Cow;
6
7use instant_xml::{FromXml, ToXml};
8
9use crate::{
10 contact::{
11 check::ContactCheck, create::ContactCreate, delete::ContactDelete, info::ContactInfo,
12 update::ContactUpdate,
13 },
14 domain::{
15 check::DomainCheck, create::DomainCreate, delete::DomainDelete, info::DomainInfo,
16 renew::DomainRenew, transfer::DomainTransfer, update::DomainUpdate,
17 },
18 host::{
19 check::HostCheck, create::HostCreate, delete::HostDelete, info::HostInfo,
20 update::HostUpdate,
21 },
22 request::{Extension, Transaction},
23};
24
25pub const XMLNS: &str = "http://www.verisign-grs.com/epp/namestoreExt-1.1";
26
27impl Transaction<NameStore<'_>> for ContactCheck<'_> {}
30impl Transaction<NameStore<'_>> for ContactCreate<'_> {}
31impl Transaction<NameStore<'_>> for ContactDelete<'_> {}
32impl Transaction<NameStore<'_>> for ContactInfo<'_> {}
33impl Transaction<NameStore<'_>> for ContactUpdate<'_> {}
34
35impl Transaction<NameStore<'_>> for DomainCheck<'_> {}
38impl Transaction<NameStore<'_>> for DomainCreate<'_> {}
39impl Transaction<NameStore<'_>> for DomainDelete<'_> {}
40impl Transaction<NameStore<'_>> for DomainInfo<'_> {}
41impl Transaction<NameStore<'_>> for DomainRenew<'_> {}
42impl Transaction<NameStore<'_>> for DomainTransfer<'_> {}
43impl Transaction<NameStore<'_>> for DomainUpdate<'_> {}
44
45impl Transaction<NameStore<'_>> for HostCheck<'_> {}
48impl Transaction<NameStore<'_>> for HostCreate<'_> {}
49impl Transaction<NameStore<'_>> for HostDelete<'_> {}
50impl Transaction<NameStore<'_>> for HostInfo<'_> {}
51impl Transaction<NameStore<'_>> for HostUpdate<'_> {}
52
53impl<'a> NameStore<'a> {
54 pub fn new(subproduct: &'a str) -> NameStore {
56 NameStore {
57 subproduct: subproduct.into(),
58 }
59 }
60}
61
62impl<'a> Extension for NameStore<'a> {
63 type Response = NameStore<'static>;
64}
65
66#[derive(Debug, FromXml, ToXml)]
67#[xml(rename = "namestoreExt", ns(XMLNS))]
69pub struct NameStore<'a> {
70 #[xml(rename = "subProduct")]
72 pub subproduct: Cow<'a, str>,
73}
74
75#[cfg(test)]
76mod tests {
77 use super::NameStore;
78 use crate::domain::check::DomainCheck;
79 use crate::tests::{assert_serialized, response_from_file_with_ext};
80
81 #[test]
82 fn command() {
83 let namestore_ext = NameStore::new("com");
84
85 let object = DomainCheck {
86 domains: &["example1.com", "example2.com", "example3.com"],
87 };
88
89 assert_serialized(
90 "request/extensions/namestore.xml",
91 (&object, &namestore_ext),
92 );
93 }
94
95 #[test]
96 fn response() {
97 let object = response_from_file_with_ext::<DomainCheck, NameStore>(
98 "response/extensions/namestore.xml",
99 );
100 let ext = object.extension().unwrap();
101 assert_eq!(ext.subproduct, "com");
102 }
103}