cloudcover_core/
method_reference.rs1use 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}