1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
use serde::{Deserialize, Serialize}; use cloudflare::endpoints::workers::WorkersRoute; #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] pub struct Route { pub id: Option<String>, pub script: Option<String>, pub pattern: String, } impl From<&WorkersRoute> for Route { fn from(api_route: &WorkersRoute) -> Route { Route { id: Some(api_route.id.clone()), script: api_route.script.clone(), pattern: api_route.pattern.clone(), } } } #[derive(Debug)] pub struct RouteConfig { pub workers_dev: Option<bool>, pub route: Option<String>, pub routes: Option<Vec<String>>, pub zone_id: Option<String>, pub account_id: Option<String>, } impl RouteConfig { pub fn has_routes_defined(&self) -> bool { if self.route.is_some() { true } else if let Some(routes) = &self.routes { !routes.is_empty() } else { false } } pub fn routes(&self) -> impl Iterator<Item = &String> { self.route.iter().chain(self.routes.iter().flatten()) } pub fn is_zoneless(&self) -> bool { self.workers_dev.unwrap_or_default() } pub fn is_zoned(&self) -> bool { self.has_routes_defined() && self.zone_id.is_some() } pub fn workers_dev_false_by_itself(&self) -> bool { if let Some(workers_dev) = self.workers_dev { !workers_dev && !self.has_routes_defined() } else { false } } }