edge_schema/schema/
mod.rs1mod app;
4mod app_config;
5mod app_version;
6mod capability;
7mod cpu;
8mod cron;
9mod dns;
10mod entity;
11mod fs;
12mod http_router;
13mod ip_blacklist;
14mod job;
15mod locality;
16mod logging;
17mod memory;
18mod network;
19mod network_dns;
20mod network_gateway;
21mod package;
22mod tokens;
23mod wasi;
24mod web_gateway;
25mod webc;
26mod workload;
27
28pub use self::{
29 app::*, app_config::*, app_version::*, capability::*, cpu::*, cron::*, dns::*, entity::*,
30 fs::*, http_router::*, ip_blacklist::*, job::*, locality::*, logging::*, memory::*, network::*,
31 network_dns::*, network_gateway::*, package::*, tokens::*, wasi::*, web_gateway::*, webc::*,
32 workload::*,
33};
34
35pub trait Merge {
37 fn merge_extend(self, other: &Self) -> Self;
41}
42
43impl<T> Merge for Option<T>
44where
45 T: Merge + Clone,
46{
47 fn merge_extend(self, other: &Self) -> Self {
48 match (self, other) {
49 (Some(s), Some(o)) => Some(s.merge_extend(o)),
50 (None, Some(o)) => Some(o.clone()),
51 (Some(s), None) => Some(s),
52 (None, None) => None,
53 }
54 }
55}
56
57impl<T> Merge for Vec<T>
58where
59 T: Merge + PartialEq + Eq + Clone,
60{
61 fn merge_extend(mut self, other: &Self) -> Self {
62 for o in other {
63 if !self.contains(o) {
64 self.push(o.clone());
65 }
66 }
67 self
68 }
69}
70
71#[derive(
72 serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Debug, schemars::JsonSchema,
73)]
74#[serde(tag = "kind")]
75pub enum AnyEntity {
76 #[serde(rename = "wasmer.io/App.v1")]
77 AppV1(AppV1),
78 #[serde(rename = "wasmer.io/HttpRouter.v1")]
79 HttpRouterV1(HttpRouterV1),
80}
81
82pub fn deserialize_json<T>(
86 input: &[u8],
87) -> Result<T, serde_path_to_error::Error<serde_json::error::Error>>
88where
89 T: serde::de::DeserializeOwned,
90{
91 let jd = &mut serde_json::Deserializer::from_slice(input);
92 serde_path_to_error::deserialize(jd)
93}
94
95macro_rules! impl_merge_primitive {
96 ( $( $type:ty )* ) => {
97 $(
98 impl Merge for $type {
99 fn merge_extend(self, _other: &Self) -> Self {
100 self
101 }
102 }
103 )*
104 };
105}
106
107impl_merge_primitive!(bool u16 u32 u64 i16 i32 i64 String uuid::Uuid bytesize::ByteSize);