68 lines
1.3 KiB
Rust
68 lines
1.3 KiB
Rust
use crate::prelude::*;
|
|
|
|
macro_rules! build_struct {
|
|
(
|
|
$id:ident { $($t:tt)* }
|
|
) => {
|
|
#[derive(JsonSchema, Deserialize, Serialize, Default)]
|
|
pub struct $id {
|
|
x: u8,
|
|
$($t)*
|
|
}
|
|
};
|
|
}
|
|
|
|
build_struct!(A { v: i32 });
|
|
|
|
#[test]
|
|
fn macro_built_struct() {
|
|
test!(A).assert_allows_ser_roundtrip_default();
|
|
}
|
|
|
|
macro_rules! build_enum {
|
|
(
|
|
$(#[$outer_derive:meta])*
|
|
$outer:ident {
|
|
$($(#[$inner_derive:meta])*
|
|
$inner:ident {
|
|
$( $(#[$field_attribute:meta])*
|
|
$field:ident : $ty:ty),*
|
|
})*
|
|
}
|
|
) => {
|
|
|
|
$(
|
|
$(#[$inner_derive])*
|
|
pub struct $inner {
|
|
$(
|
|
$(#[$field_attribute])*
|
|
pub $field: $ty
|
|
),*
|
|
}
|
|
)*
|
|
|
|
$(#[$outer_derive])*
|
|
pub enum $outer {
|
|
$(
|
|
$inner($inner)
|
|
),*
|
|
}
|
|
}
|
|
}
|
|
|
|
build_enum!(
|
|
#[derive(JsonSchema, Deserialize, Serialize)]
|
|
OuterEnum {
|
|
#[derive(JsonSchema, Deserialize, Serialize, Default)]
|
|
InnerStruct {
|
|
x: i32
|
|
}
|
|
}
|
|
|
|
);
|
|
|
|
#[test]
|
|
fn macro_built_enum() {
|
|
test!(OuterEnum).assert_allows_ser_roundtrip([OuterEnum::InnerStruct(InnerStruct::default())]);
|
|
}
|