libjsonutils/
json.rs

1//! JSON utilities.
2use crate::error::Error;
3use serde_json::Value;
4
5/// Get the keys of a JSON object. Returns an [Error] if the value is not an object.
6pub fn get_keys(value: &Value) -> Result<Vec<String>, Error> {
7    if let Value::Object(map) = value {
8        Ok(map.keys().cloned().collect())
9    } else {
10        Err(Error::custom("Value is not an object."))
11    }
12}
13
14/// Get the values of a JSON object. Returns an [Error] if the value is not an object.
15pub fn get_values(value: &Value) -> Result<Vec<Value>, Error> {
16    if let Value::Object(map) = value {
17        Ok(map.values().cloned().collect::<Vec<_>>())
18    } else {
19        Err(Error::custom("Value is not an object."))
20    }
21}
22
23/// Get the length of a JSON array or a JSON object. Returns an [Error] if the value is not an array.
24pub fn get_length(value: &Value) -> Result<usize, Error> {
25    if let Value::Array(array) = value {
26        Ok(array.len())
27    } else if let Value::Object(map) = value {
28        Ok(map.len())
29    } else {
30        Err(Error::custom("Value is not an array."))
31    }
32}