> This page is for SDKs.

> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt.

## 0.22.1

**`(fix):`** Fix double-pin compilation error in `SseStream` timeout implementation. The `deadline`
field was declared as `Pin<Box<tokio::time::Sleep>>` with a `#[pin]` attribute, causing
`pin_project` to produce `Pin<&mut Pin<Box<Sleep>>>` which lacks `reset()` and `poll()`
methods. Changed the field type to `tokio::time::Sleep` (unpinned, letting `pin_project`
handle pinning) so the projected type is `Pin<&mut Sleep>` which correctly exposes
the required methods.

## 0.22.0

**`(feat):`** Add per-event timeout to SSE stream methods. The `SseStream` now accepts a timeout
duration and yields `ApiError::StreamTimeout` if no event is received within that
period. The timeout is derived from `RequestOptions.timeout_seconds` (per-request)
or `ClientConfig.timeout` (client-level), preventing indefinite blocking when the
server stops sending events.

## 0.21.0

**`(feat):`** Add forward-compatible enum support. When `forward-compatible: true` is set on an enum
type, the generated Rust enum includes a `#[non_exhaustive]` attribute, a hidden
`__Unknown(String)` variant for unrecognized values, and custom Serialize/Deserialize
implementations that gracefully handle unknown enum values from the server.

## 0.20.4

**`(fix):`** Derive `Default` on request body types (inlined and query-parameter requests) when all
fields have types that implement `Default` in Rust, not only when all fields are `Option<T>`.
Previously, a request like `ChatRequest { stream: bool, ... }` would not get `Default`
because `bool` is not `Option`, even though `bool` implements `Default`. Now the generator
uses the same `canDeriveDefault()` logic already used for model structs.

## 0.20.3

**`(fix):`** Fix dynamic snippets and wire tests generating `Some(Some(value))` for optional+nullable
fields. Since `Type.option()` now collapses `Option<Option<T>>` to `Option<T>`, the
literal mapper must also collapse nested optional/nullable wrapping to produce `Some(value)`
instead of `Some(Some(value))`.

## 0.20.2

**`(fix):`** Fix inlined request type documentation to use the schema-level description from the
OpenAPI spec instead of a generic fallback. Previously, all inlined request types used
the same `Request type for API operation` docstring. Now, the actual schema description
is propagated and used when available.

## 0.20.1

**`(fix):`** Fix unexpected\_cfgs warnings for multipart and sse features by conditionally including
the execute\_multipart\_request and execute\_sse\_request methods in http\_client.rs only when
the corresponding features are needed. Also fix unused Utc import in query\_parameter\_builder.rs
and unused SerdeError import in http\_client.rs.

## 0.20.0

**`(feat):`** Reduce dependency footprint by conditionally including dependencies based on IR usage.
Dependencies like chrono, uuid, num-bigint, ordered-float, and base64 are now only added
to Cargo.toml when the corresponding types are actually used in the API spec. Associated
as-is files (flexible\_datetime.rs, base64\_bytes.rs, bigint\_string.rs) and their module
declarations are also conditionally included. Template files for query\_parameter\_builder.rs,
http\_client.rs, and prelude.rs use template variables to omit unused code sections.

## 0.19.11

**`(fix):`** Use `&str` instead of `&String` in generated method signatures, union getter methods,
and undiscriminated union accessor methods. `&str` is more idiomatic Rust and more
flexible, accepting both `&String` and string literals.

## 0.19.10

**`(fix):`** Replace `unwrap_or_default()` with proper error propagation via `map_err(ApiError::Serialization)?`
when serializing request bodies with `serde_json::to_value`. Previously, serialization failures
were silently swallowed and replaced with a default JSON null value. Now they correctly return
an `ApiError::Serialization` error to the caller.