rust-ipmi 0.1.1

IPMI client library for rust
Documentation
use thiserror::Error;

use super::{
    AuthAlgorithmError, CommandError, ConfidentialityAlgorithmError, IntegrityAlgorithmError,
    LunError, NetFnError, PrivilegeError,
};

#[derive(Error, Debug)]
pub enum ParseError {
    #[error("Length of slice should be 4 bytes")]
    WrongLength,
    #[error("Failed to parse slice to rmcp header")]
    FailedToParse,
    #[error("Unsupported Message class {0}")]
    UnsupportedMessageClass(u8),
    #[error("Failed parsing IPMI payload {0:?}")]
    NetFn(#[from] NetFnError),
    #[error("Failed parsing IPMI payload {0:?}")]
    Lun(#[from] LunError),
    #[error("Failed parsing IPMI payload {0:?}")]
    Command(#[from] CommandError),
    #[error("Failed parsing IPMI payload {0:?}")]
    Privilege(#[from] PrivilegeError),
    #[error("Failed parsing IPMI payload {0:?}")]
    AuthAlgorithm(#[from] AuthAlgorithmError),
}

#[derive(Error, Debug)]
pub enum IpmiHeaderError {
    #[error("Length of slice should be at least 10 bytes")]
    WrongLength,
    #[error("Failed parsing IPMI v2 header {0:?}")]
    V2Error(#[from] IpmiV2HeaderError),
    #[error("Failed parsing IPMI v1.5 header {0:?}")]
    V1_5Error(#[from] IpmiV1HeaderError),
    #[error("Unsupported Auth Type {0}")]
    UnsupportedAuthType(u8),
}

#[derive(Error, Debug)]
pub enum IpmiPayloadError {
    #[error("Length of slice should be at least 7 bytes")]
    WrongLength,
    #[error("Failed parsing IPMI request payload {0:?}")]
    PayloadRequestError(#[from] IpmiPayloadRequestError),
    #[error("Unsupported Auth Type {0}")]
    UnsupportedAuthType(u8),
    #[error("Failed parsing IPMI payload {0:?}")]
    NetFn(#[from] NetFnError),
    #[error("Failed parsing IPMI payload {0:?}")]
    Lun(#[from] LunError),
    #[error("Failed parsing IPMI payload {0:?}")]
    Command(#[from] CommandError),
    #[error("Failed parsing IPMI payload {0:?}")]
    Privilege(#[from] PrivilegeError),
    #[error("Failed parsing payload")]
    Parse(#[from] ParseError),
    #[error("Failed parsing IPMI payload {0:?}")]
    AuthAlgorithm(#[from] AuthAlgorithmError),
    #[error("Failed parsing IPMI payload {0:?}")]
    IntegrityAlgorithm(#[from] IntegrityAlgorithmError),
    #[error("Failed parsing IPMI payload {0:?}")]
    ConfidentialityAlgorithm(#[from] ConfidentialityAlgorithmError),
}

#[derive(Error, Debug)]
pub enum IpmiV2HeaderError {
    #[error("Length of slice should be either 12 or 18 bytes")]
    WrongLength,
    #[error("Unsupported Payload Type {0}")]
    UnsupportedPayloadType(u8),
}

#[derive(Error, Debug)]
pub enum IpmiV1HeaderError {
    #[error("Length of slice should be either 10 or 26 bytes")]
    WrongLength,
}

#[derive(Error, Debug)]
pub enum IpmiPayloadRequestError {
    #[error("Length of slice should be at least 7 bytes")]
    WrongLength,
    #[error("Unsupported Payload Type {0}")]
    UnsupportedPayloadType(u8),
    #[error("Failed parsing payload")]
    Parse(#[from] ParseError),
}