1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
#[macro_use] extern crate serde_derive; extern crate ommui_file_loading; extern crate ommui_string_patterns; extern crate xio_base_datatypes; use ommui_string_patterns::{freetextstring, idstring, idstring_maybe_empty}; use std::collections::BTreeMap; use xio_base_datatypes as base; pub mod filesystem; pub type InstructionMap = BTreeMap<String, Instruction>; #[derive(Clone, Serialize, Deserialize, Debug, PartialEq)] #[serde(rename_all = "camelCase", deny_unknown_fields)] pub struct Instruction { pub code: u16, #[serde(with = "freetextstring")] pub description: String, #[serde(with = "freetextstring", default, skip_serializing_if = "String::is_empty")] pub formatstring: String, #[serde(default, skip_serializing_if = "Vec::is_empty")] pub parameters: Vec<InstructionParameter>, } pub enum InstructionCategory { CommandWithoutTimeExtent, CommandWithTimeExtent, Condition, Invalid, } impl Instruction { pub fn category(&self) -> InstructionCategory { use std::ops::Shr; use InstructionCategory::*; match self.code.shr(8) & 0b1111u16 { 0b0000u16 => CommandWithoutTimeExtent, 0b0100u16 => CommandWithTimeExtent, 0b1000u16 => Condition, _ => Invalid, } } } #[derive(Clone, Serialize, Deserialize, Debug, PartialEq)] #[serde(rename_all = "camelCase", deny_unknown_fields)] pub struct InstructionParameter { #[serde(with = "idstring")] pub id: String, #[serde(with = "idstring_maybe_empty", default, skip_serializing_if = "String::is_empty")] pub group: String, #[serde(rename = "type")] pub parameter_type: Vec<base::DataType>, pub storage: base::StorageTypeWithMixed, #[serde(with = "freetextstring")] pub description: String, }