@@ -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<'_> {
299300pub 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