1use redis::{ErrorKind, RedisError};
2use std::{
3 num::{ParseFloatError, ParseIntError},
4 str::Utf8Error,
5};
6use thiserror::Error;
7
8#[derive(Debug, Error)]
9pub enum Error {
10 #[error(transparent)]
11 Utf8(#[from] Utf8Error),
12 #[error(transparent)]
13 ParseFloat(#[from] ParseFloatError),
14 #[error(transparent)]
15 ParseInt(#[from] ParseIntError),
16 #[error(transparent)]
17 Serde(#[from] serde_json::Error),
18 #[error(transparent)]
19 Redis(#[from] RedisError),
20}
21
22impl From<Error> for RedisError {
23 fn from(err: Error) -> Self {
24 match err {
25 Error::Utf8(err) => RedisError::from((
26 redis::ErrorKind::TypeError,
27 "Invalid utf8 value",
28 err.to_string(),
29 )),
30 Error::ParseFloat(err) => RedisError::from((
31 redis::ErrorKind::TypeError,
32 "Invalid float value",
33 err.to_string(),
34 )),
35 Error::ParseInt(err) => RedisError::from((
36 redis::ErrorKind::TypeError,
37 "Invalid integer value",
38 err.to_string(),
39 )),
40 Error::Serde(err) => {
41 RedisError::from((ErrorKind::TypeError, "Invalid JSON value", err.to_string()))
42 }
43 Error::Redis(err) => err,
44 }
45 }
46}