@@ -381,6 +381,79 @@ impl ClassBuilder {
381
381
}
382
382
}
383
383
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
+
384
457
#[ cfg( test) ]
385
458
mod tests {
386
459
use crate :: test:: test_function;
0 commit comments