Skip to main content

ohos_fileuri_binding/
error.rs

1use ohos_fileuri_sys::*;
2
3/// Error type for file URI operations
4#[derive(Debug, Clone, PartialEq, Eq)]
5pub enum FileUriError {
6    /// Permission verification failed
7    PermissionError,
8    /// Invalid input parameter
9    InvalidParameter,
10    /// Device not supported
11    DeviceNotSupported,
12    /// Operation not permitted
13    OperationNotPermitted,
14    /// No such file or directory
15    NoSuchFileOrDirectory,
16    /// Out of memory
17    OutOfMemory,
18    /// Unknown error
19    Unknown,
20    /// Failed to convert string to CString (contains null bytes)
21    NullByteError,
22    /// Failed to convert result from C
23    ConversionError,
24}
25
26impl std::fmt::Display for FileUriError {
27    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
28        match self {
29            FileUriError::PermissionError => write!(f, "Permission verification failed"),
30            FileUriError::InvalidParameter => write!(f, "Invalid input parameter"),
31            FileUriError::DeviceNotSupported => write!(f, "Device not supported"),
32            FileUriError::OperationNotPermitted => write!(f, "Operation not permitted"),
33            FileUriError::NoSuchFileOrDirectory => write!(f, "No such file or directory"),
34            FileUriError::OutOfMemory => write!(f, "Out of memory"),
35            FileUriError::Unknown => write!(f, "Unknown error"),
36            FileUriError::NullByteError => write!(f, "String contains null byte"),
37            FileUriError::ConversionError => write!(f, "Failed to convert result from C"),
38        }
39    }
40}
41
42impl std::error::Error for FileUriError {}
43
44/// Convert error code to FileUriError
45#[allow(non_upper_case_globals)]
46pub(crate) fn error_from_code(code: FileManagement_ErrCode) -> FileUriError {
47    match code {
48        FileManagement_ErrCode_ERR_PERMISSION_ERROR => FileUriError::PermissionError,
49        FileManagement_ErrCode_ERR_INVALID_PARAMETER => FileUriError::InvalidParameter,
50        FileManagement_ErrCode_ERR_DEVICE_NOT_SUPPORTED => FileUriError::DeviceNotSupported,
51        FileManagement_ErrCode_ERR_EPERM => FileUriError::OperationNotPermitted,
52        FileManagement_ErrCode_ERR_ENOENT => FileUriError::NoSuchFileOrDirectory,
53        FileManagement_ErrCode_ERR_ENOMEM => FileUriError::OutOfMemory,
54        _ => FileUriError::Unknown,
55    }
56}