zksync_error/
packed.rs

1//
2// AUTOGENERATED BASED ON A SET OF JSON FILES, DO NOT EDIT MANUALLY
3//
4use crate::{
5    error::{ICustomError, IError, IUnifiedError},
6    identifier::Identifier,
7    serialized::SerializedError,
8};
9use std::fmt::Debug;
10#[derive(Clone, Debug, Eq, PartialEq, serde :: Deserialize, serde :: Serialize)]
11pub struct PackedError<U>
12where
13    U: Clone + Debug,
14{
15    pub identifier: Identifier,
16    pub message: String,
17    pub data: U,
18}
19impl<T> IError<T> for PackedError<T>
20where
21    T: Clone + Debug + serde::Serialize + for<'de> serde::Deserialize<'de>,
22{
23    fn get_identifier(&self) -> Identifier {
24        self.identifier.clone()
25    }
26    fn get_message(&self) -> String {
27        self.message.clone()
28    }
29    fn get_data(&self) -> T {
30        self.data.clone()
31    }
32}
33pub fn pack_unified<T, C>(s: T) -> Result<PackedError<T>, serde_json::Error>
34where
35    T: serde::Serialize + IUnifiedError<C> + Clone + Debug,
36    C: Clone,
37{
38    Ok(PackedError {
39        identifier: s.get_identifier(),
40        message: s.get_message(),
41        data: s,
42    })
43}
44pub fn pack<T, U, C>(s: T) -> PackedError<U>
45where
46    T: serde::Serialize + ICustomError<U, C> + Clone,
47    U: IUnifiedError<C> + Clone + Debug,
48    C: Clone,
49{
50    pack_unified(s.to_unified()).expect("Serialization error")
51}
52pub fn serialized<T, C>(p: PackedError<T>) -> SerializedError
53where
54    T: Clone + Debug + serde::Serialize + IUnifiedError<C>,
55    C: Clone,
56{
57    let data = serde_json::value::to_value(&p.data).expect("Serialization error");
58    SerializedError {
59        code: p.identifier.encode(),
60        message: p.message,
61        data,
62    }
63}
64pub fn serialized_ref<T, C>(p: &PackedError<T>) -> SerializedError
65where
66    T: Clone + Debug + serde::Serialize + IUnifiedError<C>,
67    C: Clone,
68{
69    let data = serde_json::value::to_value(&p.data).expect("Serialization error");
70    SerializedError {
71        code: p.identifier.encode(),
72        message: p.message.clone(),
73        data,
74    }
75}
76impl<T> std::fmt::Display for PackedError<T>
77where
78    T: Clone + Debug + serde::Serialize,
79{
80    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
81        let value = serde_json::value::to_value(&self.data).expect("Serialization error");
82        let value_pretty = serde_json::to_string(&value).expect("Serialization error");
83        let code = self.identifier.encode();
84        let message = &self.message;
85        let data = value_pretty;
86        f.write_fmt(format_args!(
87            r#"{{ code: {code} ; message: "{message}"; data: {data} }}"#,
88        ))
89    }
90}
91impl<T> std::error::Error for PackedError<T> where T: serde::Serialize + Debug + Clone {}