Skip to main content

khive_fold/objective/
context.rs

1//! Objective evaluation context
2
3use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5
6/// Context for objective evaluation
7#[derive(Debug, Clone, Default, Serialize, Deserialize)]
8pub struct ObjectiveContext {
9    /// Evaluation time
10    pub as_of: DateTime<Utc>,
11    /// Maximum candidates to consider
12    pub max_candidates: Option<usize>,
13    /// Minimum score threshold
14    pub min_score: Option<f64>,
15    /// Extra context data
16    #[serde(default)]
17    pub extra: serde_json::Value,
18}
19
20impl ObjectiveContext {
21    /// Create a new context with current time
22    pub fn new() -> Self {
23        Self {
24            as_of: Utc::now(),
25            ..Default::default()
26        }
27    }
28
29    /// Create context for a specific time
30    pub fn at(time: DateTime<Utc>) -> Self {
31        Self {
32            as_of: time,
33            ..Default::default()
34        }
35    }
36
37    /// Set maximum candidates
38    pub fn with_max_candidates(mut self, n: usize) -> Self {
39        self.max_candidates = Some(n);
40        self
41    }
42
43    /// Set minimum score threshold
44    pub fn with_min_score(mut self, score: f64) -> Self {
45        self.min_score = Some(score);
46        self
47    }
48
49    /// Set extra context
50    pub fn with_extra(mut self, extra: serde_json::Value) -> Self {
51        self.extra = extra;
52        self
53    }
54}