1use std::{fmt, io};
6
7#[derive(Debug)]
9pub enum MuninError {
10 Io(io::Error),
12
13 InvalidFormat(String),
15
16 UnsupportedVersion {
18 file_version: i32,
19 min_reader_version: i32,
20 },
21
22 InvalidIndex { kind: &'static str, index: i32 },
24
25 OverlongVarInt,
27
28 InvalidUtf8,
30}
31
32impl fmt::Display for MuninError {
33 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
34 match self {
35 MuninError::Io(e) => write!(f, "I/O error: {e}"),
36 MuninError::InvalidFormat(msg) => write!(f, "invalid binlog format: {msg}"),
37 MuninError::UnsupportedVersion {
38 file_version,
39 min_reader_version,
40 } => write!(
41 f,
42 "unsupported binlog version {file_version} \
43 (minimum reader version {min_reader_version}, we support >= 18)"
44 ),
45 MuninError::InvalidIndex { kind, index } => {
46 write!(f, "invalid {kind} index: {index}")
47 }
48 MuninError::OverlongVarInt => write!(f, "7-bit encoded integer is too long"),
49 MuninError::InvalidUtf8 => write!(f, "string record contains invalid UTF-8"),
50 }
51 }
52}
53
54impl std::error::Error for MuninError {
55 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
56 match self {
57 MuninError::Io(e) => Some(e),
58 _ => None,
59 }
60 }
61}
62
63impl From<io::Error> for MuninError {
64 fn from(e: io::Error) -> Self {
65 MuninError::Io(e)
66 }
67}