use rhai::{CustomType, TypeBuilder}; use serde::{Deserialize, Serialize}; /// SLA policy matching the V spec `SLAPolicy` #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)] pub struct SLAPolicy { /// should +90 pub sla_uptime: i32, /// minimal mbits we can expect avg over 1h per node, 0 means we don't guarantee pub sla_bandwidth_mbit: i32, /// 0-100, percent of money given back in relation to month if sla breached, /// e.g. 200 means we return 2 months worth of rev if sla missed pub sla_penalty: i32, } impl SLAPolicy { pub fn new() -> Self { Self::default() } pub fn sla_uptime(mut self, v: i32) -> Self { self.sla_uptime = v; self } pub fn sla_bandwidth_mbit(mut self, v: i32) -> Self { self.sla_bandwidth_mbit = v; self } pub fn sla_penalty(mut self, v: i32) -> Self { self.sla_penalty = v; self } pub fn build(self) -> Self { self } } /// Pricing policy matching the V spec `PricingPolicy` #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)] pub struct PricingPolicy { /// e.g. 30,40,50 means if user has more CC in wallet than 1 year utilization /// then this provider gives 30%, 2Y 40%, ... pub marketplace_year_discounts: Vec, /// e.g. 10,20,30 pub volume_discounts: Vec, } impl PricingPolicy { pub fn new() -> Self { Self { marketplace_year_discounts: vec![30, 40, 50], volume_discounts: vec![10, 20, 30] } } pub fn marketplace_year_discounts(mut self, v: Vec) -> Self { self.marketplace_year_discounts = v; self } pub fn volume_discounts(mut self, v: Vec) -> Self { self.volume_discounts = v; self } pub fn build(self) -> Self { self } }