Skip to main content

rdap_types/
entity.rs

1//! Normalised RDAP entity response type.
2//!
3//! Follows RFC 9083 §5.1 (Entity Object Class).
4//!
5//! Note: entities have no global bootstrap — the caller must supply
6//! an explicit server URL.
7
8use serde::{Deserialize, Serialize};
9
10use crate::common::{
11    RdapEntity, RdapEvent, RdapLink, RdapRemark, RdapRole, RdapStatus, ResponseMeta,
12};
13
14/// Normalised RDAP response for an entity (contact/registrar) query.
15#[derive(Debug, Clone, Serialize, Deserialize)]
16#[serde(rename_all = "camelCase")]
17pub struct EntityResponse {
18    /// The original query handle.
19    pub query: String,
20
21    /// Registry handle.
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub handle: Option<String>,
24
25    /// vCard data (RFC 7095) — kept as raw JSON.
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub vcard_array: Option<serde_json::Value>,
28
29    #[serde(default, skip_serializing_if = "Vec::is_empty")]
30    pub roles: Vec<RdapRole>,
31
32    #[serde(default, skip_serializing_if = "Vec::is_empty")]
33    pub status: Vec<RdapStatus>,
34
35    /// Nested entities (e.g., technical contacts of a registrar).
36    #[serde(default, skip_serializing_if = "Vec::is_empty")]
37    pub entities: Vec<RdapEntity>,
38
39    #[serde(default, skip_serializing_if = "Vec::is_empty")]
40    pub events: Vec<RdapEvent>,
41
42    #[serde(default, skip_serializing_if = "Vec::is_empty")]
43    pub links: Vec<RdapLink>,
44
45    #[serde(default, skip_serializing_if = "Vec::is_empty")]
46    pub remarks: Vec<RdapRemark>,
47
48    pub meta: ResponseMeta,
49}