lit_node_core/traits/
lit_resource.rs

1use std::fmt::Debug;
2
3use crate::{
4    AccessControlConditionResource, LitActionResource, LitResourcePrefix, PKPNFTResource,
5    PaymentDelegationResource,
6};
7
8pub trait LitResource: Debug {
9    /// Get the fully qualified IRI for this resource. This is compatible with the URI spec
10    /// outlined here: https://datatracker.ietf.org/doc/html/rfc3986.
11    fn get_resource_key(&self) -> String {
12        format!(
13            "{}://{}",
14            self.get_resource_prefix(),
15            self.get_resource_id()
16        )
17    }
18
19    /// Get the identifier for this resource.
20    fn get_resource_id(&self) -> &String;
21
22    /// Get the prefix for this resource.
23    fn get_resource_prefix(&self) -> LitResourcePrefix;
24}
25
26impl LitResource for AccessControlConditionResource {
27    fn get_resource_id(&self) -> &String {
28        self.get_resource_id()
29    }
30
31    fn get_resource_prefix(&self) -> LitResourcePrefix {
32        LitResourcePrefix::ACC
33    }
34}
35
36impl LitResource for PKPNFTResource {
37    fn get_resource_id(&self) -> &String {
38        self.get_resource_id()
39    }
40
41    fn get_resource_prefix(&self) -> LitResourcePrefix {
42        LitResourcePrefix::PKP
43    }
44}
45
46impl LitResource for LitActionResource {
47    fn get_resource_id(&self) -> &String {
48        self.get_resource_id()
49    }
50
51    fn get_resource_prefix(&self) -> LitResourcePrefix {
52        LitResourcePrefix::LA
53    }
54}
55
56impl LitResource for PaymentDelegationResource {
57    fn get_resource_id(&self) -> &String {
58        self.get_resource_id()
59    }
60
61    fn get_resource_prefix(&self) -> LitResourcePrefix {
62        LitResourcePrefix::PD
63    }
64}