sea_orm/rbac/engine/
resource_request.rs

1use crate::rbac::entity::resource::Model as Resource;
2
3#[derive(Debug)]
4pub struct Table<'a>(pub &'a str);
5
6#[derive(Debug)]
7pub struct SchemaTable<'a, 'b>(pub &'a str, pub &'b str);
8
9#[derive(Debug, Clone, PartialEq, Eq, Hash)]
10pub struct ResourceRequest {
11    pub schema: Option<String>,
12    pub table: String,
13}
14
15impl<'a> From<Table<'a>> for ResourceRequest {
16    fn from(table: Table<'a>) -> ResourceRequest {
17        ResourceRequest {
18            schema: None,
19            table: table.0.to_owned(),
20        }
21    }
22}
23
24impl<'a, 'b> From<SchemaTable<'a, 'b>> for ResourceRequest {
25    fn from(schema_table: SchemaTable<'a, 'b>) -> ResourceRequest {
26        ResourceRequest {
27            schema: Some(schema_table.0.to_owned()),
28            table: schema_table.1.to_owned(),
29        }
30    }
31}
32
33impl From<Resource> for ResourceRequest {
34    fn from(resource: Resource) -> Self {
35        Self {
36            schema: resource.schema,
37            table: resource.table,
38        }
39    }
40}
41
42impl std::fmt::Display for ResourceRequest {
43    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
44        write!(
45            f,
46            "{}{}{}",
47            if let Some(schema) = &self.schema {
48                schema
49            } else {
50                ""
51            },
52            if self.schema.is_some() { "." } else { "" },
53            self.table
54        )
55    }
56}