util: implement common record types in borrowed -> owned conversion
This commit is contained in:
parent
a24088e17b
commit
dc5171a598
35
src/util.rs
35
src/util.rs
|
@ -1,7 +1,7 @@
|
||||||
use domain::base::{
|
use domain::base::{
|
||||||
octets::Parser, rdata::ParseRecordData, Compose, Dname, Message, ParsedDname, Rtype, ToDname,
|
octets::Parser, rdata::ParseRecordData, Compose, Dname, Message, ParsedDname, Rtype, ToDname,
|
||||||
};
|
};
|
||||||
use domain::rdata::{AllRecordData, Cname};
|
use domain::rdata::{AllRecordData, Cname, Mx, Ptr, Soa, Srv, Txt};
|
||||||
use js_sys::{Math, Promise};
|
use js_sys::{Math, Promise};
|
||||||
use std::ops::Add;
|
use std::ops::Add;
|
||||||
use std::{collections::hash_map::DefaultHasher, hash::Hasher};
|
use std::{collections::hash_map::DefaultHasher, hash::Hasher};
|
||||||
|
@ -72,12 +72,35 @@ pub fn to_owned_record_data<T: AsRef<[u8]>, U: AsRef<[u8]>>(
|
||||||
match data {
|
match data {
|
||||||
AllRecordData::A(data) => Ok(AllRecordData::A(data.clone())),
|
AllRecordData::A(data) => Ok(AllRecordData::A(data.clone())),
|
||||||
AllRecordData::Aaaa(data) => Ok(AllRecordData::Aaaa(data.clone())),
|
AllRecordData::Aaaa(data) => Ok(AllRecordData::Aaaa(data.clone())),
|
||||||
AllRecordData::Cname(data) => Ok(AllRecordData::Cname(Cname::new(
|
AllRecordData::Cname(data) => Ok(AllRecordData::Cname(Cname::new(data.cname().to_vec()))),
|
||||||
data.cname()
|
AllRecordData::Mx(data) => Ok(AllRecordData::Mx(Mx::new(
|
||||||
.to_dname()
|
data.preference(),
|
||||||
.map_err(|_| "Failed parsing CNAME".to_string())?,
|
data.exchange().to_vec(),
|
||||||
))),
|
))),
|
||||||
// TODO: Fill all of these in
|
AllRecordData::Ptr(data) => Ok(AllRecordData::Ptr(Ptr::new(data.ptrdname().to_vec()))),
|
||||||
|
AllRecordData::Soa(data) => Ok(AllRecordData::Soa(Soa::new(
|
||||||
|
data.mname().to_vec(),
|
||||||
|
data.rname().to_vec(),
|
||||||
|
data.serial(),
|
||||||
|
data.refresh(),
|
||||||
|
data.retry(),
|
||||||
|
data.expire(),
|
||||||
|
data.minimum(),
|
||||||
|
))),
|
||||||
|
AllRecordData::Txt(data) => Ok(AllRecordData::Txt(
|
||||||
|
Txt::from_slice(
|
||||||
|
data.as_flat_slice()
|
||||||
|
.ok_or("Cannot parse TXT record".to_string())?,
|
||||||
|
)
|
||||||
|
.map_err(|_| "Cannot parse TXT record".to_string())?,
|
||||||
|
)),
|
||||||
|
AllRecordData::Srv(data) => Ok(AllRecordData::Srv(Srv::new(
|
||||||
|
data.priority(),
|
||||||
|
data.weight(),
|
||||||
|
data.port(),
|
||||||
|
data.target().to_vec(),
|
||||||
|
))),
|
||||||
|
// Unimplemented / Unrecognized records
|
||||||
_ => Err("Unsupported record type".to_string()),
|
_ => Err("Unsupported record type".to_string()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue