diff --git a/lib/dnsbox-base/src/common_types/name/label.rs b/lib/dnsbox-base/src/common_types/name/label.rs index 89f7030..4c9ea8f 100644 --- a/lib/dnsbox-base/src/common_types/name/label.rs +++ b/lib/dnsbox-base/src/common_types/name/label.rs @@ -148,12 +148,11 @@ impl<'a> DnsLabelRef<'a> { } fn compare_ascii_lc(lhs: &[u8], rhs: &[u8]) -> Ordering { - use std::ascii::AsciiExt; use std::cmp::min; let l = min(lhs.len(), rhs.len()); for i in 0..l { - let a : u8 = AsciiExt::to_ascii_lowercase(&lhs[i]); - let b : u8 = AsciiExt::to_ascii_lowercase(&rhs[i]); + let a: u8 = lhs[i].to_ascii_lowercase(); + let b: u8 = rhs[i].to_ascii_lowercase(); match Ord::cmp(&a, &b) { Ordering::Equal => continue, c => return c, @@ -170,8 +169,7 @@ impl<'a> From<&'a DnsLabel> for DnsLabelRef<'a> { impl<'a, 'b> PartialEq> for DnsLabelRef<'b> { fn eq(&self, rhs: &DnsLabelRef<'a>) -> bool { - use std::ascii::AsciiExt; - AsciiExt::eq_ignore_ascii_case(self.as_raw(), rhs.as_raw()) + self.as_raw().eq_ignore_ascii_case(rhs.as_raw()) } } diff --git a/lib/dnsbox-base/src/ser/rrdata.rs b/lib/dnsbox-base/src/ser/rrdata.rs index 86e21fa..9d28049 100644 --- a/lib/dnsbox-base/src/ser/rrdata.rs +++ b/lib/dnsbox-base/src/ser/rrdata.rs @@ -48,27 +48,6 @@ pub trait RRDataText { fn dns_format_rr_data(&self, f: &mut DnsTextFormatter) -> fmt::Result; fn rr_type_txt(&self) -> Cow<'static, str>; - - // (type, rrdata) - fn text(&self) -> Result<(String, String)> - where - Self: RRDataPacket, - { - let mut buf = String::new(); - match self.dns_format_rr_data(&mut DnsTextFormatter::new(&mut buf)) { - Ok(()) => { - return Ok((self.rr_type_txt().into(), buf)) - }, - Err(_) => (), - } - let mut raw = Vec::new(); - self.serialize_rr_data(&mut DnsPacketWriteContext::new(), &mut raw)?; - let ur = UnknownRecord::new(self.rr_type(), raw.into()); - // formatting UnknownRecord should not fail - buf.clear(); - ur.dns_format_rr_data(&mut DnsTextFormatter::new(&mut buf)).expect("formatting UnknownRecord must not fail"); - Ok((ur.rr_type_txt().into(), buf)) - } } impl RRDataText for T { @@ -98,6 +77,24 @@ pub trait RRData: RRDataPacket + RRDataText + fmt::Debug + 'static { fn clone_box(&self) -> Box; fn as_any(&self) -> &Any; + + // (type, rrdata) + fn text(&self) -> Result<(String, String)> { + let mut buf = String::new(); + match self.dns_format_rr_data(&mut DnsTextFormatter::new(&mut buf)) { + Ok(()) => { + return Ok((self.rr_type_txt().into(), buf)) + }, + Err(_) => (), + } + let mut raw = Vec::new(); + self.serialize_rr_data(&mut DnsPacketWriteContext::new(), &mut raw)?; + let ur = UnknownRecord::new(self.rr_type(), raw.into()); + // formatting UnknownRecord should not fail + buf.clear(); + ur.dns_format_rr_data(&mut DnsTextFormatter::new(&mut buf)).expect("formatting UnknownRecord must not fail"); + Ok((ur.rr_type_txt().into(), buf)) + } } impl Clone for Box { diff --git a/lib/dnsbox-base/src/ser/text/mod.rs b/lib/dnsbox-base/src/ser/text/mod.rs index d61ed83..2bc73bf 100644 --- a/lib/dnsbox-base/src/ser/text/mod.rs +++ b/lib/dnsbox-base/src/ser/text/mod.rs @@ -5,11 +5,11 @@ mod std_impls; pub mod quoted; pub fn skip_whitespace(data: &mut &str) { - *data = (*data).trim_left(); + *data = (*data).trim_start(); } pub fn next_field<'a>(data: &mut &'a str) -> ::errors::Result<&'a str> { - *data = (*data).trim_left(); + *data = (*data).trim_start(); if data.is_empty() { bail!("missing field"); } match data.find(char::is_whitespace) { None => { @@ -19,14 +19,14 @@ pub fn next_field<'a>(data: &mut &'a str) -> ::errors::Result<&'a str> { }, Some(next) => { let result = &(*data)[..next]; - *data = &(*data)[next..].trim_left(); + *data = &(*data)[next..].trim_start(); Ok(result) }, } } pub fn next_quoted_field(data: &mut &str) -> ::errors::Result> { - *data = (*data).trim_left(); + *data = (*data).trim_start(); if data.is_empty() { bail!("missing field"); } let result = quoted::UnquoteIterator::new(data).collect::, _>>()?; diff --git a/lib/dnsbox-base/src/ser/text/quoted.rs b/lib/dnsbox-base/src/ser/text/quoted.rs index f3d98ed..09cb2cc 100644 --- a/lib/dnsbox-base/src/ser/text/quoted.rs +++ b/lib/dnsbox-base/src/ser/text/quoted.rs @@ -149,14 +149,14 @@ impl<'a, 'b: 'a> Iterator for UnquoteIterator<'a, 'b> { } // eat terminating quote // pos+1 is obviously a good utf-8 boundary - *self.data = self.data[self.pos+1..].trim_left(); + *self.data = self.data[self.pos+1..].trim_start(); return None; } else { return self.err("quote in the middle of unquoted string"); } } else if !self.quoted && is_ascii_whitespace(raw[self.pos]) { // pos is obviously a good utf-8 boundary - *self.data = self.data[self.pos..].trim_left(); + *self.data = self.data[self.pos..].trim_start(); return None; } else if raw[self.pos] == b'\\' { if self.pos + 1 >= raw.len() { return self.err("unexpected end of string after backslash"); } diff --git a/lib/dnsbox-derive/src/rrdata.rs b/lib/dnsbox-derive/src/rrdata.rs index c519e8b..da27917 100644 --- a/lib/dnsbox-derive/src/rrdata.rs +++ b/lib/dnsbox-derive/src/rrdata.rs @@ -97,7 +97,7 @@ pub fn build(ast: &syn::DeriveInput) -> quote::Tokens { #[test] fn test_registry() { - registry::check_registration::<#name>(); + registry::check_registration::(); } } } diff --git a/src/bin/resolver/cache/mod.rs b/src/bin/resolver/cache/mod.rs index 4eab35d..040a612 100644 --- a/src/bin/resolver/cache/mod.rs +++ b/src/bin/resolver/cache/mod.rs @@ -1,13 +1,11 @@ use dnsbox_base::common_types::{Type, DnsName}; use dnsbox_base::failure::Error; -use dnsbox_base::packet::Resource; use dnsbox_base::ser::RRData; use futures::{Future, Poll, Async}; use futures::unsync::oneshot; use std::cell::RefCell; use std::collections::HashMap; use std::mem::replace; -use std::net::{Ipv4Addr, Ipv6Addr}; use std::rc::Rc; use std::time::Duration; diff --git a/src/bin/resolver/cache/root_hints.rs b/src/bin/resolver/cache/root_hints.rs index e533d18..8e2c603 100644 --- a/src/bin/resolver/cache/root_hints.rs +++ b/src/bin/resolver/cache/root_hints.rs @@ -1,6 +1,5 @@ -use dnsbox_base::common_types::{types, classes}; +use dnsbox_base::common_types::{types}; use dnsbox_base::common_types::{DnsName, DnsCompressedName}; -use dnsbox_base::packet::Resource; use dnsbox_base::records::{NS, A, AAAA}; use dnsbox_base::ser::RRData; use std::net::{Ipv4Addr, Ipv6Addr};