aranya_policy_module/
label.rs1use core::fmt::{self, Display};
2
3use aranya_policy_ast::Identifier;
4use serde::{Deserialize, Serialize};
5
6#[derive(
8 Debug,
9 Clone,
10 PartialOrd,
11 Ord,
12 Eq,
13 PartialEq,
14 Serialize,
15 Deserialize,
16 rkyv::Archive,
17 rkyv::Deserialize,
18 rkyv::Serialize,
19)]
20#[rkyv(derive(Ord, PartialOrd, Eq, PartialEq))]
21pub enum LabelType {
22 Action,
24 CommandPolicy,
26 CommandRecall,
28 CommandSeal,
30 CommandOpen,
32 Temporary,
35 Function,
37}
38
39impl Display for LabelType {
40 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
41 match self {
42 Self::Action => write!(f, "action"),
43 Self::CommandPolicy => write!(f, "policy"),
44 Self::CommandRecall => write!(f, "recall"),
45 Self::CommandSeal => write!(f, "seal"),
46 Self::CommandOpen => write!(f, "open"),
47 Self::Temporary => write!(f, "temp"),
48 Self::Function => write!(f, "fn"),
49 }
50 }
51}
52
53#[derive(
55 Debug,
56 Clone,
57 PartialOrd,
58 Ord,
59 PartialEq,
60 Eq,
61 Serialize,
62 Deserialize,
63 rkyv::Archive,
64 rkyv::Deserialize,
65 rkyv::Serialize,
66)]
67#[rkyv(derive(Ord, PartialOrd, Eq, PartialEq))]
69pub struct Label {
70 pub name: Identifier,
72 pub ltype: LabelType,
74}
75
76impl Label {
77 pub fn new(name: Identifier, ltype: LabelType) -> Self {
79 Self { name, ltype }
80 }
81
82 pub fn new_temp(name: Identifier) -> Self {
84 Self {
85 name,
86 ltype: LabelType::Temporary,
87 }
88 }
89}
90
91impl Display for Label {
92 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
93 write!(f, "{}:{}", self.ltype, self.name)
94 }
95}