Skip to main content

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}