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