use super::BudgetValue;
use crate::{inference::Budget, util::ToDisplayAndBrief};
use serde::{Deserialize, Serialize};
pub trait Item: Budget {
fn key(&self) -> &String;
fn merge_order(&self, _new: &Self) -> MergeOrder {
MergeOrder::OldToNew
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MergeOrder {
OldToNew,
NewToOld,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct Token {
key: String,
budget: BudgetValue,
}
impl Token {
pub fn new(key: impl Into<String>, budget: BudgetValue) -> Self {
Token {
key: key.into(),
budget,
}
}
pub fn budget(&self) -> &BudgetValue {
&self.budget
}
pub fn budget_mut(&mut self) -> &mut BudgetValue {
&mut self.budget
}
}
impl ToDisplayAndBrief for Token {
fn to_display(&self) -> String {
format!("{} {}", self.budget_to_display(), self.key)
}
fn to_display_brief(&self) -> String {
format!("{} {}", self.budget_to_display_brief(), self.key)
}
}
impl Budget for Token {
fn priority(&self) -> super::ShortFloat {
self.budget.priority()
}
fn __priority_mut(&mut self) -> &mut super::ShortFloat {
self.budget.__priority_mut()
}
fn durability(&self) -> super::ShortFloat {
self.budget.durability()
}
fn __durability_mut(&mut self) -> &mut super::ShortFloat {
self.budget.__durability_mut()
}
fn quality(&self) -> super::ShortFloat {
self.budget.quality()
}
fn __quality_mut(&mut self) -> &mut super::ShortFloat {
self.budget.__quality_mut()
}
}
impl Item for Token {
fn key(&self) -> &String {
&self.key
}
}