diff options
Diffstat (limited to 'src/document_tree/elements.rs')
| -rw-r--r-- | src/document_tree/elements.rs | 25 | 
1 files changed, 12 insertions, 13 deletions
| diff --git a/src/document_tree/elements.rs b/src/document_tree/elements.rs index 681c52e..900d1d4 100644 --- a/src/document_tree/elements.rs +++ b/src/document_tree/elements.rs @@ -2,8 +2,9 @@ use url::Url;  use serde::{      Serialize,      Serializer, -    ser::{SerializeStruct}, +    ser::SerializeStruct,  }; +use serde_derive::Serialize;  use super::extra_attributes::{self,ExtraAttributes};  use super::element_categories::*; @@ -81,15 +82,13 @@ macro_rules! impl_serialize {  	($name: ident, $extra: ident, $childtype: ident) => {  		impl Serialize for $name {  			fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer { -				#[allow(unused_mut)] -				let mut state = serializer.serialize_struct(stringify!($name), 3)?; -				// TODO: common attrs -				impl_cond__! { $extra => -					 -				} -				impl_cond__! { $childtype => -					state.serialize_field("children", self.children())?; -				} +				let mut state = serializer.serialize_struct(stringify!($name), 6)?; +				state.serialize_field("ids", self.ids())?; +				state.serialize_field("names", self.names())?; +				state.serialize_field("source", &self.source().as_ref().map(|uri| uri.to_string()))?; +				state.serialize_field("classes", self.classes())?; +				state.serialize_field("extra", &impl_cond__!($extra ? self.extra()))?; +				state.serialize_field("children", &impl_cond__!($childtype ? self.children()))?;  				state.end()  			}  		} @@ -97,8 +96,8 @@ macro_rules! impl_serialize {  }  macro_rules! impl_cond__ { -	(__ => $($b:tt)*) => {}; -	($thing: ident => $($b:tt)*) => { $($b)* }; +	(__ ? $($b:tt)*) => { None::<Option<()>> }; +	($thing: ident ? $($b:tt)*) => { $($b)* };  }  macro_rules! impl_elem { @@ -134,7 +133,7 @@ macro_rules! impl_elems { ( $( ($($args:tt)*) )* ) => (  )} -#[derive(Default,Debug)] +#[derive(Default,Debug,Serialize)]  pub struct Document { children: Vec<StructuralSubElement> }  impl_children!(Document, StructuralSubElement); | 
