use alloc::string::ToString;
use crate::rr::domain::Name;
use crate::rr::rdata::MX;
use crate::serialize::txt::errors::{ParseError, ParseErrorKind, ParseResult};
pub(crate) fn parse<'i, I: Iterator<Item = &'i str>>(
mut tokens: I,
origin: Option<&Name>,
) -> ParseResult<MX> {
let preference: u16 = tokens
.next()
.ok_or_else(|| ParseError::from(ParseErrorKind::MissingToken("preference".to_string())))
.and_then(|s| s.parse().map_err(Into::into))?;
let exchange: Name = tokens
.next()
.ok_or_else(|| ParseErrorKind::MissingToken("exchange".to_string()).into())
.and_then(|s| Name::parse(s, origin).map_err(ParseError::from))?;
Ok(MX::new(preference, exchange))
}