39 lines
1.6 KiB
Rust
39 lines
1.6 KiB
Rust
use cloud_objects::cloud_object::{
|
|
GenericCloudObject, GenericServerObject, GenericStringModel, JsonObjectType,
|
|
};
|
|
use cloud_objects::ids::GenericStringObjectId;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::{JsonModel, JsonSerializer};
|
|
|
|
/// Data model for a workflow enum, one type of argument that can be inserted into a workflow
|
|
/// A workflow enum can either be static or dynamic, as determined by the type of `EnumVariants` it uses
|
|
///
|
|
/// A `Static` enum contains a finite set of user-specified string values
|
|
/// A `Dynamic` enum contains a single shell command, which is executed to determine suggested variants for that argument
|
|
#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq, Hash, PartialOrd)]
|
|
pub struct WorkflowEnum {
|
|
/// Enum name
|
|
pub name: String,
|
|
/// Whether or not the variable should be visible to other workflows
|
|
pub is_shared: bool,
|
|
/// The variants for this enum
|
|
pub variants: EnumVariants,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq, Hash, PartialOrd)]
|
|
pub enum EnumVariants {
|
|
Static(Vec<String>), // contains the explicit variants for a static enum
|
|
Dynamic(String), // contains the value of the shell command associated with the dynamic enum
|
|
}
|
|
|
|
impl JsonModel for WorkflowEnum {
|
|
fn json_object_type() -> JsonObjectType {
|
|
JsonObjectType::WorkflowEnum
|
|
}
|
|
}
|
|
|
|
pub type CloudWorkflowEnum = GenericCloudObject<GenericStringObjectId, CloudWorkflowEnumModel>;
|
|
pub type CloudWorkflowEnumModel = GenericStringModel<WorkflowEnum, JsonSerializer>;
|
|
pub type ServerWorkflowEnum = GenericServerObject<GenericStringObjectId, CloudWorkflowEnumModel>;
|