0.42.2

(fix): Endpoints now send API-, service- and endpoint-level headers whose types are literals (e.g. Accept-Encoding: literal<"gzip">). Previously these headers were silently dropped. Caller-supplied values via RequestOptions::additional_header still take precedence over the literal defaults.

0.42.1

(fix): Enable the gzip feature on the generated SDK’s reqwest dependency so that gzip-encoded response bodies are decompressed automatically. Previously, reqwest was configured with default-features = false and no compression features, so responses to requests with a spec-defined Accept-Encoding: gzip header were returned as raw gzip bytes.

0.42.0

(feat): Wire up OAuth client-credentials authentication in the generated client. When an OAuth client-credentials scheme is defined, the generated ClientConfig now carries the resolved token endpoint and the HttpClient automatically fetches, caches, and refreshes a bearer token before making authenticated requests. Previously the OAuth scaffolding was present but never connected to the request flow.

0.41.2

(fix): Add a robust resolution chain for core as-is template files so the generator works in standalone Docker, embedded CLI Docker, and monorepo dev layouts. Supports FERN_RUST_ASIS_DIR env var override.

(fix): Escape Rust reserved keywords in generated client method names. An endpoint named e.g. “move” now generates pub async fn r#move instead of the unparseable pub async fn move.

0.41.1

(fix): Skip README, CONTRIBUTING, and reference.md generation when running in cliEmbedded mode. These standalone docs require static assets (features.yml, asIs/) only available in the standalone Docker image and are not needed for embedded SDK crates.

0.41.0

(internal): Expose generateAndReturnContext() on SdkGeneratorCli for in-process invocation by the CLI generator. Returns the populated SdkGeneratorContext after generation completes.

0.40.9

(fix): Fix multipart file-upload endpoints with binary responses to use streaming method, and fix file-upload endpoints with query parameters to bind the query-folded envelope type instead of the bare body type. Both issues caused cargo build failures on endpoints like ElevenLabs speech-to-speech (multipart + binary response + query params).

0.40.8

(fix): Fix unreachable pattern warnings in generated request structs by using #[serde(skip)] instead of #[serde(skip_serializing)] for query parameter fields that share serde rename targets with body fields.

(fix): Remove unused ReqwestExecutor struct and impl from the generated HTTP client template.

0.40.7

(fix): Escape Rust reserved keywords (static, override, etc.) in generated union variant constructor function names using r# raw identifier syntax. Also skip generating the catch-all unknown() constructor when a union already has a variant named “unknown” to avoid duplicate definitions.

0.40.6

(fix): Import serde::{Deserialize, Serialize} directly in environment.rs for multi-URL environments instead of relying on the crate prelude. The CLI generator embeds the SDK and replaces src/prelude.rs with a bare types-crate re-export, which dropped the serde derive macros and broke compilation with cannot find derive macro Serialize in this scope.

0.40.5

(fix): Fix error.rs failing to compile when an error body has a property whose type is a named (non-primitive) type or a non-string/non-u64 primitive (e.g. i64). Error body fields are now deserialized with serde_json::from_value into their actual Rust type (instead of always reading as_str()/as_u64()), and the crate prelude is imported when a field references a generated type so it resolves in scope. Also fixes a latent bug where errors sharing a status code all reused the first error’s body fields; each variant is now constructed with its own fields.

0.40.4

(fix): Always wrap IR-derived error fields in Option to match constructor code that assigns None for missing fields, preventing struct/constructor type mismatches. Fix thiserror format strings: {{message}}{message} so field values are actually interpolated.

(fix): Register synthesized request-envelope types for endpoints with a referenced request body AND query parameters in the model generator’s types/mod.rs. Previously these types were generated but never declared as modules, causing unresolved-type errors in the SDK crate.

0.40.3

(fix): Fix error field parsing to use camelCase JSON wire names matching REST conventions (e.g. resourceId, authType, errorId) and derive error fields from the IR type definition when available. Fix empty-body response handling: parse_response and parse_response_raw now return Ok for empty 2xx bodies (unit/HEAD/204 responses) and Err for empty 4xx/5xx bodies, preventing auth failures from being silently swallowed on the with_executor path.

0.40.2

(fix): Change RequestExecutor::execute return type from Result<Response, reqwest::Error> to Result<Response, Box<dyn std::error::Error + Send + Sync>> and add ApiError::Executor variant. This allows downstream crates (e.g. CLI glue) to inject custom executor errors without a backwards dependency on reqwest.

0.40.1

(fix): Fix compilation error where structs incorrectly derived Default when containing fields whose types extend base objects that don’t support Default (e.g., objects with required enum fields). The namedTypeSupportsDefault check now also verifies parent types via extends, not just direct properties.

0.40.0

(feat): Add RequestExecutor trait and HttpClient::with_executor() constructor to enable CLI execution-sharing. When an external executor is injected, the SDK delegates HTTP execution entirely — auth, headers, and retries are handled by the caller’s transport stack.

0.39.0

(internal): Parameterize core module path in model generator to support standalone types crate usage.

0.38.0

(feat): Support embedding as a library crate inside CLI generator output. Async command handlers, AppContext::client() returning a forward-compatible ApiClient trait, and ResolvedClientConfig for auth credential resolution.

0.37.1

(fix): Fix the root client failing to compile when root-level endpoints return Server-Sent Event streams, return binary bodies, or use query parameters. The root client now imports SseStream, ByteStream, and QueryBuilder when those endpoints are present, matching sub-client behavior.

0.37.0

(feat): Discriminated unions are now forward-compatible. Each generated enum carries #[non_exhaustive] and a final __Unknown(serde_json::Value) variant marked #[serde(untagged)]. Unknown discriminant values (e.g. variants introduced server-side after this SDK was generated) deserialize into __Unknown instead of erroring, preserving the raw JSON payload for inspection and round-trip serialization.