use typeshift::typeshift;
#[typeshift]
#[derive(Debug)]
struct User {
#[validate(length(min = 3))]
name: String,
}
#[typeshift]
#[derive(Debug)]
struct Envelope<T> {
payload: T,
}
#[typeshift]
#[derive(Debug)]
#[serde(tag = "kind", content = "data")]
enum Event<T> {
#[serde(rename = "user.created")]
UserCreated { user: T },
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let input = r#"{"kind":"user.created","data":{"user":{"payload":{"name":"Ada"}}}}"#;
let event: Event<Envelope<User>> = typeshift::parse_str(input)?;
let json = typeshift::to_json(&event)?;
let schema = typeshift::schema_json::<Event<Envelope<User>>>();
println!("parsed: {event:?}");
println!("json: {json}");
println!("schema has oneOf: {}", schema["oneOf"].is_array());
Ok(())
}