feat(phase114): FileIo trait 拡張 & メタデータ統一完成
Phase 113 で公開した .hako API は変更なく、内部実装を完全統一化。 FsApi(Ring0 stateless)と FileIo(Ring1 stateful)の設計を確立。 【実装内容】 Task 1: FileIo trait 拡張 - FileStat 構造体追加(is_file/is_dir/size) - exists/stat/canonicalize メソッド追加(FileIo trait) Task 2: Ring0FsFileIo 実装 - exists(): path を Ring0.fs で確認 - stat(): Ring0.fs.metadata() を FileStat に変換 - canonicalize(): Ring0.fs.canonicalize() を String に変換 Task 3: NoFsFileIo stub 実装 - exists() → false(全ファイルが「存在しない」扱い) - stat() → Err(Unsupported)(FS 無効情報を返す) - canonicalize() → Err(Unsupported) Task 4: FileHandleBox 内部統一 - metadata_internal() を新規追加(FileIo::stat() ベース) - is_file/is_dir/size を metadata_internal() 経由に統一 - Nyash 公開 API(ny_exists/ny_size/ny_isFile/ny_isDir)は変更なし Task 5: テスト + ドキュメント - Ring0FsFileIo: 5テスト(stat/exists/canonicalize) - NoFsFileIo: 3テスト(exist/stat/canonicalize error) - FileHandleBox: 5テスト(metadata_internal/exists/is_file/is_dir) - すべてのテスト PASS 【設計原則確立】 FsApi ↔ FileIo の責務分担: - FsApi (Ring0): Stateless(パスを毎回指定) - FileIo (Ring1): Stateful(path を内部保持) - FileHandleBox: FileIo::stat() で一元化 Profile 別動作: - Default: 全機能正常動作 - NoFs: exists=false, stat/canonicalize は Unsupported エラー 【統計】 - 修正ファイル: 9ファイル - 追加行: +432行、削除: -29行 - 新規テスト: 13個(全PASS) - ビルド: SUCCESS 【効果】 - 内部実装が完全統一(二重実装・不一貫性排除) - Phase 115+ での拡張(modified_time/permissions等)が容易に - FsApi と FileIo の設計がクリアに確立 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -612,3 +612,41 @@ Phase 106–108 では FileBox provider_lock / Ring0FsFileIo / write/write_all
|
||||
|
||||
さらに長期的には、Ring0 全体を「統一サービスレジストリ」として扱うフェーズ(Mem/Io/Time/Log/Fs/Thread の trait 統合)を
|
||||
Phase 11x 以降で検討する予定だよ。Phase 112 で factory pattern による拡張基盤が整備された!
|
||||
|
||||
---
|
||||
|
||||
### Phase 114: FileIo trait 拡張 & メタデータ統一
|
||||
|
||||
**Scope**:
|
||||
- FileIo trait に exists/stat/canonicalize 正式追加
|
||||
- Ring0FsFileIo/NoFsFileIo の実装統一
|
||||
- FileHandleBox 内部を metadata_internal() に統一
|
||||
- FileStat 構造体追加(is_file/is_dir/size)
|
||||
|
||||
**Design Principles**:
|
||||
- **FsApi = Stateless**: パスを毎回引数で受け取る(OS レイヤー)
|
||||
- **FileIo = Stateful**: open() で path を保持(ハンドルレイヤー)
|
||||
- **FileHandleBox**: FileIo::stat() 経由で統一(downcast 不要)
|
||||
|
||||
**Implementation**:
|
||||
- Ring0FsFileIo: path を RwLock で管理、ring0.fs.metadata() を FileStat に変換
|
||||
- NoFsFileIo: exists() → false, stat()/canonicalize() → Unsupported エラー
|
||||
- FileHandleBox: metadata_internal() が FileIo::stat() を呼ぶ統一設計
|
||||
|
||||
**Tests**:
|
||||
- Ring0FsFileIo: stat/exists/canonicalize 動作確認(Default プロファイル)
|
||||
- NoFsFileIo: exists=false, stat/canonicalize エラー確認
|
||||
- FileHandleBox: metadata_internal() が stat() 経由で動作確認
|
||||
|
||||
**Status**: 完了 - FsApi ↔ FileIo ↔ FileHandleBox の I/O 情報経路を完全統一
|
||||
|
||||
**Files Modified**:
|
||||
- src/boxes/file/provider.rs (FileStat 構造体, FileIo trait 拡張)
|
||||
- src/providers/ring1/file/ring0_fs_fileio.rs (exists/stat/canonicalize 実装)
|
||||
- src/providers/ring1/file/nofs_fileio.rs (stub 実装)
|
||||
- src/providers/ring1/file/core_ro.rs (exists/stat/canonicalize 実装)
|
||||
- src/boxes/file/handle_box.rs (metadata_internal() 統一)
|
||||
- docs/development/current/main/phase114_fileio_trait_extension.md (新規)
|
||||
- docs/development/current/main/core_boxes_design.md (Phase 114 セクション追加)
|
||||
- docs/development/current/main/ring0-inventory.md (this file)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user