1use pylon_http::DataError;
8use pylon_router::{
9 CacheOps, FileOps, JobOps, OpenApiGenerator, PubSubOps, RoomOps, SchedulerOps, WorkflowOps,
10};
11
12pub struct NoopAll {
14 manifest: pylon_kernel::AppManifest,
15}
16
17impl NoopAll {
18 pub fn new(manifest: &pylon_kernel::AppManifest) -> Self {
19 Self {
20 manifest: manifest.clone(),
21 }
22 }
23}
24
25impl RoomOps for NoopAll {
26 fn join(
27 &self,
28 _room: &str,
29 _user_id: &str,
30 _data: Option<serde_json::Value>,
31 ) -> Result<(serde_json::Value, serde_json::Value), DataError> {
32 Err(DataError {
33 code: "NOT_AVAILABLE".into(),
34 message: "Rooms are not available on this platform".into(),
35 })
36 }
37
38 fn leave(&self, _room: &str, _user_id: &str) -> Option<serde_json::Value> {
39 None
40 }
41
42 fn set_presence(
43 &self,
44 _room: &str,
45 _user_id: &str,
46 _data: serde_json::Value,
47 ) -> Option<serde_json::Value> {
48 None
49 }
50
51 fn broadcast(
52 &self,
53 _room: &str,
54 _sender: Option<&str>,
55 _topic: &str,
56 _data: serde_json::Value,
57 ) -> Option<serde_json::Value> {
58 None
59 }
60
61 fn list_rooms(&self) -> Vec<String> {
62 vec![]
63 }
64
65 fn room_size(&self, _name: &str) -> usize {
66 0
67 }
68
69 fn members(&self, _name: &str) -> Vec<serde_json::Value> {
70 vec![]
71 }
72}
73
74impl CacheOps for NoopAll {
75 fn handle_command(&self, _body: &str) -> (u16, String) {
76 (
77 503,
78 pylon_router::json_error("NOT_AVAILABLE", "Cache not available on this platform"),
79 )
80 }
81
82 fn handle_get(&self, _key: &str) -> (u16, String) {
83 (
84 503,
85 pylon_router::json_error("NOT_AVAILABLE", "Cache not available on this platform"),
86 )
87 }
88
89 fn handle_delete(&self, _key: &str) -> (u16, String) {
90 (
91 503,
92 pylon_router::json_error("NOT_AVAILABLE", "Cache not available on this platform"),
93 )
94 }
95}
96
97impl PubSubOps for NoopAll {
98 fn handle_publish(&self, _body: &str) -> (u16, String) {
99 (
100 503,
101 pylon_router::json_error("NOT_AVAILABLE", "PubSub not available on this platform"),
102 )
103 }
104
105 fn handle_channels(&self) -> (u16, String) {
106 (200, "[]".into())
107 }
108
109 fn handle_history(&self, _channel: &str, _url: &str) -> (u16, String) {
110 (200, "[]".into())
111 }
112}
113
114impl JobOps for NoopAll {
115 fn enqueue(
116 &self,
117 _name: &str,
118 _payload: serde_json::Value,
119 _priority: &str,
120 _delay_secs: u64,
121 _max_retries: u32,
122 _queue: &str,
123 ) -> String {
124 String::new()
125 }
126
127 fn stats(&self) -> serde_json::Value {
128 serde_json::json!({})
129 }
130
131 fn dead_letters(&self) -> serde_json::Value {
132 serde_json::json!([])
133 }
134
135 fn retry_dead(&self, _id: &str) -> bool {
136 false
137 }
138
139 fn list_jobs(
140 &self,
141 _status: Option<&str>,
142 _queue: Option<&str>,
143 _limit: usize,
144 ) -> serde_json::Value {
145 serde_json::json!([])
146 }
147
148 fn get_job(&self, _id: &str) -> Option<serde_json::Value> {
149 None
150 }
151}
152
153impl SchedulerOps for NoopAll {
154 fn list_tasks(&self) -> serde_json::Value {
155 serde_json::json!([])
156 }
157
158 fn trigger(&self, _name: &str) -> bool {
159 false
160 }
161}
162
163impl WorkflowOps for NoopAll {
164 fn definitions(&self) -> serde_json::Value {
165 serde_json::json!([])
166 }
167
168 fn start(&self, _name: &str, _input: serde_json::Value) -> Result<String, String> {
169 Err("Workflows not available on this platform".into())
170 }
171
172 fn list(&self, _status_filter: Option<&str>) -> serde_json::Value {
173 serde_json::json!([])
174 }
175
176 fn get(&self, _id: &str) -> Option<serde_json::Value> {
177 None
178 }
179
180 fn advance(&self, _id: &str) -> Result<String, String> {
181 Err("Workflows not available on this platform".into())
182 }
183
184 fn send_event(&self, _id: &str, _event: &str, _data: serde_json::Value) -> Result<(), String> {
185 Err("Workflows not available on this platform".into())
186 }
187
188 fn cancel(&self, _id: &str) -> Result<(), String> {
189 Err("Workflows not available on this platform".into())
190 }
191}
192
193impl FileOps for NoopAll {
194 fn upload(&self, _body: &str) -> (u16, String) {
195 (
196 503,
197 pylon_router::json_error(
198 "NOT_AVAILABLE",
199 "File uploads not available on this platform",
200 ),
201 )
202 }
203
204 fn get_file(&self, _id: &str) -> (u16, String) {
205 (
206 503,
207 pylon_router::json_error(
208 "NOT_AVAILABLE",
209 "File storage not available on this platform",
210 ),
211 )
212 }
213}
214
215impl OpenApiGenerator for NoopAll {
216 fn generate(&self, _base_url: &str) -> String {
217 serde_json::json!({
218 "openapi": "3.0.3",
219 "info": {
220 "title": self.manifest.name,
221 "version": self.manifest.version,
222 },
223 "paths": {}
224 })
225 .to_string()
226 }
227}