@@ -176,3 +176,60 @@ impl fmt::Debug for NodePath {
176
176
write ! ( f, "NodePath({})" , self . to_string( ) )
177
177
}
178
178
}
179
+
180
+ #[ cfg( feature = "serde" ) ]
181
+ mod serde {
182
+ use super :: * ;
183
+ use :: serde:: {
184
+ de:: { Error , Visitor } ,
185
+ Deserialize , Deserializer , Serialize , Serializer ,
186
+ } ;
187
+ use std:: fmt:: Formatter ;
188
+
189
+ impl Serialize for NodePath {
190
+ #[ inline]
191
+ fn serialize < S > ( & self , ser : S ) -> Result < <S as Serializer >:: Ok , <S as Serializer >:: Error >
192
+ where
193
+ S : Serializer ,
194
+ {
195
+ ser. serialize_newtype_struct ( "NodePath" , & * self . to_string ( ) )
196
+ }
197
+ }
198
+
199
+ impl < ' de > Deserialize < ' de > for NodePath {
200
+ #[ inline]
201
+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
202
+ where
203
+ D : Deserializer < ' de > ,
204
+ {
205
+ struct NodePathVisitor ;
206
+
207
+ impl < ' de > Visitor < ' de > for NodePathVisitor {
208
+ type Value = NodePath ;
209
+
210
+ fn expecting ( & self , formatter : & mut Formatter ) -> fmt:: Result {
211
+ formatter. write_str ( "a NodePath" )
212
+ }
213
+
214
+ fn visit_str < E > ( self , s : & str ) -> Result < Self :: Value , E >
215
+ where
216
+ E : Error ,
217
+ {
218
+ Ok ( NodePath :: from_str ( s) )
219
+ }
220
+
221
+ fn visit_newtype_struct < D > (
222
+ self ,
223
+ deserializer : D ,
224
+ ) -> Result < Self :: Value , <D as Deserializer < ' de > >:: Error >
225
+ where
226
+ D : Deserializer < ' de > ,
227
+ {
228
+ deserializer. deserialize_str ( self )
229
+ }
230
+ }
231
+
232
+ deserializer. deserialize_newtype_struct ( "NodePath" , NodePathVisitor )
233
+ }
234
+ }
235
+ }
0 commit comments