@@ -145,13 +145,16 @@ impl Serialize for Symbol<'_, '_> {
145145 self . serialize_state ( serializer, & ( ) )
146146 }
147147}
148+ fn skip_serializing_parent ( p : & Option < Box < VarMap > > ) -> bool {
149+ p. as_ref ( ) . map_or ( true , |p| p. parent . is_none ( ) )
150+ }
148151
149152#[ derive( Debug , Clone , Default , SerializeState , DeserializeState ) ]
150153#[ serde( crate = "serde_state" ) ]
151154#[ serde( serialize_state = "()" ) ]
152155#[ serde( de_parameters = "'a" , deserialize_state = "&'a CompCtx<'src, 'ctx>" ) ]
153156pub struct VarMap < ' src , ' ctx > {
154- #[ serde( deserialize_state) ]
157+ #[ serde( deserialize_state, skip_serializing_if = "skip_serializing_parent" ) ]
155158 pub parent : Option < Box < Self > > ,
156159 #[ serde( deserialize_state) ]
157160 pub symbols : HashMap < Cow < ' src , str > , Symbol < ' src , ' ctx > > ,
@@ -189,6 +192,12 @@ impl<'src, 'ctx> VarMap<'src, 'ctx> {
189192 self
190193 }
191194 }
195+ pub fn is_true_root ( & self ) -> bool {
196+ self . parent . is_none ( )
197+ }
198+ pub fn is_root ( & self ) -> bool {
199+ self . parent . as_ref ( ) . map_or ( true , |p| p. parent . is_none ( ) )
200+ }
192201 pub fn insert (
193202 & mut self ,
194203 name : & DottedName < ' src > ,
0 commit comments