nika_engine/store/context.rs
1//! Loaded context data from workflow `context:` block
2//!
3//! This module defines the pure data structure for loaded context files.
4//! The loading logic lives in `runtime::context_loader`.
5
6use rustc_hash::FxHashMap;
7use serde_json::Value;
8
9/// Loaded context from workflow `context:` block
10///
11/// Contains all files loaded at workflow start, keyed by alias.
12#[derive(Debug, Clone, Default)]
13pub struct LoadedContext {
14 /// Loaded files by alias
15 ///
16 /// - Single files: `Value::String` (text) or `Value::Object` (JSON/YAML)
17 /// - Glob patterns: `Value::Array` of strings
18 pub files: FxHashMap<String, Value>,
19
20 /// Loaded session data (if any)
21 pub session: Option<Value>,
22}
23
24impl LoadedContext {
25 /// Create an empty LoadedContext
26 pub fn new() -> Self {
27 Self::default()
28 }
29
30 /// Get a file by alias
31 pub fn get_file(&self, alias: &str) -> Option<&Value> {
32 self.files.get(alias)
33 }
34
35 /// Get session data
36 pub fn get_session(&self) -> Option<&Value> {
37 self.session.as_ref()
38 }
39
40 /// Check if context is empty
41 pub fn is_empty(&self) -> bool {
42 self.files.is_empty() && self.session.is_none()
43 }
44
45 /// Get number of loaded files
46 pub fn file_count(&self) -> usize {
47 self.files.len()
48 }
49}