@@ -381,6 +381,79 @@ impl ClassBuilder {
381381 }
382382}
383383
384+ pub struct InterfaceBuilder {
385+ class_builder : ClassBuilder ,
386+ }
387+
388+ impl InterfaceBuilder {
389+ pub fn new < T : Into < String > > ( name : T ) -> Self {
390+ Self {
391+ class_builder : ClassBuilder :: new ( name) ,
392+ }
393+ }
394+
395+ pub fn implements ( mut self , interface : ClassEntryInfo ) -> Self {
396+ self . class_builder = self . class_builder . implements ( interface) ;
397+
398+ self
399+ }
400+
401+ pub fn method ( mut self , func : FunctionBuilder < ' static > , flags : MethodFlags ) -> Self {
402+ self . class_builder = self . class_builder . method ( func, flags) ;
403+
404+ self
405+ }
406+
407+ pub fn constant < T : Into < String > > (
408+ mut self ,
409+ name : T ,
410+ value : impl IntoZval + ' static ,
411+ docs : DocComments ,
412+ ) -> Result < Self > {
413+ self . class_builder = self . class_builder . constant ( name, value, docs) ?;
414+
415+ Ok ( self )
416+ }
417+
418+ pub fn dyn_constant < T : Into < String > > (
419+ mut self ,
420+ name : T ,
421+ value : & ' static dyn IntoZvalDyn ,
422+ docs : DocComments ,
423+ ) -> Result < Self > {
424+ self . class_builder = self . class_builder . dyn_constant ( name, value, docs) ?;
425+
426+ Ok ( self )
427+ }
428+
429+ pub fn flags ( mut self , flags : ClassFlags ) -> Self {
430+ self . class_builder = self . class_builder . flags ( flags) ;
431+ self
432+ }
433+
434+ pub fn object_override < T : RegisteredClass > ( mut self ) -> Self {
435+ self . class_builder = self . class_builder . object_override :: < T > ( ) ;
436+
437+ self
438+ }
439+
440+ pub fn registration ( mut self , register : fn ( & ' static mut ClassEntry ) ) -> Self {
441+ self . class_builder = self . class_builder . registration ( register) ;
442+
443+ self
444+ }
445+
446+ pub fn docs ( mut self , docs : DocComments ) -> Self {
447+ self . class_builder = self . class_builder . docs ( docs) ;
448+ self
449+ }
450+
451+ pub fn builder ( mut self ) -> ClassBuilder {
452+ self . class_builder = self . class_builder . flags ( ClassFlags :: Interface ) ;
453+ self . class_builder
454+ }
455+ }
456+
384457#[ cfg( test) ]
385458mod tests {
386459 use crate :: test:: test_function;
0 commit comments