open_ai_rust 1.1.1

Idiomatic Rust SDK for the OpenAI API: chat, responses, embeddings, audio, images, moderations, files, batches, vector stores, fine-tuning. Builder payloads, typed function-call schemas, streaming, per-request retries/timeouts.
Documentation
use super::parse_param::insert_param;
use crate::logoi::input::tool::FunctionParameter;
use serde_json::Value;

pub fn insert_obj_into_param_map(
    param_map: &mut serde_json::Map<String, serde_json::Value>,
    obj: &Vec<FunctionParameter>,
) {
    for (key, value) in parse_obj(obj) {
        param_map.insert(key, value);
    }
}

pub fn parse_obj(obj: &Vec<FunctionParameter>) -> serde_json::Map<String, Value> {
    let (fields_map, required_params) = parse_fields(obj);

    let mut out: serde_json::Map<String, Value> = serde_json::Map::new();
    out.insert(
        "type".to_string(),
        serde_json::Value::String("object".to_string()),
    );
    out.insert(
        "properties".to_string(),
        serde_json::Value::Object(fields_map),
    );
    out.insert(
        "required".to_string(),
        serde_json::Value::Array(
            required_params
                .into_iter()
                .map(serde_json::Value::String)
                .collect(),
        ),
    );
    out
}

fn parse_fields(
    fields: &Vec<FunctionParameter>,
) -> (serde_json::Map<String, Value>, Vec<String>) {
    let mut fields_map = serde_json::Map::new();
    let mut required_params = Vec::new();
    for param in fields {
        insert_param(&mut fields_map, &mut required_params, param);
    }
    (fields_map, required_params)
}