Skip to content

Commit ceef5c2

Browse files
committed
Improve the lib
1 parent c1e2dc7 commit ceef5c2

File tree

1 file changed

+55
-11
lines changed

1 file changed

+55
-11
lines changed

src/lib.rs

+55-11
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@ use std::str::FromStr;
88
use std::{error::Error, fmt};
99

1010
#[derive(Clone, Debug, PartialEq)]
11-
pub struct PtrResult {
12-
// For example: one.one.one.one.
13-
// For example: dns.google.
11+
/// The result of resolving the pointer or the IP
12+
pub struct ResolvedResult {
13+
/// For example: one.one.one.one.
14+
/// For example: dns.google.
1415
pub query: Name,
15-
// For example: 1.1.1.1.in-addr.arpa.
16-
// For example: 8.8.8.8.in-addr.arpa.
16+
/// For example: 1.1.1.1.in-addr.arpa.
17+
/// For example: 8.8.8.8.in-addr.arpa.
1718
pub result: Option<Name>,
1819
pub error: Option<String>,
1920
}
@@ -33,11 +34,32 @@ impl fmt::Display for ResolvingError {
3334

3435
/**
3536
* Resolve a DNS IP adddress (IPv4/IPv6) into a DNS pointer
37+
* ```
38+
* use hickory_client::client::SyncClient;
39+
* use hickory_client::rr::Name;
40+
* use hickory_client::tcp::TcpClientConnection;
41+
*
42+
* use dns_ptr_resolver::{get_ptr, ResolvedResult};
43+
*
44+
* let server = "1.1.1.1:53".parse().expect("To parse");
45+
* let conn = TcpClientConnection::with_timeout(server, std::time::Duration::new(5, 0)).unwrap();
46+
* let client = SyncClient::new(conn);
47+
* let query_address = "8.8.8.8".parse().expect("To parse");
48+
*
49+
* assert_eq!(
50+
* get_ptr(query_address, client).unwrap(),
51+
* ResolvedResult {
52+
* query: Name::from_str_relaxed("8.8.8.8.in-addr.arpa.").unwrap(),
53+
* result: Some(Name::from_str_relaxed("dns.google.").unwrap()),
54+
* error: None,
55+
* }
56+
* );
57+
* ```
3658
*/
3759
pub fn get_ptr(
3860
ip_address: IpAddr,
3961
client: SyncClient<TcpClientConnection>,
40-
) -> Result<PtrResult, ResolvingError> {
62+
) -> Result<ResolvedResult, ResolvingError> {
4163
// Specify the name, note the final '.' which specifies it's an FQDN
4264
match Name::from_str(&reverse(ip_address)) {
4365
Ok(name) => ptr_resolve(name, client),
@@ -53,11 +75,33 @@ pub fn get_ptr(
5375

5476
/**
5577
* This will resolve a name into its DNS pointer value
78+
* ```
79+
* use hickory_client::client::SyncClient;
80+
* use hickory_client::rr::Name;
81+
* use hickory_client::tcp::TcpClientConnection;
82+
*
83+
* use dns_ptr_resolver::{ptr_resolve, ResolvedResult};
84+
*
85+
* let server = "8.8.8.8:53".parse().expect("To parse");
86+
* let conn = TcpClientConnection::with_timeout(server, std::time::Duration::new(5, 0)).unwrap();
87+
* let client = SyncClient::new(conn);
88+
*
89+
* let name_to_resolve = Name::from_str_relaxed("1.1.1.1.in-addr.arpa.").unwrap();
90+
*
91+
* assert_eq!(
92+
* ptr_resolve(name_to_resolve.clone(), client).unwrap(),
93+
* ResolvedResult {
94+
* query: name_to_resolve,
95+
* result: Some(Name::from_str_relaxed("one.one.one.one.").unwrap()),
96+
* error: None,
97+
* }
98+
* );
99+
* ```
56100
*/
57101
pub fn ptr_resolve(
58102
name: Name,
59103
client: SyncClient<TcpClientConnection>,
60-
) -> Result<PtrResult, ResolvingError> {
104+
) -> Result<ResolvedResult, ResolvingError> {
61105
let response: DnsResponse = match client.query(&name, DNSClass::IN, RecordType::PTR) {
62106
Ok(res) => res,
63107
Err(err) => {
@@ -70,7 +114,7 @@ pub fn ptr_resolve(
70114
let answers: &[Record] = response.answers();
71115

72116
if answers.len() == 0 {
73-
return Ok(PtrResult {
117+
return Ok(ResolvedResult {
74118
query: name,
75119
result: None,
76120
error: None,
@@ -79,7 +123,7 @@ pub fn ptr_resolve(
79123

80124
match answers[0].data() {
81125
Some(RData::PTR(res)) => {
82-
return Ok(PtrResult {
126+
return Ok(ResolvedResult {
83127
query: name,
84128
result: Some(res.to_lowercase()),
85129
error: None,
@@ -130,7 +174,7 @@ mod test {
130174

131175
assert_eq!(
132176
get_ptr(query_address, client).unwrap(),
133-
PtrResult {
177+
ResolvedResult {
134178
query: Name::from_str_relaxed("8.8.8.8.in-addr.arpa.").unwrap(),
135179
result: Some(Name::from_str_relaxed("dns.google.").unwrap()),
136180
error: None,
@@ -157,7 +201,7 @@ mod test {
157201

158202
assert_eq!(
159203
ptr_resolve(name_to_resolve.clone(), client).unwrap(),
160-
PtrResult {
204+
ResolvedResult {
161205
query: name_to_resolve,
162206
result: Some(Name::from_str_relaxed("one.one.one.one.").unwrap()),
163207
error: None,

0 commit comments

Comments
 (0)