1use thiserror::Error;
2
3use crate::{Message, Value};
4
5pub type Result<T> = std::result::Result<T, Error>;
6pub type ConversionResult<T> = std::result::Result<T, ConversionError>;
7pub type SerializeResult<T> = std::result::Result<T, SerializationError>;
8pub type DeserializeResult<T> = std::result::Result<T, DeserializationError>;
9
10#[derive(Debug, Error)]
11pub enum Error {
12 #[error(transparent)]
13 ConversionError(#[from] ConversionError),
14 #[error(transparent)]
15 SerializationError(#[from] SerializationError),
16 #[error(transparent)]
17 DeserializationError(#[from] DeserializationError),
18}
19
20#[derive(Debug, Error)]
21pub enum ConversionError {
22 #[error("invalid conversion from value {0:?}")]
23 FromValue(Value),
24 #[error("invalid conversion from message {0:?}")]
25 FromMessage(Message),
26 #[error(transparent)]
27 TryFromIntError(#[from] std::num::TryFromIntError),
28 #[error(transparent)]
29 Infallible(#[from] std::convert::Infallible),
30}
31
32#[derive(Debug, Error)]
33pub enum SerializationError {
34 #[error("value too large (size: {0})")]
35 ValueTooLarge(usize),
36}
37
38#[derive(Debug, Error)]
39pub enum DeserializationError {
40 #[error("panicked during deserialization")]
41 Panicked,
42 #[error("invalid marker byte: {0:x}")]
43 InvalidMarkerByte(u8),
44 #[error("invalid signature byte: {0:x}")]
45 InvalidSignatureByte(u8),
46 #[error("invalid size ({size} fields) for signature byte {signature:x}")]
47 InvalidSize { size: usize, signature: u8 },
48 #[error("string deserialization failed: {0}")]
49 InvalidUTF8(#[from] std::string::FromUtf8Error),
50 #[error(transparent)]
51 ConversionError(#[from] ConversionError),
52 #[error(transparent)]
53 IoError(#[from] std::io::Error),
54 #[error(transparent)]
55 Infallible(#[from] std::convert::Infallible),
56}