mod app;
mod capability;
mod cpu;
mod deployment;
mod entity;
mod fs;
mod http_router;
mod logging;
mod memory;
mod network;
mod network_dns;
mod network_gateway;
mod tokens;
mod wasi;
mod webc;
mod workload;
pub use self::{
app::*, capability::*, cpu::*, deployment::*, entity::*, fs::*, http_router::*, logging::*,
memory::*, network::*, network_dns::*, network_gateway::*, tokens::*, wasi::*, webc::*,
workload::*,
};
pub trait Merge {
fn merge_extend(self, other: &Self) -> Self;
}
impl<T> Merge for Option<T>
where
T: Merge + Clone,
{
fn merge_extend(self, other: &Self) -> Self {
match (self, other) {
(Some(s), Some(o)) => Some(s.merge_extend(o)),
(None, Some(o)) => Some(o.clone()),
(Some(s), None) => Some(s),
(None, None) => None,
}
}
}
impl<T> Merge for Vec<T>
where
T: Merge + PartialEq + Eq + Clone,
{
fn merge_extend(mut self, other: &Self) -> Self {
for o in other {
if !self.contains(o) {
self.push(o.clone());
}
}
self
}
}
macro_rules! impl_merge_primitive {
( $( $type:ty )* ) => {
$(
impl Merge for $type {
fn merge_extend(self, _other: &Self) -> Self {
self
}
}
)*
};
}
impl_merge_primitive!(bool u32 String uuid::Uuid bytesize::ByteSize);
pub fn deserialize_json<T>(
input: &[u8],
) -> Result<T, serde_path_to_error::Error<serde_json::error::Error>>
where
T: serde::de::DeserializeOwned,
{
let jd = &mut serde_json::Deserializer::from_slice(input);
serde_path_to_error::deserialize(jd)
}
#[derive(
serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Debug, schemars::JsonSchema,
)]
#[serde(tag = "kind")]
pub enum AnyEntity {
#[serde(rename = "wasmer.io/App.v1")]
AppV1(AppV1),
#[serde(rename = "wasmer.io/HttpRouter.v1")]
HttpRouterV1(HttpRouterV1),
}