diff --git a/tasks/ast_codegen/src/main.rs b/tasks/ast_codegen/src/main.rs index a740616be7d37..de0c9aa857e35 100644 --- a/tasks/ast_codegen/src/main.rs +++ b/tasks/ast_codegen/src/main.rs @@ -91,7 +91,7 @@ fn main() -> std::result::Result<(), Box> { if let CliOptions { schema: Some(schema_path), dry_run: false, .. } = cli_options { let path = schema_path.to_str().expect("invalid path for schema output."); - let schema = serde_json::to_string_pretty(&schema).normalize()?; + let schema = serde_json::to_string_pretty(&schema.defs).normalize()?; write_all_to(schema.as_bytes(), path)?; } diff --git a/tasks/ast_codegen/src/schema/defs.rs b/tasks/ast_codegen/src/schema/defs.rs index 9265361880e3b..7505de33ba125 100644 --- a/tasks/ast_codegen/src/schema/defs.rs +++ b/tasks/ast_codegen/src/schema/defs.rs @@ -9,6 +9,7 @@ use crate::{ use super::{with_either, TypeName}; #[derive(Debug, Serialize)] +#[serde(untagged)] pub enum TypeDef { Struct(StructDef), Enum(EnumDef), @@ -38,11 +39,14 @@ impl TypeDef { } #[derive(Debug, Serialize)] +#[serde(tag = "type", rename = "struct", rename_all = "camelCase")] pub struct StructDef { pub id: TypeId, pub name: String, + #[serde(skip)] pub visitable: bool, pub fields: Vec, + #[serde(skip)] pub has_lifetime: bool, pub size_64: usize, pub align_64: usize, @@ -50,12 +54,14 @@ pub struct StructDef { pub size_32: usize, pub align_32: usize, pub offsets_32: Option>, + #[serde(skip)] pub generated_derives: Vec, #[serde(skip)] pub markers: OuterMarkers, } #[derive(Debug, Serialize)] +#[serde(tag = "type", rename = "enum", rename_all = "camelCase")] pub struct EnumDef { pub id: TypeId, pub name: String, @@ -97,6 +103,7 @@ pub struct VariantDef { pub name: String, pub fields: Vec, pub discriminant: u8, + #[serde(skip)] pub markers: InnerMarkers, } @@ -112,6 +119,7 @@ impl VariantDef { #[derive(Debug, Serialize)] pub struct InheritDef { + #[serde(rename = "super")] pub super_: TypeRef, pub variants: Vec, } @@ -120,13 +128,18 @@ pub struct InheritDef { pub struct FieldDef { /// `None` if unnamed pub name: Option, + #[serde(skip)] pub vis: Visibility, + #[serde(rename = "type")] pub typ: TypeRef, + #[serde(skip)] pub markers: InnerMarkers, + #[serde(skip)] pub docs: Vec, } #[derive(Debug, Serialize)] +#[serde(rename_all = "camelCase")] pub enum Visibility { None, Pub, @@ -158,10 +171,11 @@ impl FieldDef { #[derive(Debug, Serialize)] pub struct TypeRef { + #[serde(skip)] pub(super) id: Option, pub(super) name: TypeName, - #[serde(skip)] + #[serde(rename = "id")] pub(super) transparent_id: Option, #[serde(skip)] diff --git a/tasks/ast_codegen/src/schema/mod.rs b/tasks/ast_codegen/src/schema/mod.rs index c1a00dc34e8b7..8b6406112443f 100644 --- a/tasks/ast_codegen/src/schema/mod.rs +++ b/tasks/ast_codegen/src/schema/mod.rs @@ -84,7 +84,7 @@ impl<'a> From> for TypeName { #[derive(Debug, Default, serde::Serialize)] pub struct Schema { - defs: Vec, + pub defs: Vec, } impl Schema {