//! Phase 91: CoreServices 定義 //! //! Ring1-Core: core_required Box の Service trait 群。 //! Phase 87 CoreBoxId の core_required (6個) 全てをカバー。 use std::sync::Arc; use crate::runtime::CoreBoxId; /// StringBox Service trait pub trait StringService: Send + Sync { // Phase 92 以降で実装 } /// IntegerBox Service trait pub trait IntegerService: Send + Sync { // Phase 92 以降で実装 } /// BoolBox Service trait pub trait BoolService: Send + Sync { // Phase 92 以降で実装 } /// ArrayBox Service trait pub trait ArrayService: Send + Sync { // Phase 92 以降で実装 } /// MapBox Service trait pub trait MapService: Send + Sync { // Phase 92 以降で実装 } /// ConsoleBox Service trait pub trait ConsoleService: Send + Sync { // Phase 92 以降で実装 } /// CoreServices: core_required Box の集合 /// /// Phase 85 設計原則: /// - core_required は必ず全て揃っていなければならない /// - 起動時に全フィールドが初期化されていることを保証 /// /// Phase 87 CoreBoxId との対応: /// - String → string /// - Integer → integer /// - Bool → bool /// - Array → array /// - Map → map /// - Console → console pub struct CoreServices { pub string: Arc, pub integer: Arc, pub bool: Arc, pub array: Arc, pub map: Arc, pub console: Arc, } impl CoreServices { /// Phase 87 CoreBoxId の core_required (6個) を返す /// /// Phase 87 CoreBoxId::is_core_required() と完全一致する。 pub fn required_ids() -> &'static [CoreBoxId] { &[ CoreBoxId::String, CoreBoxId::Integer, CoreBoxId::Bool, CoreBoxId::Array, CoreBoxId::Map, CoreBoxId::Console, ] } /// 全フィールドが初期化されているか検証 /// Phase 92 以降で各 Service の初期化を検証 pub fn ensure_initialized(&self) { // Phase 91 では trait が空なので何もしない // Phase 92 以降で各 Service の初期化を検証 } /// Phase 93: ダミー実装(Phase 94 で削除予定) pub fn dummy() -> Self { use crate::runtime::plugin_host::*; Self { string: Arc::new(DummyStringService), integer: Arc::new(DummyIntegerService), bool: Arc::new(DummyBoolService), array: Arc::new(DummyArrayService), map: Arc::new(DummyMapService), console: Arc::new(DummyConsoleService), } } } #[cfg(test)] mod tests { use super::*; #[test] fn test_required_ids_consistency() { let required = CoreServices::required_ids(); assert_eq!(required.len(), 6); // Phase 87 CoreBoxId::is_core_required() と一致 for id in required { assert!(id.is_core_required()); } // 全ての core_required が含まれているか確認 assert!(required.contains(&CoreBoxId::String)); assert!(required.contains(&CoreBoxId::Integer)); assert!(required.contains(&CoreBoxId::Bool)); assert!(required.contains(&CoreBoxId::Array)); assert!(required.contains(&CoreBoxId::Map)); assert!(required.contains(&CoreBoxId::Console)); } }