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