@@ -3,7 +3,7 @@ use super::{
33 inputs:: WorkflowStepInput ,
44 outputs:: WorkflowOutputParameter ,
55} ;
6- use crate :: DocumentBase ;
6+ use crate :: { CWLDocument , DocumentBase } ;
77use serde:: { Deserialize , Serialize } ;
88use std:: {
99 collections:: { HashMap , VecDeque } ,
@@ -15,7 +15,7 @@ use std::{
1515/// directed acyclic graph, and independent steps may run concurrently.
1616///
1717/// Reference: <https://www.commonwl.org/v1.2/Workflow.html>
18- #[ derive( Serialize , Deserialize , Debug , PartialEq ) ]
18+ #[ derive( Serialize , Deserialize , Debug , PartialEq , Clone ) ]
1919#[ serde( rename_all = "camelCase" ) ]
2020pub struct Workflow {
2121 #[ serde( flatten) ]
@@ -34,7 +34,7 @@ impl Default for Workflow {
3434 label : None ,
3535 doc : None ,
3636 class : String :: from ( "Workflow" ) ,
37- cwl_version : String :: from ( "v1.2" ) ,
37+ cwl_version : Some ( String :: from ( "v1.2" ) ) ,
3838 requirements : Default :: default ( ) ,
3939 hints : Default :: default ( ) ,
4040 inputs : Default :: default ( ) ,
@@ -102,7 +102,6 @@ impl Workflow {
102102 step. unwrap ( ) . out . iter ( ) . any ( |output| output == parts[ 1 ] )
103103 }
104104
105-
106105 /// Returns the `Workflow`'s `WorkflowStep` with id `id`
107106 pub fn get_step ( & self , id : & str ) -> Option < & WorkflowStep > {
108107 self . steps . iter ( ) . find ( |s| s. id == * id)
@@ -166,7 +165,7 @@ impl Workflow {
166165pub struct WorkflowStep {
167166 #[ serde( default ) ]
168167 pub id : String ,
169- pub run : String ,
168+ pub run : StringOrDocument ,
170169 pub in_ : HashMap < String , WorkflowStepInput > ,
171170 pub out : Vec < String > ,
172171}
@@ -181,6 +180,19 @@ impl Identifiable for WorkflowStep {
181180 }
182181}
183182
183+ #[ derive( Serialize , Deserialize , Debug , PartialEq , Clone ) ]
184+ #[ serde( untagged) ]
185+ pub enum StringOrDocument {
186+ String ( String ) ,
187+ Document ( Box < CWLDocument > ) ,
188+ }
189+
190+ impl Default for StringOrDocument {
191+ fn default ( ) -> Self {
192+ Self :: String ( String :: default ( ) )
193+ }
194+ }
195+
184196#[ cfg( test) ]
185197mod tests {
186198 use super :: * ;
0 commit comments