use std::path::PathBuf;
use thiserror::Error;
use crate::mo::Header;
#[derive(Debug, Error)]
pub enum Error {
#[error("invalid information element identifier: {0}")]
InvalidInformationElementIdentifier(u8),
#[error("invalid protocol revision number: {0}")]
InvalidProtocolRevisionNumber(u8),
#[error("invalid time of session")]
InvalidTimeOfSession,
#[error("io error: {0}")]
Io(#[from] std::io::Error),
#[error("the overall message length is too big: {0}")]
OverallMessageLength(usize),
#[error("negative timestamp: {0}")]
NegativeTimestamp(i64),
#[error("no header")]
NoHeader,
#[error("not a directory: {}", .0.display())]
NotADirectory(PathBuf),
#[error("no payload")]
NoPayload,
#[error("the payload is too long at {0} bytes")]
PayloadTooLong(usize),
#[error("two headers")]
TwoHeaders(Header, Header),
#[error("two payloads")]
TwoPayloads(Vec<u8>, Vec<u8>),
#[error("unknown session status: {0}")]
UnknownSessionStatus(u8),
#[error("walkdir error: {0}")]
Walkdir(#[from] walkdir::Error),
}