From dab24aed61e08c9ca8b3468c0f9102cf9f01434d Mon Sep 17 00:00:00 2001 From: Janis Date: Thu, 29 Jun 2023 16:26:39 +0200 Subject: [PATCH] sdk-builder: actually pass on generated tokens --- sdk-builder/src/main.rs | 46 +++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/sdk-builder/src/main.rs b/sdk-builder/src/main.rs index a3dc775..6eae252 100644 --- a/sdk-builder/src/main.rs +++ b/sdk-builder/src/main.rs @@ -843,11 +843,22 @@ pub mod rust { #field_trait }; - todo!() + + Ok(tokens) } - fn generate_package(&self, pkg: &ProcessedPackage) -> anyhow::Result<()> { + fn generate_package( + &self, + pkg: &ProcessedPackage, + feature_gate: bool, + ) -> anyhow::Result { let pkg_name = canonicalize_name(&pkg.name); + log::info!( + "generating package \"{pkg_name}\" with {} types..", + pkg.types.len() + ); + + let mut pkg_tokens = TokenStream::new(); for (_id, ty) in &pkg.types { let tokens = match ty { @@ -857,18 +868,35 @@ pub mod rust { UnrealType::Enum(enum0) => self.generate_enum(enum0)?, }; - println!("{tokens}"); + pkg_tokens.extend(tokens); } - quote! { - #[cfg(feature = "#pkg_name")] - pub mod #pkg_name { - #![allow(dead_code, unused_imports, non_snake_case, non_camel_case_types)] + let deps = pkg + .dependencies + .iter() + .filter_map(|id| self.sdk.packages.get(id)) + .map(|package| format!("`{}`", package.name)) + .join(","); - } + let doc_msg = format!("Package `{pkg_name}` depends on the features {deps}."); + + let feature_gate = if feature_gate { + Some(quote! { + #![doc = #doc_msg] + #![cfg(feature = "#pkg_name")] + }) + } else { + None }; - todo!() + Ok(quote! { + pub mod #pkg_name { + #feature_gate + #![allow(dead_code, unused_imports, non_snake_case, non_camel_case_types)] + + #pkg_tokens + } + }) } } }