m10_sdk/types/
role.rs

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}