use super::{
item::Item,
misc::{BracketDirection, BracketType},
};
#[allow(dead_code)]
#[derive(Debug, Clone)]
#[allow(clippy::enum_variant_names)] pub enum Block<'a> {
Code {
block: &'a str,
items: Vec<Item>,
action: String,
data: &'a str,
target: &'a str,
inverted: &'a str,
sub_action: String,
},
EventDefinition { block: &'a str, action: String },
FunctionDefinition { block: &'a str, data: String },
ProcessDefinition { block: &'a str, data: String },
FunctionCall { block: &'a str, data: String },
ProcessCall { block: &'a str, data: String },
Bracket {
direct: BracketDirection,
typ: BracketType,
},
}
static START_PROCESS_DEFAULT: &str = include_str!("../../backend/static/START_PROCESS_ITEMS");
#[allow(dead_code, unused)]
impl Block<'_> {
pub fn to_json(&self) -> String {
match self {
Block::Code {
block,
items,
action,
data,
target,
inverted,
sub_action,
} => {
let mut items_str = String::new();
for item in items {
items_str.push_str(item.to_json().as_str());
items_str.push(',');
}
items_str.pop();
format!(
r#"{{"id":"block","block":"{block}","args":{{"items":[{items_str}]}},"action":"{action}","target":"{target}","inverted":"{inverted}","data":"{data}","subAction":"{sub_action}"}}"#
)
}
Block::EventDefinition { block, action } => format!(
r#"{{"id":"block","block":"{block}","action":"{action}","args":{{"items":[]}}}}"#
),
Block::Bracket { direct, typ } => format!(
r#"{{"id":"bracket","direct":"{}","type":"{}"}}"#,
direct.to_json(),
typ.to_json()
),
Block::FunctionDefinition { block, data } => {
format!(
r#"{{"id":"block","block":"{block}","args":{{"items":[]}},"data":"{data}"}}"#
)
}
Block::FunctionCall { block, data } => {
format!(r#"{{"id":"block","block":"{block}","data":"{data}"}}"#)
}
Block::ProcessDefinition { block, data } => format!(
r#"{{"id":"block","block":"{block}","args":{{"items":[]}},"data":"{data}"}}"#
),
Block::ProcessCall { block, data } => format!(
r#"{{"id":"block","block":"{block}","data":"{data}","args":{{"items":[{START_PROCESS_DEFAULT}]}}}}"#
),
}
}
}