Skip to main content

cloudcover_core/
method_reference.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
4pub enum MethodReference {
5    Python(PythonMethodReference),
6    Go(GoMethodReference),
7    Terraform(TerraformMethodReference),
8}
9
10#[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
11pub struct PythonMethodReference {
12    module: String,
13    receiver: Option<String>,
14    name: String,
15}
16
17impl PythonMethodReference {
18    #[must_use]
19    pub fn new(
20        module: impl Into<String>,
21        receiver: Option<String>,
22        name: impl Into<String>,
23    ) -> Self {
24        Self {
25            module: module.into(),
26            receiver,
27            name: name.into(),
28        }
29    }
30
31    #[must_use]
32    pub fn module(&self) -> &str {
33        &self.module
34    }
35
36    #[must_use]
37    pub fn receiver(&self) -> Option<&str> {
38        self.receiver.as_deref()
39    }
40
41    #[must_use]
42    pub fn name(&self) -> &str {
43        &self.name
44    }
45}
46
47#[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
48pub struct GoMethodReference {
49    package: String,
50    receiver: Option<String>,
51    name: String,
52}
53
54impl GoMethodReference {
55    #[must_use]
56    pub fn new(
57        package: impl Into<String>,
58        receiver: Option<String>,
59        name: impl Into<String>,
60    ) -> Self {
61        Self {
62            package: package.into(),
63            receiver,
64            name: name.into(),
65        }
66    }
67
68    #[must_use]
69    pub fn package(&self) -> &str {
70        &self.package
71    }
72
73    #[must_use]
74    pub fn receiver(&self) -> Option<&str> {
75        self.receiver.as_deref()
76    }
77
78    #[must_use]
79    pub fn name(&self) -> &str {
80        &self.name
81    }
82}
83
84#[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
85pub struct TerraformMethodReference {
86    kind: String,
87    type_name: String,
88    action: String,
89}
90
91impl TerraformMethodReference {
92    #[must_use]
93    pub fn new(
94        kind: impl Into<String>,
95        type_name: impl Into<String>,
96        action: impl Into<String>,
97    ) -> Self {
98        Self {
99            kind: kind.into(),
100            type_name: type_name.into(),
101            action: action.into(),
102        }
103    }
104
105    #[must_use]
106    pub fn kind(&self) -> &str {
107        &self.kind
108    }
109
110    #[must_use]
111    pub fn type_name(&self) -> &str {
112        &self.type_name
113    }
114
115    #[must_use]
116    pub fn action(&self) -> &str {
117        &self.action
118    }
119}