Skip to content

Commit a1a49ca

Browse files
committed
feat: Separate interfaces from classes in module
1 parent 5d9e017 commit a1a49ca

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

src/builders/module.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ pub struct ModuleBuilder<'a> {
4949
pub(crate) functions: Vec<FunctionBuilder<'a>>,
5050
pub(crate) constants: Vec<(String, Box<dyn IntoConst + Send>, DocComments)>,
5151
pub(crate) classes: Vec<fn() -> ClassBuilder>,
52+
pub(crate) interfaces: Vec<fn() -> ClassBuilder>,
5253
#[cfg(feature = "enum")]
5354
pub(crate) enums: Vec<fn() -> EnumBuilder>,
5455
startup_func: Option<StartupShutdownFunc>,
@@ -179,7 +180,7 @@ impl ModuleBuilder<'_> {
179180
///
180181
/// * Panics if a constant could not be registered.
181182
pub fn interface<T: RegisteredClass>(mut self) -> Self {
182-
self.classes.push(|| {
183+
self.interfaces.push(|| {
183184
let mut builder = InterfaceBuilder::new(T::CLASS_NAME);
184185
for (method, flags) in T::method_builders() {
185186
builder = builder.method(method, flags);
@@ -279,6 +280,7 @@ impl ModuleBuilder<'_> {
279280
pub struct ModuleStartup {
280281
constants: Vec<(String, Box<dyn IntoConst + Send>)>,
281282
classes: Vec<fn() -> ClassBuilder>,
283+
interfaces: Vec<fn() -> ClassBuilder>,
282284
#[cfg(feature = "enum")]
283285
enums: Vec<fn() -> EnumBuilder>,
284286
}
@@ -303,6 +305,10 @@ impl ModuleStartup {
303305
c.register().expect("Failed to build class");
304306
});
305307

308+
self.interfaces.into_iter().map(|c| c()).for_each(|c| {
309+
c.register().expect("Failed to build interface");
310+
});
311+
306312
#[cfg(feature = "enum")]
307313
self.enums
308314
.into_iter()
@@ -345,6 +351,7 @@ impl TryFrom<ModuleBuilder<'_>> for (ModuleEntry, ModuleStartup) {
345351
.map(|(n, v, _)| (n, v))
346352
.collect(),
347353
classes: builder.classes,
354+
interfaces: builder.interfaces,
348355
#[cfg(feature = "enum")]
349356
enums: builder.enums,
350357
};
@@ -400,6 +407,7 @@ mod tests {
400407
assert!(builder.functions.is_empty());
401408
assert!(builder.constants.is_empty());
402409
assert!(builder.classes.is_empty());
410+
assert!(builder.interfaces.is_empty());
403411
assert!(builder.startup_func.is_none());
404412
assert!(builder.shutdown_func.is_none());
405413
assert!(builder.request_startup_func.is_none());

0 commit comments

Comments
 (0)