From e9e509511b62f2610366ff219c5f605f255dcf62 Mon Sep 17 00:00:00 2001 From: Onno Valkering Date: Wed, 18 Mar 2020 21:52:49 +0100 Subject: [PATCH] feat: add initial Workflow object model --- src/v11_wf.rs | 164 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 163 insertions(+), 1 deletion(-) diff --git a/src/v11_wf.rs b/src/v11_wf.rs index 5518c13..9ad4b71 100644 --- a/src/v11_wf.rs +++ b/src/v11_wf.rs @@ -1,10 +1,172 @@ use serde::{Deserialize, Serialize}; use serde_with::skip_serializing_none; +use serde_yaml::Value as YValue; + +type Map = std::collections::HashMap; #[skip_serializing_none] #[serde(rename_all = "camelCase")] #[derive(Clone, Debug, Deserialize, Serialize)] pub struct Workflow { - cwl_version: String, class: String, + + cwl_version: String, + + doc: Option, + + hints: Option, + + id: Option, + + inputs: WorkflowInputs, + + label: Option, + + outputs: WorkflowOutputs, + + steps: WorkflowSteps, + + requirements: Option, +} + +#[serde(untagged, rename_all = "camelCase")] +#[derive(Clone, Debug, Deserialize, Serialize)] +pub enum WorkflowDoc { + Doc(String), + Array(Vec), +} + +#[serde(untagged, rename_all = "camelCase")] +#[derive(Clone, Debug, Deserialize, Serialize)] +pub enum WorkflowInputs { + Array(Vec), + Map(Map), + Types(Map) +} + +#[skip_serializing_none] +#[serde(rename_all = "camelCase")] +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct WorkflowInputParameter { + #[serde(rename = "type")] + param_type: YValue, + + label: Option, + + secondary_files: WorkflowSecondaryFiles, + + streamable: Option, + + default: Option, + + doc: Option, + + id: Option, + + input_binding: Option, + + format: Option, + + load_contents: Option, + + load_listing: Option, +} + +#[serde(untagged, rename_all = "camelCase")] +#[derive(Clone, Debug, Deserialize, Serialize)] +pub enum WorkflowOutputs { + Array(Vec), + Map(Map), + Types(Map) +} + +#[skip_serializing_none] +#[serde(rename_all = "camelCase")] +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct WorkflowOutputParameter { + #[serde(rename = "type")] + param_type: YValue, + + label: Option, + + secondary_files: WorkflowSecondaryFiles, + + streamable: Option, + + default: Option, + + doc: Option, + + id: Option, + + format: Option, + + output_source: Option, + + link_merge: Option, +} + +#[serde(untagged, rename_all = "camelCase")] +#[derive(Clone, Debug, Deserialize, Serialize)] +pub enum WorkflowSteps { + Array(Vec), + Map(Map), +} + +#[skip_serializing_none] +#[serde(rename_all = "camelCase")] +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct WorkflowStep { + +} + +#[serde(untagged, rename_all = "camelCase")] +#[derive(Clone, Debug, Deserialize, Serialize)] +pub enum WorkflowSecondaryFiles { + SecondaryFile(SecondaryFileSchema), + Array(Vec), +} + +#[skip_serializing_none] +#[serde(rename_all = "camelCase")] +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct SecondaryFileSchema { + pub pattern: SecondaryFileSchemaPattern, + pub required: Option +} + +#[serde(untagged, rename_all = "camelCase")] +#[derive(Clone, Debug, Deserialize, Serialize)] +pub enum SecondaryFileSchemaPattern { + Pattern(String), + Expression(YValue) +} + +#[serde(untagged, rename_all = "camelCase")] +#[derive(Clone, Debug, Deserialize, Serialize)] +pub enum SecondaryFileSchemaRequired { + Required(bool), + Expression(YValue) +} + +#[serde(untagged, rename_all = "camelCase")] +#[derive(Clone, Debug, Deserialize, Serialize)] +pub enum WorkflowParameterFormat { + Format(String), + Array(Vec), + Expression(YValue), +} + +#[skip_serializing_none] +#[serde(rename_all = "camelCase")] +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct WorkflowInputBinding { + pub load_contents: Option +} + +#[serde(untagged, rename_all = "camelCase")] +#[derive(Clone, Debug, Deserialize, Serialize)] +pub enum WorkflowOutputSource { + OutputSource(String), + Array(Vec) }