logline_core/verb.rs
1#[cfg(not(feature = "std"))]
2use alloc::string::String;
3#[cfg(feature = "std")]
4use std::string::String;
5
6/// Verbo que descreve a ação executada.
7///
8/// Paper I §3.1: verbos devem ser validados contra ALLOWED_ACTIONS via `VerbRegistry`.
9/// Verbos canônicos são `Transfer`, `Deploy`, `Approve`. Verbos customizados são permitidos
10/// via `Custom(String)`, mas devem passar pela validação do registry.
11///
12/// # Exemplo
13///
14/// ```rust
15/// use logline_core::Verb;
16///
17/// let canonical = Verb::Transfer;
18/// let custom = Verb::Custom("approve_budget".into());
19///
20/// assert_eq!(canonical.as_str(), "transfer");
21/// assert_eq!(custom.as_str(), "approve_budget");
22/// ```
23#[derive(Clone, Debug, PartialEq)]
24#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
25pub enum Verb {
26 /// Transferência de recursos (ex: dinheiro, tokens, dados).
27 Transfer,
28 /// Deploy de artefato (ex: código, configuração, serviço).
29 Deploy,
30 /// Aprovação de ação ou decisão.
31 Approve,
32 /// Verbo customizado (deve ser validado via `VerbRegistry`).
33 Custom(String),
34}
35
36impl Verb {
37 /// Retorna a representação string do verbo.
38 ///
39 /// Verbos canônicos retornam suas strings fixas, enquanto `Custom` retorna
40 /// a string fornecida.
41 pub fn as_str(&self) -> &str {
42 match self {
43 Verb::Transfer => "transfer",
44 Verb::Deploy => "deploy",
45 Verb::Approve => "approve",
46 Verb::Custom(s) => s.as_str(),
47 }
48 }
49}
50
51/// Registry para validar verbos contra ALLOWED_ACTIONS (Paper I §3.1).
52/// Implementações devem verificar se o verbo está no registro permitido.
53pub trait VerbRegistry {
54 /// Retorna `true` se o verbo está permitido no sistema.
55 fn is_allowed(&self, verb: &Verb) -> bool;
56}