#![allow(dead_code)] use serde::Serialize; use ts_rs::TS; #[derive(Serialize, TS)] #[ts(export, export_to = "optional_field/")] struct OptionalInStruct { #[ts(optional)] a: Option, #[ts(optional = nullable)] b: Option, c: Option, } #[test] fn in_struct() { let a = "a?: number"; let b = "b?: number | null"; let c = "c: number | null"; assert_eq!(OptionalInStruct::inline(), format!("{{ {a}, {b}, {c}, }}")); } #[derive(Serialize, TS)] #[ts(export, export_to = "optional_field/")] enum OptionalInEnum { A { #[ts(optional)] a: Option, }, B { b: Option, }, } #[test] fn in_enum() { assert_eq!( OptionalInEnum::inline(), r#"{ "A": { a?: number, } } | { "B": { b: string | null, } }"# ); } #[derive(Serialize, TS)] #[ts(export, export_to = "optional_field/")] struct OptionalFlatten { #[ts(optional)] a: Option, #[ts(optional = nullable)] b: Option, c: Option, } #[derive(Serialize, TS)] #[ts(export, export_to = "optional_field/")] struct Flatten { #[ts(flatten)] x: OptionalFlatten, } #[test] fn flatten() { assert_eq!(Flatten::inline(), OptionalFlatten::inline()); } #[derive(Serialize, TS)] #[ts(export, export_to = "optional_field/")] struct OptionalInline { #[ts(optional)] a: Option, #[ts(optional = nullable)] b: Option, c: Option, } #[derive(Serialize, TS)] #[ts(export, export_to = "optional_field/")] struct Inline { #[ts(inline)] x: OptionalInline, } #[test] fn inline() { let a = "a?: number"; let b = "b?: number | null"; let c = "c: number | null"; assert_eq!(Inline::inline(), format!("{{ x: {{ {a}, {b}, {c}, }}, }}")); }