gproxy-protocol 3.0.0-alpha.0

GPROXY v3 protocol model: operation taxonomy, wire kinds, and the OperationSpec registry
Documentation
use gproxy_protocol::{
    ContentGenerationKind, Operation, OperationKey, OperationKind, WireFamily, claude,
};

#[test]
fn external_consumers_construct_extensible_wire_types_with_builders() {
    let message = claude::MessageParam::builder()
        .role(claude::MessageRole::Known(claude::MessageRoleKnown::User))
        .content(claude::StringOrArray::String("hello".into()))
        .build()
        .unwrap();
    let request = claude::CreateMessageRequestBody::builder()
        .model("claude-sonnet-4-6".to_owned().into())
        .messages(vec![message])
        .max_tokens(64)
        .build()
        .unwrap();

    assert_eq!(request.messages.len(), 1);
    assert_eq!(request.max_tokens, 64);
}

#[test]
fn operation_key_rejects_inconsistent_kind_combinations() {
    assert!(
        OperationKey::try_new(
            Operation::Rerank,
            OperationKind::ContentGeneration(ContentGenerationKind::OpenAiChat),
        )
        .is_err()
    );
    assert!(
        OperationKey::try_new(
            Operation::GenerateContent,
            OperationKind::Family(WireFamily::OpenAi),
        )
        .is_err()
    );
}