Skip to content

Commit bdf7caa

Browse files
committed
improve interface.extends
now accepts an Interface, like ClassEntry.implements() does
1 parent 85ace38 commit bdf7caa

File tree

3 files changed

+13
-11
lines changed

3 files changed

+13
-11
lines changed

phper-doc/doc/_06_module/_07_register_interface/index.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@ interface Foo {}
4141
If you want the interface `Foo` extends `ArrayAccess` and `Iterator` interfaces.
4242

4343
```rust,no_run
44-
use phper::classes::{InterfaceEntity, ClassEntry};
44+
use phper::classes::{Interface, InterfaceEntity, ClassEntry};
4545
use phper::classes::{array_access_class, iterator_class};
4646
4747
let mut foo = InterfaceEntity::new("Foo");
48-
foo.extends(|| array_access_class());
49-
foo.extends(|| iterator_class());
48+
foo.extends(Interface::from_name("ArrayAccess"));
49+
foo.extends(Interface::from_name("Iterator"));
5050
```
5151

5252
Same as:

phper/src/classes.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -807,13 +807,16 @@ impl InterfaceEntity {
807807
/// # Examples
808808
///
809809
/// ```no_run
810-
/// use phper::classes::{ClassEntry, InterfaceEntity};
810+
/// use phper::classes::{Interface, InterfaceEntity};
811811
///
812812
/// let mut interface = InterfaceEntity::new("MyInterface");
813-
/// interface.extends(|| ClassEntry::from_globals("Stringable").unwrap());
813+
/// interface.extends(Interface::from_name("Stringable"));
814814
/// ```
815-
pub fn extends(&mut self, interface: impl Fn() -> &'static ClassEntry + 'static) {
816-
self.extends.push(Box::new(interface));
815+
pub fn extends(&mut self, interface: Interface) {
816+
self.extends.push(Box::new(move || {
817+
let entry: &'static ClassEntry = unsafe { std::mem::transmute(interface.as_class_entry()) };
818+
entry
819+
}));
817820
}
818821

819822
#[allow(clippy::useless_conversion)]

tests/integration/src/classes.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@
1111
use phper::{
1212
alloc::RefClone,
1313
classes::{
14-
ClassEntity, ClassEntry, Interface, InterfaceEntity, Visibility, array_access_class,
15-
iterator_class,
14+
ClassEntity, ClassEntry, Interface, InterfaceEntity, Visibility,
1615
},
1716
functions::{Argument, ReturnType},
1817
modules::Module,
@@ -175,8 +174,8 @@ fn integrate_foo(module: &mut Module) {
175174
fn integrate_i_bar(module: &mut Module) {
176175
let mut interface = InterfaceEntity::new(r"IntegrationTest\IBar");
177176

178-
interface.extends(|| array_access_class());
179-
interface.extends(|| iterator_class());
177+
interface.extends(Interface::from_name("ArrayAccess"));
178+
interface.extends(Interface::from_name("Iterator"));
180179

181180
interface
182181
.add_method("doSomethings")

0 commit comments

Comments
 (0)