Add a generate_element_with_only_attributes macro, and use it wherever it makes sense.
This commit is contained in:
parent
ed53f452c3
commit
929bd577f3
10 changed files with 92 additions and 365 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in a new issue