Skip to content

Commit b98feae

Browse files
committed
feat: Separate interfaces from classes in module
1 parent 4a4bebf commit b98feae

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>,
@@ -199,7 +200,7 @@ impl ModuleBuilder<'_> {
199200
///
200201
/// * Panics if a constant could not be registered.
201202
pub fn interface<T: RegisteredClass>(mut self) -> Self {
202-
self.classes.push(|| {
203+
self.interfaces.push(|| {
203204
let mut builder = InterfaceBuilder::new(T::CLASS_NAME);
204205
for (method, flags) in T::method_builders() {
205206
builder = builder.method(method, flags);
@@ -299,6 +300,7 @@ impl ModuleBuilder<'_> {
299300
pub struct ModuleStartup {
300301
constants: Vec<(String, Box<dyn IntoConst + Send>)>,
301302
classes: Vec<fn() -> ClassBuilder>,
303+
interfaces: Vec<fn() -> ClassBuilder>,
302304
#[cfg(feature = "enum")]
303305
enums: Vec<fn() -> EnumBuilder>,
304306
}
@@ -323,6 +325,10 @@ impl ModuleStartup {
323325
c.register().expect("Failed to build class");
324326
});
325327

328+
self.interfaces.into_iter().map(|c| c()).for_each(|c| {
329+
c.register().expect("Failed to build interface");
330+
});
331+
326332
#[cfg(feature = "enum")]
327333
self.enums
328334
.into_iter()
@@ -365,6 +371,7 @@ impl TryFrom<ModuleBuilder<'_>> for (ModuleEntry, ModuleStartup) {
365371
.map(|(n, v, _)| (n, v))
366372
.collect(),
367373
classes: builder.classes,
374+
interfaces: builder.interfaces,
368375
#[cfg(feature = "enum")]
369376
enums: builder.enums,
370377
};
@@ -420,6 +427,7 @@ mod tests {
420427
assert!(builder.functions.is_empty());
421428
assert!(builder.constants.is_empty());
422429
assert!(builder.classes.is_empty());
430+
assert!(builder.interfaces.is_empty());
423431
assert!(builder.startup_func.is_none());
424432
assert!(builder.shutdown_func.is_none());
425433
assert!(builder.request_startup_func.is_none());

0 commit comments

Comments
 (0)