satay-codegen 0.8.1

Generate Rust client code from OpenAPI 3.1 documents
Documentation
use satay_codegen::{Error, ValidationError};

#[test]
fn openapi_30_documents_are_rejected() {
    let err = satay_codegen::generate(
        r#"
openapi: 3.0.3
info:
  title: OpenAPI 3.0 API
  version: 1.0.0
paths: {}
"#,
    )
    .expect_err("OpenAPI 3.0 documents are unsupported");

    match err {
        Error::Validation(ValidationError::UnsupportedOpenApiVersion { version }) => {
            assert_eq!(version, "3.0.3");
        }
        other => panic!("unexpected error: {other}"),
    }
}

#[test]
fn nullable_parameters_are_rejected_instead_of_generating_invalid_rust() {
    let err = satay_codegen::generate(
        r#"
openapi: 3.1.0
info:
  title: Nullable parameter
  version: 1.0.0
paths:
  /users/{userId}:
    get:
      operationId: getUser
      parameters:
        - name: userId
          in: path
          required: true
          schema:
            type: [string, "null"]
      responses:
        '204':
          description: No content
"#,
    )
    .expect_err("nullable parameters are unsupported");

    match err {
        Error::Validation(ValidationError::NullableParameterUnsupported { wire_name, .. }) => {
            assert_eq!(wire_name, "userId");
        }
        other => panic!("unexpected error: {other}"),
    }
}

#[test]
fn default_response_bodies_are_rejected_instead_of_silently_dropped() {
    let err = satay_codegen::generate(
        r#"
openapi: 3.1.0
info:
  title: Default response
  version: 1.0.0
paths:
  /ping:
    get:
      operationId: ping
      responses:
        default:
          description: Error response
          content:
            application/json:
              schema:
                type: string
"#,
    )
    .expect_err("default response bodies are unsupported");

    match err {
        Error::Validation(ValidationError::DefaultResponseBodyUnsupported { context, .. }) => {
            assert_eq!(context, "operation `ping` responses");
        }
        other => panic!("unexpected error: {other}"),
    }
}