narust_158/entity/
item.rs1use super::BudgetValue;
5use crate::{inference::Budget, util::ToDisplayAndBrief};
6use serde::{Deserialize, Serialize};
7
8pub trait Item: Budget {
24 fn key(&self) -> &String;
28
29 fn merge_order(&self, _new: &Self) -> MergeOrder {
32 MergeOrder::OldToNew
33 }
34}
35
36#[derive(Debug, Clone, Copy, PartialEq, Eq)]
39pub enum MergeOrder {
40 OldToNew,
43 NewToOld,
46}
47
48#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
51pub struct Token {
52 key: String,
57
58 budget: BudgetValue,
61}
62
63impl Token {
64 pub fn new(key: impl Into<String>, budget: BudgetValue) -> Self {
67 Token {
68 key: key.into(),
69 budget,
70 }
71 }
72
73 pub fn budget(&self) -> &BudgetValue {
75 &self.budget
76 }
77
78 pub fn budget_mut(&mut self) -> &mut BudgetValue {
80 &mut self.budget
81 }
82}
83
84impl ToDisplayAndBrief for Token {
85 fn to_display(&self) -> String {
86 format!("{} {}", self.budget_to_display(), self.key)
87 }
88
89 fn to_display_brief(&self) -> String {
90 format!("{} {}", self.budget_to_display_brief(), self.key)
91 }
92}
93
94impl Budget for Token {
96 fn priority(&self) -> super::ShortFloat {
97 self.budget.priority()
98 }
99
100 fn __priority_mut(&mut self) -> &mut super::ShortFloat {
101 self.budget.__priority_mut()
102 }
103
104 fn durability(&self) -> super::ShortFloat {
105 self.budget.durability()
106 }
107
108 fn __durability_mut(&mut self) -> &mut super::ShortFloat {
109 self.budget.__durability_mut()
110 }
111
112 fn quality(&self) -> super::ShortFloat {
113 self.budget.quality()
114 }
115
116 fn __quality_mut(&mut self) -> &mut super::ShortFloat {
117 self.budget.__quality_mut()
118 }
119}
120
121impl Item for Token {
122 fn key(&self) -> &String {
124 &self.key
125 }
126}