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}
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}