mur_common/skill/
types.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
7#[serde(rename_all = "kebab-case")]
8pub enum HostId {
9 MurAgent,
10 MurCommander,
11 #[default]
13 All,
14 #[serde(untagged)]
15 Custom(String),
16}
17
18#[derive(
20 Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, PartialOrd, Ord, Default,
21)]
22#[serde(rename_all = "kebab-case")]
23pub enum TrustLevel {
24 #[default]
26 Sandboxed,
27 Verified,
29 Trusted,
31}
32
33#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
35#[serde(rename_all = "lowercase")]
36pub enum Category {
37 Context,
38 Workflow,
39 Command,
40 Meta,
41}
42
43#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
45#[serde(rename_all = "lowercase")]
46pub enum ContentMode {
47 Context,
48 Workflow,
49 Command,
50}
51
52#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
53#[serde(rename_all = "lowercase")]
54pub enum Priority {
55 Low,
56 #[default]
57 Normal,
58 High,
59 Critical,
60}
61
62#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Ord, PartialOrd)]
63#[serde(rename_all = "snake_case")]
64pub enum TriggerKind {
65 Command,
66 Keyword,
67 SessionStart,
68 Manual,
69}
70
71#[cfg(test)]
72mod tests {
73 use super::*;
74
75 #[test]
76 fn host_id_serialises_kebab_case() {
77 let yaml = serde_yaml_ng::to_string(&HostId::MurAgent).unwrap();
78 assert_eq!(yaml.trim(), "mur-agent");
79 }
80
81 #[test]
82 fn trust_level_ordering_matches_spec() {
83 assert!(TrustLevel::Sandboxed < TrustLevel::Verified);
84 assert!(TrustLevel::Verified < TrustLevel::Trusted);
85 }
86
87 #[test]
88 fn host_id_default_is_all() {
89 assert_eq!(HostId::default(), HostId::All);
90 }
91}