1- use std:: { collections:: HashMap , path:: Path } ;
2-
3- use commonwl:: { StringOrDocument , load_doc, prelude:: * } ;
1+ use commonwl:: { StringOrDocument , load_doc, load_workflow, prelude:: * } ;
42use petgraph:: { graph:: NodeIndex , prelude:: StableDiGraph } ;
3+ use std:: { collections:: HashMap , path:: Path } ;
54
65#[ derive( Debug , Clone ) ]
76pub enum Node {
@@ -19,14 +18,26 @@ pub struct Edge {
1918
2019type WorkflowGraph = StableDiGraph < Node , Edge > ;
2120
21+ pub fn load_workflow_graph ( path : impl AsRef < Path > ) -> anyhow:: Result < WorkflowGraph > {
22+ let workflow = load_workflow ( path. as_ref ( ) ) . map_err ( |e| anyhow:: anyhow!( "{e}" ) ) ?;
23+ let wgb = WorkflowGraphBuilder :: from_workflow ( & workflow, path) ?;
24+ Ok ( wgb. graph )
25+ }
26+
2227#[ derive( Default ) ]
23- pub struct WorkflowGraphBuilder {
28+ struct WorkflowGraphBuilder {
2429 pub graph : WorkflowGraph ,
2530 node_map : HashMap < String , NodeIndex > ,
2631}
2732
2833impl WorkflowGraphBuilder {
29- pub fn from_workflow ( & mut self , workflow : & Workflow , path : impl AsRef < Path > ) -> anyhow:: Result < ( ) > {
34+ fn from_workflow ( workflow : & Workflow , path : impl AsRef < Path > ) -> anyhow:: Result < Self > {
35+ let mut builder = Self :: default ( ) ;
36+ builder. load_workflow ( workflow, path) ?;
37+ Ok ( builder)
38+ }
39+
40+ fn load_workflow ( & mut self , workflow : & Workflow , path : impl AsRef < Path > ) -> anyhow:: Result < ( ) > {
3041 for input in & workflow. inputs {
3142 let node_id = self . graph . add_node ( Node :: Input ( input. clone ( ) ) ) ;
3243 self . node_map . insert ( input. id . clone ( ) , node_id) ;
0 commit comments