Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/dnsimple.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ pub mod domains;
pub mod domains_dnssec;
pub mod domains_email_forwards;
pub mod domains_push;
pub mod domains_research;
pub mod domains_signer_records;
pub mod identity;
pub mod oauth;
Expand Down
64 changes: 64 additions & 0 deletions src/dnsimple/domains_research.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
use crate::dnsimple::domains::Domains;
use crate::dnsimple::{DNSimpleResponse, Endpoint, Filters, RequestOptions};
use crate::errors::DNSimpleError;
use serde::{Deserialize, Serialize};

/// Represents the result of a domain research
#[derive(Debug, Deserialize, Serialize)]
pub struct DomainResearchStatus {
/// UUID identifier for this research request
pub request_id: String,
/// The domain name that was researched
pub domain: String,
/// The availability status. See [API Documentation](https://developer.dnsimple.com/v2/domains/research/#getDomainsResearchStatus)
pub availability: String,
/// Array of error messages if the domain cannot be researched
pub errors: Vec<String>,
}

struct DomainResearchStatusEndpoint;

impl Endpoint for DomainResearchStatusEndpoint {
type Output = DomainResearchStatus;
}

/// The domains research set of endpoints
///
/// See [API Documentation: domains/research](https://developer.dnsimple.com/v2/domains/research)
impl Domains<'_> {
/// Research a domain name for availability and registration status information.
///
/// This endpoint provides information about a domain's availability status.
///
/// # Examples
///
/// ```no_run
/// use dnsimple::dnsimple::new_client;
///
/// let client = new_client(true, String::from("AUTH_TOKEN"));
/// let response = client.domains().domain_research_status(1234, String::from("example.com")).unwrap();
/// ```
///
/// # Arguments
///
/// `account_id`: The account ID
/// `domain`: The domain name to research
pub fn domain_research_status(
&self,
account_id: u64,
domain: String,
) -> Result<DNSimpleResponse<DomainResearchStatus>, DNSimpleError> {
let path = format!("/{}/domains/research/status", account_id);
let mut filter_map = std::collections::HashMap::new();
filter_map.insert("domain".to_string(), domain);
let options = RequestOptions {
filters: Some(Filters {
filters: filter_map,
}),
sort: None,
paginate: None,
};
self.client
.get::<DomainResearchStatusEndpoint>(&path, Some(options))
}
}
24 changes: 24 additions & 0 deletions tests/domains_research_test.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
use crate::common::setup_mock_for;
mod common;

#[test]
fn domain_research_status_test() {
let setup = setup_mock_for(
"/1385/domains/research/status?domain=taken.com",
"getDomainsResearchStatus/success-unavailable",
"GET",
);
let client = setup.0;
let account_id = 1385_u64;

let response = client
.domains()
.domain_research_status(account_id, String::from("taken.com"))
.unwrap();

let data = response.data.unwrap();
assert_eq!("25dd77cb-2f71-48b9-b6be-1dacd2881418", data.request_id);
assert_eq!("taken.com", data.domain);
assert_eq!("unavailable", data.availability);
assert_eq!(Vec::<String>::new(), data.errors);
}