1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//! Avro deserialization for the Spate framework.
//!
//! Decodes bare Avro datums as carried by Kafka messages — Confluent wire
//! format (magic byte + schema id + datum), Avro single-object encoding,
//! or raw datums with a fixed schema — into either dynamically-typed
//! [`AvroValue`] records or your own serde types
//! ([`AvroSerdeDeserializer`]).
//!
//! # Never block the pipeline thread
//!
//! Registry schemas are fetched by an asynchronous task on the I/O
//! runtime and cached per process. A payload whose schema is not cached
//! yet reports "not ready": the operator chain holds the batch (the
//! source is paused by backpressure if needed) and replays the payload
//! once the fetch lands — records are never dropped or duplicated, and
//! the CPU-pinned pipeline threads never perform I/O. Ids the registry
//! cannot serve are negatively cached (with a TTL) and handled by the
//! deserializer's `ErrorPolicy` like any other poison payload.
//!
//! # Schema evolution
//!
//! Writer schemas come from the payload (registry id or fingerprint) or
//! configuration; an optional `reader_schema` pins the shape records are
//! resolved into, using Avro's schema-resolution rules (field reordering,
//! defaults, promotions, aliases). Registry schemas using references are
//! not supported yet and are surfaced as unavailable.
pub use ;
pub use ;
pub use ;