53 lines
2.3 KiB
Rust
53 lines
2.3 KiB
Rust
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 }
|
|
}
|