webull_rs/utils/
serialization.rs

1use crate::error::{WebullError, WebullResult};
2use serde::{Deserialize, Serialize};
3use serde_json::{json, Value};
4
5/// Convert a struct to a JSON string.
6pub fn to_json<T>(value: &T) -> WebullResult<String>
7where
8    T: Serialize,
9{
10    serde_json::to_string(value).map_err(|e| WebullError::SerializationError(e))
11}
12
13/// Convert a JSON string to a struct.
14pub fn from_json<T>(json: &str) -> WebullResult<T>
15where
16    T: for<'de> Deserialize<'de>,
17{
18    serde_json::from_str(json).map_err(|e| WebullError::SerializationError(e))
19}
20
21/// Convert a struct to a JSON value.
22pub fn to_json_value<T>(value: &T) -> WebullResult<Value>
23where
24    T: Serialize,
25{
26    serde_json::to_value(value).map_err(|e| WebullError::SerializationError(e))
27}
28
29/// Convert a JSON value to a struct.
30pub fn from_json_value<T>(value: Value) -> WebullResult<T>
31where
32    T: for<'de> Deserialize<'de>,
33{
34    serde_json::from_value(value).map_err(|e| WebullError::SerializationError(e))
35}
36
37/// Build a JSON object with the given parameters.
38pub fn build_json_object(params: &[(&str, Value)]) -> Value {
39    let mut obj = json!({});
40
41    for (key, value) in params {
42        obj[key] = value.clone();
43    }
44
45    obj
46}