diff --git a/src/sdk/output/rust.rs b/src/sdk/output/rust.rs index cb2ff5c..40fc105 100644 --- a/src/sdk/output/rust.rs +++ b/src/sdk/output/rust.rs @@ -228,7 +228,7 @@ pub fn generate_class_impl(class: &Class, sdk: &Sdk, w: &mut W) -> any for field in fields { write!(w, "fn get_{}(&self) -> &", field.name)?; field.ty.rust_type(sdk, w)?; - write!( + writeln!( w, " {{unsafe {{ &*self.as_ptr().offset({}) }} }}", field.offset @@ -236,11 +236,20 @@ pub fn generate_class_impl(class: &Class, sdk: &Sdk, w: &mut W) -> any write!(w, "fn get_{}_mut(&mut self) -> &mut ", field.name)?; field.ty.rust_type(sdk, w)?; - write!( + writeln!( w, " {{unsafe {{ &mut *self.as_mut_ptr().offset({}) }} }}", field.offset )?; + + write!(w, "fn set_{0}(&mut self, {0}: ", field.name)?; + field.ty.rust_type(sdk, w)?; + write!(w, ") -> ()")?; + writeln!( + w, + " {{*unsafe {{ &mut *self.as_mut_ptr().offset({}) }} = {}; }}", + field.offset, field.name + )?; } writeln!(w, "}}")?; writeln!(w, "impl {name}_Fields for {name} {{}}")?; @@ -419,6 +428,7 @@ pub fn generate_sdk_to_tmp(sdk: &Sdk) -> anyhow::Result<()> { writeln!(writer, "use core::cell::UnsafeCell;")?; writeln!(writer, "use core::ptr::NonNull;")?; writeln!(writer, "use super::AsPtr;")?; + writeln!(writer, "use super::process_event;")?; writeln!(writer, "use super::StaticClass;")?; for (_, pkg) in &sdk.packages { @@ -444,17 +454,7 @@ pub fn generate_package_rust_module( sdk: &Sdk, w: &mut W, ) -> anyhow::Result<()> { - writeln!( - w, - "pub mod {} {{", - canonicalize_name( - &pkg.package - .get_full_name() - .context("could not get package name")? - ) - )?; - - writeln!(w, "use super::*")?; + writeln!(w, "use super::*;")?; for (pkg, _) in &pkg.package_dependencies { writeln!( w, @@ -474,8 +474,6 @@ pub fn generate_package_rust_module( } } } - - writeln!(w, "}}")?; Ok(()) }