use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use super::{entity::EntityDescriptorConst, WorkloadV2};
#[derive(Serialize, Deserialize, JsonSchema, PartialEq, Eq, Clone, Debug)]
pub struct HttpRouterSpecV1 {
pub domains: Option<Vec<String>>,
pub routes: Vec<HttpRouteV1>,
}
impl EntityDescriptorConst for HttpRouterSpecV1 {
const NAMESPACE: &'static str = "wasmer.io";
const NAME: &'static str = "HttpRouter";
const VERSION: &'static str = "1alpha1";
const KIND: &'static str = "wasmer.io/HttpRouter.v1alpha1";
type Spec = Self;
type State = ();
}
#[derive(Serialize, Deserialize, JsonSchema, PartialEq, Eq, Clone, Debug)]
pub struct HttpRouteV1 {
pub name: Option<String>,
pub priority: Option<i64>,
#[serde(default)]
pub matches: Vec<HttpRouteMatch>,
pub handler: HttpRouteHandlerV1,
}
#[derive(Serialize, Deserialize, JsonSchema, PartialEq, Eq, Clone, Debug)]
pub enum HttpRouteHandlerV1 {
#[serde(rename = "spawn")]
Spawn(WorkloadV2),
}
#[derive(Serialize, Deserialize, JsonSchema, PartialEq, Eq, Clone, Debug)]
pub struct HttpRouteMatch {
pub path: Option<HttpRoutePathMatch>,
pub methods: Option<Vec<String>>,
pub headers: Option<Vec<HttpRouteHeaderMatch>>,
}
#[derive(Serialize, Deserialize, JsonSchema, PartialEq, Eq, Clone, Debug)]
pub enum HttpRoutePathMatch {
#[serde(rename = "prefix")]
Prefix(String),
#[serde(rename = "exact")]
Exact(String),
#[serde(rename = "regex")]
Regex(String),
}
#[derive(Serialize, Deserialize, JsonSchema, PartialEq, Eq, Clone, Debug)]
pub struct HttpRouteHeaderMatch {
pub header: String,
pub value: HttpRouteHeaderValueMatch,
}
#[derive(Serialize, Deserialize, JsonSchema, PartialEq, Eq, Clone, Debug)]
pub enum HttpRouteHeaderValueMatch {
#[serde(rename = "exact")]
Exact(String),
#[serde(rename = "regex")]
Regex(String),
}
pub type HttpRouterV1 = super::Entity<HttpRouterSpecV1>;