//! Phase 88: Ring0 trait 定義 //! //! OS API レイヤーの純粋な抽象化。 //! Box 名・Nyash 型を一切知らない。 use super::errors::{IoError, TimeError}; use std::time::SystemTime; /// メモリ API(Phase 88: noop、将来 hakmem 接続) pub trait MemApi: Send + Sync { /// メモリ割り当て(Phase 88: 未実装) fn alloc(&self, size: usize) -> *mut u8; /// メモリ解放(Phase 88: 未実装) fn free(&self, ptr: *mut u8); /// メモリ統計(Phase 88: 未実装) fn stats(&self) -> MemStats; } /// メモリ統計情報 #[derive(Debug, Default, Clone)] pub struct MemStats { pub allocated: usize, pub freed: usize, pub current: usize, } /// IO API pub trait IoApi: Send + Sync { /// 標準出力への書き込み fn stdout_write(&self, data: &[u8]) -> Result<(), IoError>; /// 標準エラー出力への書き込み fn stderr_write(&self, data: &[u8]) -> Result<(), IoError>; /// 標準入力からの読み込み fn stdin_read(&self, buf: &mut [u8]) -> Result; } /// 時刻 API pub trait TimeApi: Send + Sync { /// 現在時刻取得 fn now(&self) -> Result; /// モノトニック時刻取得(高精度タイマー用) fn monotonic_now(&self) -> Result; } /// ログレベル #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum LogLevel { Debug, Info, Warn, Error, } /// ログ API pub trait LogApi: Send + Sync { /// ログ出力 fn log(&self, level: LogLevel, msg: &str); /// デバッグログ(便利メソッド) fn debug(&self, msg: &str) { self.log(LogLevel::Debug, msg); } /// 情報ログ(便利メソッド) fn info(&self, msg: &str) { self.log(LogLevel::Info, msg); } /// 警告ログ(便利メソッド) fn warn(&self, msg: &str) { self.log(LogLevel::Warn, msg); } /// エラーログ(便利メソッド) fn error(&self, msg: &str) { self.log(LogLevel::Error, msg); } }