wiremux 0.11.13

Wiremux maps Chat Completions, Messages, Responses, Gemini, and Converse through one IR.
Documentation
//! Decode Chat Completions JSON and encode Anthropic Messages.
//!
//! ```bash
//! cargo run -p wiremux --example remap --no-default-features
//! ```

use wiremux::{LoadOptions, Wire, decode, encode, load_profile_for_wire};

fn main() {
    let src = br#"{"model":"gpt-4o","messages":[{"role":"user","content":"ping"}]}"#;
    let (ir, decode_loss) = decode(Wire::ChatCompletions, src).expect("decode Chat Completions");
    let profile = load_profile_for_wire(
        Wire::Messages,
        &LoadOptions {
            include_shipped: false,
            include_user_config: false,
            ..LoadOptions::default()
        },
    )
    .expect("minimal messages profile");
    let (out, encode_loss) = encode(Wire::Messages, &ir, &profile).expect("encode Messages");
    let value: serde_json::Value = serde_json::from_slice(&out).expect("JSON body");
    println!(
        "{}",
        serde_json::to_string_pretty(&value).expect("pretty JSON")
    );
    if !decode_loss.events.is_empty() {
        eprintln!("decode loss: {decode_loss:?}");
    }
    if !encode_loss.events.is_empty() {
        eprintln!("encode loss: {encode_loss:?}");
    }
}