Files
hakorune/src/runtime/ring0/traits.rs

84 lines
2.1 KiB
Rust
Raw Normal View History

//! Phase 88: Ring0 trait 定義
//!
//! OS API レイヤーの純粋な抽象化。
//! Box 名・Nyash 型を一切知らない。
use super::errors::{IoError, TimeError};
use std::time::SystemTime;
/// メモリ APIPhase 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<usize, IoError>;
}
/// 時刻 API
pub trait TimeApi: Send + Sync {
/// 現在時刻取得
fn now(&self) -> Result<SystemTime, TimeError>;
/// モノトニック時刻取得(高精度タイマー用)
fn monotonic_now(&self) -> Result<std::time::Instant, TimeError>;
}
/// ログレベル
#[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);
}
}