Serde Compatibility
typewriter automatically reads and respects serde attributes.
Field Renaming
#![allow(unused)]
fn main() {
#[serde(rename = "userId")]
pub id: String,
}
Field Skip
#![allow(unused)]
fn main() {
#[serde(skip)]
pub internal_field: String,
}
Tagged Enums
Internally Tagged (tag = "type")
#![allow(unused)]
fn main() {
#[derive(TypeWriter)]
#[serde(tag = "type")]
pub enum Event {
Click { x: u32, y: u32 },
KeyPress(char),
}
}
TypeScript:
type Event =
| { type: "Click"; x: number; y: number }
| { type: "KeyPress"; value: string };
Adjacently Tagged
#![allow(unused)]
fn main() {
#[derive(TypeWriter)]
#[serde(tag = "event", content = "data")]
pub enum Event {
Click { x: u32, y: u32 },
}
}
TypeScript:
type Event =
| { event: "Click"; data: { x: number; y: number } };
Untagged
#![allow(unused)]
fn main() {
#[derive(TypeWriter)]
#[serde(untagged)]
pub enum Event {
Click { x: u32, y: u32 },
String(String),
}
}
TypeScript:
type Event = { x: number; y: number } | string;
Field Flatten
#![allow(unused)]
fn main() {
#[serde(flatten)]
pub extra: ExtraData,
}
Rename All Variants
#![allow(unused)]
fn main() {
#[derive(TypeWriter)]
#[serde(rename_all = "snake_case")]
pub enum Status {
InProgress,
UserId,
}
}
Generates: IN_PROGRESS, USER_ID (in appropriate casing for each language).