Skip to main content

axum_limit/
codec.rs

1use std::error::Error;
2use std::fmt::{Display, Formatter, Result as FmtResult};
3
4/// Errors that occur while encoding or decoding policy state.
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub enum CodecError {
7    /// The serialized payload was invalid.
8    InvalidPayload(String),
9}
10
11impl Display for CodecError {
12    fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
13        match self {
14            CodecError::InvalidPayload(message) => write!(f, "invalid policy payload: {message}"),
15        }
16    }
17}
18
19impl Error for CodecError {}
20
21pub(crate) fn encode_json<T: serde::Serialize>(value: &T) -> Result<Vec<u8>, CodecError> {
22    serde_json::to_vec(value).map_err(|error| CodecError::InvalidPayload(error.to_string()))
23}
24
25pub(crate) fn decode_json<T: serde::de::DeserializeOwned>(bytes: &[u8]) -> Result<T, CodecError> {
26    serde_json::from_slice(bytes).map_err(|error| CodecError::InvalidPayload(error.to_string()))
27}