daedalus_runtime/
debug.rs

1//! Debug helpers for serializing/deserializing runtime plans.
2//! ```
3//! use daedalus_runtime::{debug, RuntimePlan, RuntimeSegment, RuntimeNode, EdgePolicyKind};
4//! use daedalus_planner::ComputeAffinity;
5//!
6//! let plan = RuntimePlan {
7//!     default_policy: EdgePolicyKind::Fifo,
8//!     backpressure: daedalus_runtime::BackpressureStrategy::None,
9//!     lockfree_queues: false,
10//!     graph_metadata: Default::default(),
11//!     nodes: vec![
12//!         RuntimeNode {
13//!             id: "a".into(),
14//!             bundle: None,
15//!             label: None,
16//!             compute: ComputeAffinity::CpuOnly,
17//!             const_inputs: vec![],
18//!             sync_groups: vec![],
19//!             metadata: Default::default(),
20//!         }
21//!     ],
22//!     edges: vec![],
23//!     gpu_edges: vec![],
24//!     gpu_entries: vec![],
25//!     gpu_exits: vec![],
26//!     segments: vec![RuntimeSegment { nodes: vec![], compute: ComputeAffinity::CpuOnly }],
27//!     schedule_order: vec![],
28//!     gpu_segments: vec![],
29//! };
30//! let json = debug::to_pretty_json(&plan);
31//! let round = debug::from_json(&json).unwrap();
32//! assert_eq!(plan.nodes.len(), round.nodes.len());
33//! ```
34
35use crate::RuntimePlan;
36
37/// Serialize a runtime plan to pretty-printed JSON.
38pub fn to_pretty_json(plan: &RuntimePlan) -> String {
39    serde_json::to_string_pretty(plan).expect("serialize runtime plan")
40}
41
42/// Serialize a runtime plan to compact JSON.
43pub fn to_json(plan: &RuntimePlan) -> String {
44    serde_json::to_string(plan).expect("serialize runtime plan")
45}
46
47/// Deserialize a runtime plan from JSON.
48pub fn from_json(s: &str) -> Result<RuntimePlan, serde_json::Error> {
49    serde_json::from_str(s)
50}