use crate::error::PraxisResult;
use std::path::{Path, PathBuf};
#[derive(Debug, Clone)]
pub struct FsMetadata {
pub is_file: bool,
pub is_dir: bool,
pub size_bytes: u64,
}
#[derive(Debug, Clone)]
pub struct FsDirEntry {
pub name: String,
pub is_file: bool,
pub is_dir: bool,
}
pub trait FsPort: Send + Sync {
fn workspace_root(&self) -> &Path;
fn resolve(&self, path: &Path) -> PraxisResult<PathBuf>;
fn resolve_for_write(&self, path: &Path) -> PraxisResult<PathBuf>;
fn read_to_string(&self, path: &Path) -> PraxisResult<String>;
fn read_bytes(&self, path: &Path) -> PraxisResult<Vec<u8>>;
fn write(&self, path: &Path, content: &[u8]) -> PraxisResult<()>;
fn exists(&self, path: &Path) -> bool;
fn metadata(&self, path: &Path) -> PraxisResult<FsMetadata>;
fn read_dir(&self, path: &Path) -> PraxisResult<Vec<FsDirEntry>>;
fn create_dir_all(&self, path: &Path) -> PraxisResult<()>;
fn relative(&self, absolute_path: &Path) -> Option<PathBuf>;
}