ax-fs-ng 0.5.6

ArceOS filesystem module
use ax_errno::LinuxError;
use axfs_ng_vfs::{NodeType, VfsError};
use lwext4_rust::{Ext4Error, InodeType, SystemHal};

use super::Ext4Disk;

pub struct AxHal;
impl SystemHal for AxHal {
    fn now() -> Option<core::time::Duration> {
        if cfg!(feature = "times") {
            Some(ax_hal::time::wall_time())
        } else {
            None
        }
    }
}

pub type LwExt4Filesystem = lwext4_rust::Ext4Filesystem<AxHal, Ext4Disk>;

pub fn into_vfs_err(err: Ext4Error) -> VfsError {
    let linux_error = LinuxError::try_from(err.code).unwrap_or(LinuxError::EIO);
    VfsError::from(linux_error).canonicalize()
}

pub fn into_vfs_type(ty: InodeType) -> NodeType {
    match ty {
        InodeType::RegularFile => NodeType::RegularFile,
        InodeType::Directory => NodeType::Directory,
        InodeType::CharacterDevice => NodeType::CharacterDevice,
        InodeType::BlockDevice => NodeType::BlockDevice,
        InodeType::Fifo => NodeType::Fifo,
        InodeType::Socket => NodeType::Socket,
        InodeType::Symlink => NodeType::Symlink,
        InodeType::Unknown => NodeType::Unknown,
    }
}