1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
use rpser::xml::BuildElement; use xmltree::Element; use {Page, PageSummary, Result, Space}; pub trait FromElement { fn from_element(element: Element) -> Result<Self> where Self: Sized; } impl FromElement for Space { fn from_element(element: Element) -> Result<Space> { Ok(Space { description: try!(element.get_at_path(&["description"])).text, home_page: try!(element.get_at_path(&["homePage"]).and_then(|e| e.as_long())), key: try!(element.get_at_path(&["key"]).and_then(|e| e.as_string())), name: try!(element.get_at_path(&["name"]).and_then(|e| e.as_string())), space_group: try!(element.get_at_path(&["name"])).text, space_type: try!(element.get_at_path(&["type"]).and_then(|e| e.as_string())), url: try!(element.get_at_path(&["url"]).and_then(|e| e.as_string())), }) } } impl FromElement for Page { fn from_element(element: Element) -> Result<Page> { Ok(Page { id: try!(element.get_at_path(&["id"]).and_then(|e| e.as_long())), space: try!(element.get_at_path(&["space"]).and_then(|e| e.as_string())), parent_id: try!(element.get_at_path(&["parentId"]).and_then(|e| e.as_long())), title: try!(element.get_at_path(&["title"]).and_then(|e| e.as_string())), url: try!(element.get_at_path(&["url"]).and_then(|e| e.as_string())), version: try!(element.get_at_path(&["version"]).and_then(|e| e.as_int())), content: try!(element .get_at_path(&["content"]) .and_then(|e| e.as_string())), created: try!(element .get_at_path(&["created"]) .and_then(|e| e.as_datetime())), creator: try!(element .get_at_path(&["creator"]) .and_then(|e| e.as_string())), modified: try!(element .get_at_path(&["modified"]) .and_then(|e| e.as_datetime())), modifier: try!(element .get_at_path(&["modifier"]) .and_then(|e| e.as_string())), home_page: try!(element .get_at_path(&["homePage"]) .and_then(|e| e.as_boolean())), content_status: try!(element .get_at_path(&["contentStatus"]) .and_then(|e| e.as_string())), current: try!(element .get_at_path(&["current"]) .and_then(|e| e.as_boolean())), }) } } impl FromElement for PageSummary { fn from_element(element: Element) -> Result<PageSummary> { Ok(PageSummary { id: try!(element.get_at_path(&["id"]).and_then(|e| e.as_long())), space: try!(element.get_at_path(&["space"]).and_then(|e| e.as_string())), parent_id: try!(element.get_at_path(&["parentId"]).and_then(|e| e.as_long())), title: try!(element.get_at_path(&["title"]).and_then(|e| e.as_string())), url: try!(element.get_at_path(&["url"]).and_then(|e| e.as_string())), }) } }