yuca 0.1.0

Access USB Type-C device information on Linux
Documentation
#![cfg_attr(docsrs, feature(doc_cfg))]
#![doc = include_str!("../README.md")]
#![doc = include_str!("../docs/overview.md")]

pub mod sysfs;
pub mod types;
pub mod watcher;

use std::num::ParseIntError;

use rustix::io::Errno;
use thiserror::Error;

#[derive(Debug, Error, Clone, Copy, PartialEq, Eq)]
pub enum Error {
    #[error("I/O: {0}")]
    Io(std::io::ErrorKind),
    #[error("parse error")]
    Parse,
    #[error("identity attribute unavailable")]
    IdentityUnavailable,
}

impl From<std::io::Error> for Error {
    fn from(value: std::io::Error) -> Self {
        Error::Io(value.kind())
    }
}

impl From<Errno> for Error {
    fn from(value: Errno) -> Self {
        std::io::Error::from(value).into()
    }
}

impl From<nix::errno::Errno> for Error {
    fn from(value: nix::errno::Errno) -> Self {
        Errno::from_raw_os_error(value as i32).into()
    }
}

impl From<strum::ParseError> for Error {
    fn from(_: strum::ParseError) -> Self {
        Error::Parse
    }
}

impl From<ParseIntError> for Error {
    fn from(_: ParseIntError) -> Self {
        Error::Parse
    }
}

pub type Result<T> = std::result::Result<T, Error>;