Skip to main content

rdap_types/
nameserver.rs

1//! Normalised RDAP nameserver response type.
2//!
3//! Follows RFC 9083 ยง5.2 (Nameserver Object Class).
4
5use serde::{Deserialize, Serialize};
6
7use crate::common::{RdapEntity, RdapEvent, RdapLink, RdapRemark, RdapStatus, ResponseMeta};
8
9/// IP addresses associated with a nameserver (glue records).
10#[derive(Debug, Clone, Default, Serialize, Deserialize)]
11pub struct NameserverIpAddresses {
12    #[serde(default, skip_serializing_if = "Vec::is_empty")]
13    pub v4: Vec<String>,
14    #[serde(default, skip_serializing_if = "Vec::is_empty")]
15    pub v6: Vec<String>,
16}
17
18/// Normalised RDAP response for a nameserver query.
19#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(rename_all = "camelCase")]
21pub struct NameserverResponse {
22    /// The original query string (nameserver hostname).
23    pub query: String,
24
25    /// Registry handle.
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub handle: Option<String>,
28
29    /// LDH (letters, digits, hyphens) form of the nameserver hostname.
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub ldh_name: Option<String>,
32
33    /// Unicode form of the nameserver hostname.
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub unicode_name: Option<String>,
36
37    /// Glue records (IPv4 and IPv6 addresses).
38    #[serde(default)]
39    pub ip_addresses: NameserverIpAddresses,
40
41    #[serde(default, skip_serializing_if = "Vec::is_empty")]
42    pub status: Vec<RdapStatus>,
43
44    #[serde(default, skip_serializing_if = "Vec::is_empty")]
45    pub entities: Vec<RdapEntity>,
46
47    #[serde(default, skip_serializing_if = "Vec::is_empty")]
48    pub events: Vec<RdapEvent>,
49
50    #[serde(default, skip_serializing_if = "Vec::is_empty")]
51    pub links: Vec<RdapLink>,
52
53    #[serde(default, skip_serializing_if = "Vec::is_empty")]
54    pub remarks: Vec<RdapRemark>,
55
56    pub meta: ResponseMeta,
57}