gloves 0.5.11

seamless secret manager and handoff
Documentation
use gloves::SecretRef;

#[test]
fn secret_ref_roundtrips_public_api() {
    let secret_ref: SecretRef = "gloves://agents/devy/api-keys/openai".parse().unwrap();

    assert_eq!(
        secret_ref.secret_id().as_str(),
        "agents/devy/api-keys/openai"
    );
    assert_eq!(
        secret_ref.to_string(),
        "gloves://agents/devy/api-keys/openai"
    );
}

#[test]
fn secret_ref_serializes_as_string_contract() {
    let secret_ref: SecretRef = "gloves://shared/database-url".parse().unwrap();
    let encoded = serde_json::to_string(&secret_ref).unwrap();
    let decoded: SecretRef = serde_json::from_str(&encoded).unwrap();

    assert_eq!(encoded, "\"gloves://shared/database-url\"");
    assert_eq!(decoded, secret_ref);
}

#[test]
fn secret_ref_validation_rejects_invalid_inputs() {
    assert!("gloves://agents/devy/../api-key"
        .parse::<SecretRef>()
        .is_err());
    assert!("gloves:///agents/devy/api-key"
        .parse::<SecretRef>()
        .is_err());
    assert!("agents/devy/api-key".parse::<SecretRef>().is_err());
}