tsp-avro
v0.3.1
Published
Experimental. A TypeSpec library and emitter that writes Apache Avro schema files. The public surface may change in any release.
Maintainers
Readme
tsp-avro
An Apache Avro emitter for TypeSpec. One record
becomes one .avsc file. It also backs the avro preview feature of
tsp-asyncapi.
Note: Experimental and pre-1.0. The decorators, the output and the diagnostics may change in any release, so pin an exact version if you depend on it.
Quick start
Install:
npm install tsp-avrotspconfig.yaml:
emit:
- "tsp-avro"main.tsp:
import "tsp-avro";
@Avro.avroNamespace("com.example.orders")
namespace Orders;
@Avro.avroRecord
model OrderPlaced {
orderId: string;
quantity: int32;
}Compile:
tsp compile .That writes tsp-output/tsp-avro/com/example/orders/OrderPlaced.avsc:
{
"type": "record",
"name": "OrderPlaced",
"namespace": "com.example.orders",
"fields": [
{ "name": "orderId", "type": "string" },
{ "name": "quantity", "type": "int" }
]
}The Avro namespace decides the directory a file lands in. This emitter has no
options of its own; emitter-output-dir is a compiler option every emitter
takes.
Decorators
| Decorator | Target | What it does |
| --------------------------------- | ------------------------------------------ | --------------------------------------------------------------------- |
| @Avro.avroNamespace(name) | Namespace | Declares the Avro namespace. A record takes the nearest one above it. |
| @Avro.avroRecord | Model | Marks a model to emit. One marked model becomes one .avsc file. |
| @Avro.aliases(...names) | Model, ModelProperty, Enum, Scalar | Former names, so a reader can read data written before a rename. |
| @Avro.order(mode) | ModelProperty | ascending, descending or ignore. |
| @Avro.fixed(size) | Model, Scalar | Makes an Avro fixed type of that many bytes. |
| @Avro.logicalType(name) | Scalar, ModelProperty | Writes one of the logical types the specification defines. |
| @Avro.decimal(precision, scale) | Scalar, ModelProperty | Writes the decimal logical type with its parameters. |
| @Avro.enumDefault(member) | Enum | The member a reader uses when it meets a symbol it does not know. |
Documentation comes from a /** */ comment and a field default from
= value. Neither needs a decorator.
More
Traditional Chinese: README.zh-TW.md
License
MIT
