redis_json/
error.rs

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}