Add a generate_element_with_only_attributes macro, and use it wherever it makes sense.

This commit is contained in:
Emmanuel Gil Peyrot 2017-10-31 17:58:11 +00:00
commit 929bd577f3
10 changed files with 92 additions and 365 deletions

View file

@ -12,68 +12,11 @@ use error::Error;
use ns;
#[derive(Debug, Clone)]
pub struct Request;
generate_empty_element!(Request, "request", ns::RECEIPTS);
impl TryFrom<Element> for Request {
type Err = Error;
fn try_from(elem: Element) -> Result<Request, Error> {
if !elem.is("request", ns::RECEIPTS) {
return Err(Error::ParseError("This is not a request element."));
}
for _ in elem.children() {
return Err(Error::ParseError("Unknown child in request element."));
}
for _ in elem.attrs() {
return Err(Error::ParseError("Unknown attribute in request element."));
}
Ok(Request)
}
}
impl From<Request> for Element {
fn from(_: Request) -> Element {
Element::builder("request")
.ns(ns::RECEIPTS)
.build()
}
}
#[derive(Debug, Clone)]
pub struct Received {
pub id: Option<String>,
}
impl TryFrom<Element> for Received {
type Err = Error;
fn try_from(elem: Element) -> Result<Received, Error> {
if !elem.is("received", ns::RECEIPTS) {
return Err(Error::ParseError("This is not a received element."));
}
for _ in elem.children() {
return Err(Error::ParseError("Unknown child in received element."));
}
for (attr, _) in elem.attrs() {
if attr != "id" {
return Err(Error::ParseError("Unknown attribute in received element."));
}
}
Ok(Received {
id: get_attr!(elem, "id", optional),
})
}
}
impl From<Received> for Element {
fn from(received: Received) -> Element {
Element::builder("received")
.ns(ns::RECEIPTS)
.attr("id", received.id)
.build()
}
}
generate_element_with_only_attributes!(Received, "received", ns::RECEIPTS, [
id: Option<String> = "id" => optional,
]);
#[cfg(test)]
mod tests {