eryon_actors/ctx/
context.rs1use crate::types::MetricPosition;
6use rstmt::HarmonicFunction;
7
8#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
11#[cfg_attr(
12 feature = "serde",
13 derive(serde::Deserialize, serde::Serialize),
14 serde(rename_all = "snake_case")
15)]
16pub struct ActorContext<T = f32> {
17 pub(crate) harmonic_function: Option<HarmonicFunction>,
19 pub(crate) metric_position: Option<MetricPosition>,
21 pub(crate) semantic_tags: Vec<String>,
23 pub(crate) stability: T,
25}
26
27impl<T> ActorContext<T> {
28 pub fn new() -> Self
30 where
31 T: num_traits::Zero,
32 {
33 Self {
34 harmonic_function: None,
35 metric_position: None,
36 semantic_tags: Vec::new(),
37 stability: T::zero(),
38 }
39 }
40 pub const fn harmonic_function(&self) -> Option<HarmonicFunction> {
42 self.harmonic_function
43 }
44 pub const fn metric_position(&self) -> Option<MetricPosition> {
46 self.metric_position
47 }
48 pub const fn semantic_tags(&self) -> &Vec<String> {
50 &self.semantic_tags
51 }
52 pub fn semantic_tags_mut(&mut self) -> &mut Vec<String> {
54 &mut self.semantic_tags
55 }
56 pub const fn stability(&self) -> &T {
58 &self.stability
59 }
60 pub fn set_harmonic_function(&mut self, function: Option<HarmonicFunction>) {
62 self.harmonic_function = function;
63 }
64 pub fn set_metric_position(&mut self, position: Option<MetricPosition>) {
66 self.metric_position = position;
67 }
68 pub fn push_semantic_tag(&mut self, tag: String) {
70 self.semantic_tags.push(tag);
71 }
72 pub fn set_stability(&mut self, stability: T) {
74 self.stability = stability;
75 }
76 pub fn with_harmonic_function(self, function: HarmonicFunction) -> Self {
78 Self {
79 harmonic_function: Some(function),
80 ..self
81 }
82 }
83 pub fn with_metric_position(self, position: MetricPosition) -> Self {
85 Self {
86 metric_position: Some(position),
87 ..self
88 }
89 }
90 pub fn with_semantic_tags<I, U>(self, tags: I) -> Self
92 where
93 I: IntoIterator<Item = U>,
94 U: ToString,
95 {
96 Self {
97 semantic_tags: Vec::from_iter(tags.into_iter().map(|t| t.to_string())),
98 ..self
99 }
100 }
101 pub fn with_stability(self, stability: T) -> Self {
103 Self { stability, ..self }
104 }
105}
106
107impl Default for ActorContext {
108 fn default() -> Self {
109 Self::new()
110 }
111}