use heromodels_core::BaseModelData; use heromodels_derive::model; use rhai::{CustomType, TypeBuilder}; use serde::{Deserialize, Serialize}; use super::common::{PricingPolicy, SLAPolicy}; /// Grid4 NodeGroup model (root object for farmer configuration) #[model] #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default, CustomType)] pub struct NodeGroup { pub base_data: BaseModelData, /// link back to farmer who owns the nodegroup, is a user? #[index] pub farmerid: u32, /// only visible by farmer, in future encrypted, used to boot a node pub secret: String, pub description: String, pub slapolicy: SLAPolicy, pub pricingpolicy: PricingPolicy, /// pricing in CC - cloud credit, per 2GB node slice pub compute_slice_normalized_pricing_cc: f64, /// pricing in CC - cloud credit, per 1GB storage slice pub storage_slice_normalized_pricing_cc: f64, /// signature as done by farmers to validate that they created this group pub signature_farmer: String, } impl NodeGroup { pub fn new() -> Self { Self { base_data: BaseModelData::new(), farmerid: 0, secret: String::new(), description: String::new(), slapolicy: SLAPolicy::default(), pricingpolicy: PricingPolicy::new(), compute_slice_normalized_pricing_cc: 0.0, storage_slice_normalized_pricing_cc: 0.0, signature_farmer: String::new(), } } pub fn farmerid(mut self, v: u32) -> Self { self.farmerid = v; self } pub fn secret(mut self, v: impl ToString) -> Self { self.secret = v.to_string(); self } pub fn description(mut self, v: impl ToString) -> Self { self.description = v.to_string(); self } pub fn slapolicy(mut self, v: SLAPolicy) -> Self { self.slapolicy = v; self } pub fn pricingpolicy(mut self, v: PricingPolicy) -> Self { self.pricingpolicy = v; self } pub fn compute_slice_normalized_pricing_cc(mut self, v: f64) -> Self { self.compute_slice_normalized_pricing_cc = v; self } pub fn storage_slice_normalized_pricing_cc(mut self, v: f64) -> Self { self.storage_slice_normalized_pricing_cc = v; self } pub fn signature_farmer(mut self, v: impl ToString) -> Self { self.signature_farmer = v.to_string(); self } }