Skip to main content

state_engine/ports/
provided.rs

1// Provided Ports - ライブラリが提供するインターフェース
2use serde_json::Value;
3use std::collections::HashMap;
4
5/// YAMLマニフェストファイル読み込み・管理
6pub trait Manifest {
7    /// キーからデータを取得(メタデータを除く)
8    /// 形式: "filename.path.to.key"
9    fn get(&mut self, key: &str, default: Option<Value>) -> Value;
10
11    /// メタデータを取得
12    /// 指定されたキーのパス上のすべての_始まりキーを収集
13    fn get_meta(&mut self, key: &str) -> HashMap<String, Value>;
14
15    /// 存在しないキーのリストを取得
16    fn get_missing_keys(&self) -> &[String];
17
18    /// 存在しないキーのリストをクリア
19    fn clear_missing_keys(&mut self);
20}
21
22/// State - 統一CRUD実装
23///
24/// manifest の _state/_store/_load に従って状態を管理する。
25/// state-engineの唯一の外部向けインターフェース。
26pub trait State {
27    /// 状態を取得
28    ///
29    /// 1. _store から値を取得
30    /// 2. miss時は _load に従い自動ロード
31    /// 3. ロード成功時は _store に保存して返却
32    ///
33    /// # Arguments
34    /// * `key` - manifest key ("filename.node.field")
35    ///
36    /// # Returns
37    /// * `Some(Value)` - 値が存在する場合
38    /// * `None` - 値が存在せず、ロードも失敗した場合
39    fn get(&mut self, key: &str) -> Option<Value>;
40
41    /// 状態を設定
42    ///
43    /// _store に従って値を保存する。
44    ///
45    /// # Arguments
46    /// * `key` - manifest key ("filename.node.field")
47    /// * `value` - 保存する値
48    /// * `ttl` - TTL(秒)。KVS使用時のみ有効。Noneの場合はYAML定義に従う
49    ///
50    /// # Returns
51    /// * `true` - 保存成功
52    /// * `false` - 保存失敗
53    fn set(&mut self, key: &str, value: Value, ttl: Option<u64>) -> bool;
54
55    /// 状態を削除
56    ///
57    /// _store から該当の {key:value} レコードを削除する。
58    ///
59    /// # Arguments
60    /// * `key` - manifest key ("filename.node.field")
61    ///
62    /// # Returns
63    /// * `true` - 削除成功
64    /// * `false` - 削除失敗またはキーが存在しない
65    fn delete(&mut self, key: &str) -> bool;
66
67    /// キーの存在確認(自動ロードなし)
68    ///
69    /// get()と異なり、自動ロードをトリガーしない。
70    /// キャッシュとストアのみをチェックする。
71    ///
72    /// # Arguments
73    /// * `key` - manifest key ("filename.node.field")
74    ///
75    /// # Returns
76    /// * `true` - キーが存在する(キャッシュまたはストアに存在)
77    /// * `false` - キーが存在しない
78    fn exists(&mut self, key: &str) -> bool;
79}