Skip to main content

langsmith_rust/utils/
serialization.rs

1use serde::Serialize;
2use serde_json::Value;
3
4/// Ensures that a serialized value is always an object.
5/// If the value is a primitive type (string, number, bool, null, array),
6/// it wraps it in an object with a default key.
7pub fn ensure_object<T: Serialize>(value: T, key: &str) -> Result<Value, serde_json::Error> {
8    let mut json_value = serde_json::to_value(value)?;
9    
10    if !json_value.is_object() {
11        json_value = serde_json::json!({ key: json_value });
12    }
13    
14    Ok(json_value)
15}
16
17/// Ensures inputs are always an object
18pub fn ensure_inputs_object<T: Serialize>(value: T) -> Result<Value, serde_json::Error> {
19    ensure_object(value, "input")
20}
21
22/// Ensures outputs are always an object
23pub fn ensure_outputs_object<T: Serialize>(value: T) -> Result<Value, serde_json::Error> {
24    ensure_object(value, "output")
25}
26