use crate::store::BaseData; use rhai::{CustomType, TypeBuilder}; use serde::{Deserialize, Serialize}; /// Node reputation information #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)] pub struct NodeReputation { pub node_id: u32, /// between 0 and 100, earned over time pub reputation: i32, /// between 0 and 100, set by system, farmer has no ability to set this pub uptime: i32, } /// NodeGroup reputation model #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default, crate::DeriveObject)] pub struct NodeGroupReputation { pub base_data: BaseData, #[index] pub nodegroup_id: u32, /// between 0 and 100, earned over time pub reputation: i32, /// between 0 and 100, set by system, farmer has no ability to set this pub uptime: i32, pub nodes: Vec, } impl NodeGroupReputation { pub fn new() -> Self { Self { base_data: BaseData::new(), nodegroup_id: 0, reputation: 50, // default as per spec uptime: 0, nodes: Vec::new(), } } pub fn nodegroup_id(mut self, v: u32) -> Self { self.nodegroup_id = v; self } pub fn reputation(mut self, v: i32) -> Self { self.reputation = v; self } pub fn uptime(mut self, v: i32) -> Self { self.uptime = v; self } pub fn add_node_reputation(mut self, node_rep: NodeReputation) -> Self { self.nodes.push(node_rep); self } } impl NodeReputation { pub fn new() -> Self { Self { node_id: 0, reputation: 50, // default as per spec uptime: 0, } } pub fn node_id(mut self, v: u32) -> Self { self.node_id = v; self } pub fn reputation(mut self, v: i32) -> Self { self.reputation = v; self } pub fn uptime(mut self, v: i32) -> Self { self.uptime = v; self } }