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    JavaScript(JavaScriptMethodReference),
9}
10
11#[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
12pub struct PythonMethodReference {
13    module: String,
14    receiver: Option<String>,
15    name: String,
16}
17
18impl PythonMethodReference {
19    #[must_use]
20    pub fn new(
21        module: impl Into<String>,
22        receiver: Option<String>,
23        name: impl Into<String>,
24    ) -> Self {
25        Self {
26            module: module.into(),
27            receiver,
28            name: name.into(),
29        }
30    }
31
32    #[must_use]
33    pub fn module(&self) -> &str {
34        &self.module
35    }
36
37    #[must_use]
38    pub fn receiver(&self) -> Option<&str> {
39        self.receiver.as_deref()
40    }
41
42    #[must_use]
43    pub fn name(&self) -> &str {
44        &self.name
45    }
46}
47
48#[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
49pub struct GoMethodReference {
50    package: String,
51    receiver: Option<String>,
52    name: String,
53}
54
55impl GoMethodReference {
56    #[must_use]
57    pub fn new(
58        package: impl Into<String>,
59        receiver: Option<String>,
60        name: impl Into<String>,
61    ) -> Self {
62        Self {
63            package: package.into(),
64            receiver,
65            name: name.into(),
66        }
67    }
68
69    #[must_use]
70    pub fn package(&self) -> &str {
71        &self.package
72    }
73
74    #[must_use]
75    pub fn receiver(&self) -> Option<&str> {
76        self.receiver.as_deref()
77    }
78
79    #[must_use]
80    pub fn name(&self) -> &str {
81        &self.name
82    }
83}
84
85#[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
86pub struct TerraformMethodReference {
87    kind: String,
88    type_name: String,
89    action: String,
90}
91
92impl TerraformMethodReference {
93    #[must_use]
94    pub fn new(
95        kind: impl Into<String>,
96        type_name: impl Into<String>,
97        action: impl Into<String>,
98    ) -> Self {
99        Self {
100            kind: kind.into(),
101            type_name: type_name.into(),
102            action: action.into(),
103        }
104    }
105
106    #[must_use]
107    pub fn kind(&self) -> &str {
108        &self.kind
109    }
110
111    #[must_use]
112    pub fn type_name(&self) -> &str {
113        &self.type_name
114    }
115
116    #[must_use]
117    pub fn action(&self) -> &str {
118        &self.action
119    }
120}
121
122#[derive(Clone, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
123pub struct JavaScriptMethodReference {
124    package: String,
125    receiver: Option<String>,
126    name: String,
127}
128
129impl JavaScriptMethodReference {
130    #[must_use]
131    pub fn new(
132        package: impl Into<String>,
133        receiver: Option<String>,
134        name: impl Into<String>,
135    ) -> Self {
136        Self {
137            package: package.into(),
138            receiver,
139            name: name.into(),
140        }
141    }
142
143    #[must_use]
144    pub fn package(&self) -> &str {
145        &self.package
146    }
147
148    #[must_use]
149    pub fn receiver(&self) -> Option<&str> {
150        self.receiver.as_deref()
151    }
152
153    #[must_use]
154    pub fn name(&self) -> &str {
155        &self.name
156    }
157}