use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize, Default)]
#[serde(rename_all = "lowercase")]
pub enum Protocol {
#[default]
Http,
Https,
#[serde(rename = "tcp")]
Tcp,
#[serde(rename = "websocket")]
WebSocket,
#[serde(rename = "dynamodb")]
DynamoDB,
}
impl Protocol {
pub fn is_supported(&self) -> bool {
matches!(self, Protocol::Http | Protocol::Https)
}
pub fn as_str(&self) -> &'static str {
match self {
Protocol::Http => "http",
Protocol::Https => "https",
Protocol::Tcp => "tcp",
Protocol::WebSocket => "websocket",
Protocol::DynamoDB => "dynamodb",
}
}
pub fn from_scheme(scheme: &str) -> Result<Self, String> {
match scheme.to_lowercase().as_str() {
"http" => Ok(Protocol::Http),
"https" => Ok(Protocol::Https),
"tcp" => Ok(Protocol::Tcp),
"ws" | "websocket" => Ok(Protocol::WebSocket),
"dynamodb" => Ok(Protocol::DynamoDB),
_ => Err(format!("Unsupported protocol scheme: {scheme}")),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "kebab-case")]
pub enum DeploymentMode {
Sidecar,
ReverseProxy,
}