1use crate::collections::ResourceId;
2use crate::error::M10Error;
3use crate::types::PublicKey;
4use m10_protos::sdk;
5use m10_protos::sdk::Rule;
6use serde::{Deserialize, Serialize};
7
8#[cfg_attr(feature = "format", derive(parse_display::Display))]
9#[derive(Clone, Debug, Copy, Serialize, Deserialize)]
10pub enum Verb {
11 Read,
12 Create,
13 Update,
14 Delete,
15 Transact,
16 Initiate,
17 Commit,
18}
19
20impl From<sdk::rule::Verb> for Verb {
21 fn from(value: sdk::rule::Verb) -> Self {
22 match value {
23 sdk::rule::Verb::Commit => Verb::Commit,
24 sdk::rule::Verb::Create => Verb::Create,
25 sdk::rule::Verb::Delete => Verb::Delete,
26 sdk::rule::Verb::Initiate => Verb::Initiate,
27 sdk::rule::Verb::Read => Verb::Read,
28 sdk::rule::Verb::Update => Verb::Update,
29 sdk::rule::Verb::Transact => Verb::Transact,
30 }
31 }
32}
33
34impl From<Verb> for sdk::rule::Verb {
35 fn from(verb: Verb) -> Self {
36 match verb {
37 Verb::Commit => sdk::rule::Verb::Commit,
38 Verb::Create => sdk::rule::Verb::Create,
39 Verb::Delete => sdk::rule::Verb::Delete,
40 Verb::Initiate => sdk::rule::Verb::Initiate,
41 Verb::Read => sdk::rule::Verb::Read,
42 Verb::Update => sdk::rule::Verb::Update,
43 Verb::Transact => sdk::rule::Verb::Transact,
44 }
45 }
46}
47
48#[cfg_attr(feature = "format", derive(parse_display::Display))]
49#[cfg_attr(
50 feature = "format",
51 display("Role{{ id={id} owner={owner} name={name} rules={rules:?} }}")
52)]
53#[derive(Clone, Debug, Serialize)]
54pub struct Role {
55 pub id: ResourceId,
56 pub owner: PublicKey,
57 pub name: String,
58 pub rules: Vec<Rule>,
59}
60
61impl TryFrom<sdk::Role> for Role {
62 type Error = M10Error;
63
64 fn try_from(role: sdk::Role) -> Result<Self, Self::Error> {
65 Ok(Self {
66 id: ResourceId::try_from(role.id.as_ref())?,
67 owner: PublicKey(role.owner.to_vec()),
68 name: role.name,
69 rules: role.rules,
70 })
71 }
72}