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}