#[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)]
pub enum Plane {
Cloudflare { account_id: String, account_name: String, script: String, url: String, plane_id: String, label: String },
Aws { account_id: String, region: String, url: String, plane_id: String, label: String },
Modal { workspace: String, url: String, plane_id: String, label: String },
Seen { url: String, plane_id: String },
}
impl Plane {
pub fn url(&self) -> &str { match self { Plane::Cloudflare { url, .. } | Plane::Aws { url, .. } | Plane::Modal { url, .. } | Plane::Seen { url, .. } => url } }
pub fn plane_id(&self) -> &str { match self { Plane::Cloudflare { plane_id, .. } | Plane::Aws { plane_id, .. } | Plane::Modal { plane_id, .. } | Plane::Seen { plane_id, .. } => plane_id } }
pub fn set_label(&mut self, to: &str) { if let Plane::Cloudflare { label, .. } | Plane::Aws { label, .. } | Plane::Modal { label, .. } = self { *label = to.to_string() } }
pub fn label(&self) -> &str { match self { Plane::Cloudflare { label, .. } | Plane::Aws { label, .. } | Plane::Modal { label, .. } => label, Plane::Seen { .. } => "superci" } }
pub fn place(&self) -> String {
match self {
Plane::Cloudflare { account_name, .. } => format!("Cloudflare · {account_name}"),
Plane::Aws { account_id, region, .. } => format!("AWS · {account_id} · {region}"),
Plane::Modal { workspace, .. } => format!("Modal · {workspace}"),
Plane::Seen { .. } => match self.cloud() { "cloudflare" => "Cloudflare", "modal" => "Modal", _ => "AWS" }.to_string(),
}
}
pub fn cloud(&self) -> &'static str {
match self {
Plane::Cloudflare { .. } => "cloudflare",
Plane::Aws { .. } => "aws",
Plane::Modal { .. } => "modal",
Plane::Seen { url, .. } => if url.contains(".workers.dev") { "cloudflare" } else if url.contains(".modal.run") { "modal" } else { "aws" },
}
}
}