1use alloc::string::String;
2
3use serde::{Deserialize, Serialize};
4
5use crate::err::SpaceErr;
6use crate::kind::Specific;
7
8pub mod mesh {
9 use alloc::string::String;
10
11 use serde::{Deserialize, Serialize};
12
13 #[derive(Debug, Clone, Serialize, Deserialize)]
14 pub enum Fail {
15 Error(String),
16 }
17}
18
19pub mod portal {
20 use alloc::string::String;
21
22 use serde::{Deserialize, Serialize};
23
24 use crate::fail::{ext, http, resource};
25
26 #[derive(Debug, Clone, Serialize, Deserialize)]
27 pub enum Fail {
28 Error(String),
29 Resource(resource::Fail),
30 Ext(ext::Fail),
31 Http(http::Error),
32 }
33}
34
35pub mod http {
36 use alloc::string::String;
37
38 use serde::{Deserialize, Serialize};
39
40 #[derive(Debug, Clone, Serialize, Deserialize)]
41 pub struct Error {
42 pub message: String,
43 }
44}
45
46pub mod resource {
47 use alloc::string::String;
48
49 use serde::{Deserialize, Serialize};
50
51 use crate::fail::{Bad, BadCoercion, BadRequest, Conditional, Messaging, NotFound};
52 use crate::point::Point;
53
54 #[derive(Debug, Clone, Serialize, Deserialize)]
55 pub enum Fail {
56 Create(Create),
57 Update(Update),
58 Select(Select),
59 BadRequest(BadRequest),
60 Conditional(Conditional),
61 Messaging(Messaging),
62 }
63
64 #[derive(Debug, Clone, Serialize, Deserialize)]
65 pub enum Create {
66 AddressAlreadyInUse(String),
67 WrongParentResourceType { expected: String, found: String },
68 CannotUpdateArchetype,
69 InvalidProperty { expected: String, found: String },
70 }
71
72 #[derive(Debug, Clone, Serialize, Deserialize)]
73 pub enum Update {
74 Immutable,
75 }
76
77 #[derive(Debug, Clone, Serialize, Deserialize)]
78 pub enum Select {
79 WrongAddress { required: Point, found: Point },
80 BadSelectRouting { required: String, found: String },
81 BadCoercion(BadCoercion),
82 }
83}
84
85pub mod ext {
86 use alloc::string::String;
87
88 use serde::{Deserialize, Serialize};
89
90 use crate::fail::{BadRequest, Conditional};
91
92 #[derive(Debug, Clone, Serialize, Deserialize)]
93 pub enum Fail {
94 Error(String),
95 BadRequest(BadRequest),
96 Conditional(Conditional),
97 }
98}
99
100#[derive(Debug, Clone, Serialize, Deserialize)]
101pub enum BadRequest {
102 NotFound(NotFound),
103 Bad(Bad),
104 Illegal(Illegal),
105 Wrong(Wrong),
106}
107
108#[derive(Debug, Clone, Serialize, Deserialize)]
109pub struct BadCoercion {
110 pub from: String,
111 pub into: String,
112}
113
114#[derive(Debug, Clone, Serialize, Deserialize)]
115pub enum Conditional {
116 Timeout(Timeout),
117}
118
119#[derive(Debug, Clone, Serialize, Deserialize)]
120pub struct Timeout {
121 pub waited: i32,
122 pub message: String,
123}
124
125#[derive(Debug, Clone, Serialize, Deserialize)]
126pub enum NotFound {
127 Any,
128 ResourceType(String),
129 Kind(String),
130 Specific(String),
131 Address(String),
132 Key(String),
133}
134
135#[derive(Debug, Clone, Serialize, Deserialize)]
136pub enum Bad {
137 ResourceType(String),
138 Kind(String),
139 Specific(String),
140 Address(String),
141 Key(String),
142}
143
144#[derive(Debug, Clone, Serialize, Deserialize)]
145pub enum Identifier {
146 ResourceType,
147 Kind,
148 Specific,
149 Address,
150 Key,
151}
152
153#[derive(Debug, Clone, Serialize, Deserialize)]
154pub enum Illegal {
155 Immutable,
156 EmptyToFieldOnMessage,
157}
158
159#[derive(Debug, Clone, Serialize, Deserialize)]
160pub struct Wrong {
161 pub received: String,
162 pub expected: String,
163}
164
165#[derive(Debug, Clone, Serialize, Deserialize)]
166pub enum Messaging {
167 RequestReplyExchangesRequireOneAndOnlyOneRecipient,
168}
169
170#[derive(Debug, Clone, Serialize, Deserialize)]
171pub enum Fail {
172 Mesh(mesh::Fail),
173 Resource(resource::Fail),
174 Portal(portal::Fail),
175 Error(String),
176}
177
178impl ToString for Fail {
179 fn to_string(&self) -> String {
180 "Fail".to_string()
181 }
182}
183
184