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.