55// Please see the LICENSE-APACHE or LICENSE-MIT files in this distribution for license details.
66// ------------------------------------------------------------------------------------------------
77
8- use serde:: Deserialize ;
9- use serde:: Serialize ;
108use thiserror:: Error ;
119
1210use crate :: arena:: Handle ;
@@ -15,7 +13,9 @@ use super::Filter;
1513use super :: ImplicationFilter ;
1614use super :: NoFilter ;
1715
18- #[ derive( Clone , Debug , Default , Deserialize , Eq , PartialEq , Serialize ) ]
16+ #[ derive( Clone , Debug , Default , Eq , PartialEq ) ]
17+ #[ cfg_attr( feature = "serde" , derive( serde:: Deserialize , serde:: Serialize ) ) ]
18+ #[ cfg_attr( feature = "bincode" , derive( bincode:: Encode , bincode:: Decode ) ) ]
1919pub struct StackGraph {
2020 pub files : Files ,
2121 pub nodes : Nodes ,
@@ -202,54 +202,62 @@ impl StackGraph {
202202 }
203203}
204204
205- #[ derive( Clone , Debug , Default , Deserialize , Eq , PartialEq , Serialize ) ]
206- #[ serde( transparent) ]
205+ #[ derive( Clone , Debug , Default , Eq , PartialEq ) ]
206+ #[ cfg_attr(
207+ feature = "serde" ,
208+ derive( serde:: Deserialize , serde:: Serialize ) ,
209+ serde( transparent)
210+ ) ]
211+ #[ cfg_attr( feature = "bincode" , derive( bincode:: Encode , bincode:: Decode ) ) ]
207212pub struct Files {
208213 pub data : Vec < String > ,
209214}
210215
211- #[ derive( Clone , Debug , Default , Deserialize , Eq , PartialEq , Serialize ) ]
212- #[ serde( transparent) ]
216+ #[ derive( Clone , Debug , Default , Eq , PartialEq ) ]
217+ #[ cfg_attr(
218+ feature = "serde" ,
219+ derive( serde:: Deserialize , serde:: Serialize ) ,
220+ serde( transparent)
221+ ) ]
222+ #[ cfg_attr( feature = "bincode" , derive( bincode:: Encode , bincode:: Decode ) ) ]
213223pub struct Nodes {
214224 pub data : Vec < Node > ,
215225}
216226
217- #[ derive( Clone , Debug , Deserialize , Eq , PartialEq , Serialize ) ]
218- #[ serde( tag = "type" , rename_all = "snake_case" ) ]
227+ #[ derive( Clone , Debug , Eq , PartialEq ) ]
228+ #[ cfg_attr(
229+ feature = "serde" ,
230+ serde_with:: skip_serializing_none, // must come before derive
231+ derive( serde:: Deserialize , serde:: Serialize ) ,
232+ serde( tag = "type" , rename_all = "snake_case" ) ,
233+ ) ]
234+ #[ cfg_attr( feature = "bincode" , derive( bincode:: Encode , bincode:: Decode ) ) ]
219235pub enum Node {
220236 DropScopes {
221237 id : NodeID ,
222- #[ serde( skip_serializing_if = "Option::is_none" ) ]
223238 source_info : Option < SourceInfo > ,
224- #[ serde( skip_serializing_if = "Option::is_none" ) ]
225239 debug_info : Option < DebugInfo > ,
226240 } ,
227241
228242 JumpToScope {
229243 id : NodeID ,
230- #[ serde( skip_serializing_if = "Option::is_none" ) ]
231244 source_info : Option < SourceInfo > ,
232- #[ serde( skip_serializing_if = "Option::is_none" ) ]
233245 debug_info : Option < DebugInfo > ,
234246 } ,
235247
236248 PopScopedSymbol {
237249 id : NodeID ,
238250 symbol : String ,
239251 is_definition : bool ,
240- #[ serde( skip_serializing_if = "Option::is_none" ) ]
241252 source_info : Option < SourceInfo > ,
242- #[ serde( skip_serializing_if = "Option::is_none" ) ]
243253 debug_info : Option < DebugInfo > ,
244254 } ,
245255
246256 PopSymbol {
247257 id : NodeID ,
248258 symbol : String ,
249259 is_definition : bool ,
250- #[ serde( skip_serializing_if = "Option::is_none" ) ]
251260 source_info : Option < SourceInfo > ,
252- #[ serde( skip_serializing_if = "Option::is_none" ) ]
253261 debug_info : Option < DebugInfo > ,
254262 } ,
255263
@@ -258,36 +266,28 @@ pub enum Node {
258266 symbol : String ,
259267 scope : NodeID ,
260268 is_reference : bool ,
261- #[ serde( skip_serializing_if = "Option::is_none" ) ]
262269 source_info : Option < SourceInfo > ,
263- #[ serde( skip_serializing_if = "Option::is_none" ) ]
264270 debug_info : Option < DebugInfo > ,
265271 } ,
266272
267273 PushSymbol {
268274 id : NodeID ,
269275 symbol : String ,
270276 is_reference : bool ,
271- #[ serde( skip_serializing_if = "Option::is_none" ) ]
272277 source_info : Option < SourceInfo > ,
273- #[ serde( skip_serializing_if = "Option::is_none" ) ]
274278 debug_info : Option < DebugInfo > ,
275279 } ,
276280
277281 Root {
278282 id : NodeID ,
279- #[ serde( skip_serializing_if = "Option::is_none" ) ]
280283 source_info : Option < SourceInfo > ,
281- #[ serde( skip_serializing_if = "Option::is_none" ) ]
282284 debug_info : Option < DebugInfo > ,
283285 } ,
284286
285287 Scope {
286288 id : NodeID ,
287289 is_exported : bool ,
288- #[ serde( skip_serializing_if = "Option::is_none" ) ]
289290 source_info : Option < SourceInfo > ,
290- #[ serde( skip_serializing_if = "Option::is_none" ) ]
291291 debug_info : Option < DebugInfo > ,
292292 } ,
293293}
@@ -322,28 +322,45 @@ impl Node {
322322 }
323323}
324324
325- #[ derive( Clone , Debug , Deserialize , Eq , PartialEq , Serialize ) ]
325+ #[ derive( Clone , Debug , Eq , PartialEq ) ]
326+ #[ cfg_attr(
327+ feature = "serde" ,
328+ serde_with:: skip_serializing_none, // must come before derive
329+ derive( serde:: Deserialize , serde:: Serialize ) ,
330+ ) ]
331+ #[ cfg_attr( feature = "bincode" , derive( bincode:: Encode , bincode:: Decode ) ) ]
326332pub struct SourceInfo {
327333 pub span : lsp_positions:: Span ,
328- #[ serde( skip_serializing_if = "Option::is_none" ) ]
329334 pub syntax_type : Option < String > ,
330335}
331336
332- #[ derive( Clone , Debug , Deserialize , Eq , PartialEq , Serialize ) ]
333- #[ serde( transparent) ]
337+ #[ derive( Clone , Debug , Eq , PartialEq ) ]
338+ #[ cfg_attr(
339+ feature = "serde" ,
340+ derive( serde:: Deserialize , serde:: Serialize ) ,
341+ serde( transparent)
342+ ) ]
343+ #[ cfg_attr( feature = "bincode" , derive( bincode:: Encode , bincode:: Decode ) ) ]
334344pub struct DebugInfo {
335345 pub data : Vec < DebugEntry > ,
336346}
337347
338- #[ derive( Clone , Debug , Deserialize , Eq , PartialEq , Serialize ) ]
348+ #[ derive( Clone , Debug , Eq , PartialEq ) ]
349+ #[ cfg_attr( feature = "serde" , derive( serde:: Deserialize , serde:: Serialize ) ) ]
350+ #[ cfg_attr( feature = "bincode" , derive( bincode:: Encode , bincode:: Decode ) ) ]
339351pub struct DebugEntry {
340352 pub key : String ,
341353 pub value : String ,
342354}
343355
344- #[ derive( Clone , Debug , Deserialize , Eq , PartialEq , Serialize ) ]
356+ #[ derive( Clone , Debug , Eq , PartialEq ) ]
357+ #[ cfg_attr(
358+ feature = "serde" ,
359+ serde_with:: skip_serializing_none, // must come before derive
360+ derive( serde:: Deserialize , serde:: Serialize ) ,
361+ ) ]
362+ #[ cfg_attr( feature = "bincode" , derive( bincode:: Encode , bincode:: Decode ) ) ]
345363pub struct NodeID {
346- #[ serde( skip_serializing_if = "Option::is_none" ) ]
347364 pub file : Option < String > ,
348365 pub local_id : u32 ,
349366}
@@ -398,18 +415,28 @@ impl std::fmt::Display for NodeID {
398415 }
399416}
400417
401- #[ derive( Clone , Debug , Default , Deserialize , Eq , PartialEq , Serialize ) ]
402- #[ serde( transparent) ]
418+ #[ derive( Clone , Debug , Default , Eq , PartialEq ) ]
419+ #[ cfg_attr(
420+ feature = "serde" ,
421+ derive( serde:: Deserialize , serde:: Serialize ) ,
422+ serde( transparent)
423+ ) ]
424+ #[ cfg_attr( feature = "bincode" , derive( bincode:: Encode , bincode:: Decode ) ) ]
403425pub struct Edges {
404426 pub data : Vec < Edge > ,
405427}
406428
407- #[ derive( Clone , Debug , Deserialize , Eq , PartialEq , Serialize ) ]
429+ #[ derive( Clone , Debug , Eq , PartialEq ) ]
430+ #[ cfg_attr(
431+ feature = "serde" ,
432+ serde_with:: skip_serializing_none, // must come before derive
433+ derive( serde:: Deserialize , serde:: Serialize ) ,
434+ ) ]
435+ #[ cfg_attr( feature = "bincode" , derive( bincode:: Encode , bincode:: Decode ) ) ]
408436pub struct Edge {
409437 pub source : NodeID ,
410438 pub sink : NodeID ,
411439 pub precedence : i32 ,
412- #[ serde( skip_serializing_if = "Option::is_none" ) ]
413440 pub debug_info : Option < DebugInfo > ,
414441}
415442
0 commit comments