Represents a person or organization entity in RDAP responses. Entities can be registrants, technical contacts, administrative contacts, abuse contacts, or registrars.
The VCard object provides convenient accessor methods:
if let Some(vcard) = &entity.vcard { // Get formatted name let name = vcard.name(); // Option<&str> // Get email address let email = vcard.email(); // Option<&str> // Get telephone number let tel = vcard.tel(); // Option<&str> // Get organization let org = vcard.org(); // Option<&str> // Get structured address if let Some(addr) = vcard.address() { println!("Street: {}", addr.street); println!("City: {}", addr.locality); println!("Region: {}", addr.region); println!("Postal: {}", addr.postal_code); println!("Country: {}", addr.country); // Some addresses have a pre-formatted label if let Some(label) = addr.label { println!("Address: {}", label); } } // Access raw properties for prop in vcard.properties() { println!("{}: {:?}", prop.name, prop.value); }}
Entity roles in the context where it appearsCommon roles:
"registrant" - Domain/resource owner
"administrative" - Administrative contact
"technical" - Technical contact
"abuse" - Abuse contact
"billing" - Billing contact
"registrar" - Domain registrar
"reseller" - Reseller
"sponsor" - Sponsoring organization
if entity.roles.contains(&"abuse".to_string()) { println!("This is an abuse contact");}// Find specific rolelet is_registrar = entity.roles.iter() .any(|r| r == "registrar");
use rdap_client::RdapClient;#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { let client = RdapClient::new(); let result = client.query("example.com").await?; if let Some(domain) = result.domain() { // Find registrar for entity in &domain.entities { if entity.roles.contains(&"registrar".to_string()) { if let Some(vcard) = &entity.vcard { println!("Registrar: {}", vcard.name().unwrap_or("Unknown")); if let Some(email) = vcard.email() { println!("Email: {}", email); } } // Get IANA Registrar ID for pid in &entity.public_ids { if pid.id_type == "IANA Registrar ID" { println!("Registrar ID: {}", pid.identifier); } } } } // Find abuse contact for entity in &domain.entities { if entity.roles.contains(&"abuse".to_string()) { if let Some(vcard) = &entity.vcard { println!("\nAbuse Contact:"); if let Some(email) = vcard.email() { println!(" Email: {}", email); } if let Some(tel) = vcard.tel() { println!(" Phone: {}", tel); } } } } } Ok(())}