Macro rquickjs_core::class_def[][src]

macro_rules! class_def {
    ($name : ident $($rest : tt) *) => { ... };
    (@ parse($proto : ident) { $($body : tt) * } $($rest : tt) *) => { ... };
    (@ parse($ctx : ident, $proto : ident) { $($body : tt) * } $($rest : tt) *) => { ... };
    (@ parse @ ($ctor : ident) { $($body : tt) * } $($rest : tt) *) => { ... };
    (@ parse @ ($ctx : ident, $ctor : ident) { $($body : tt) * } $($rest : tt) *) => { ... };
    (@ parse ~ ($self : ident, $marker : ident) { $($body : tt) * } $($rest : tt)
 *) => { ... };
    (@ parse ~ $($rest : tt) *) => { ... };
    (@ parse) => { ... };
    (@ proto $ctx : ident $proto : ident $($body : tt) *) => { ... };
    (@ ctor $ctx : ident $ctor : ident $($body : tt) *) => { ... };
    (@ mark $self : ident $marker : ident $($body : tt) *) => { ... };
    (@ decl $name : ident $($body : tt) *) => { ... };
}
This is supported on crate feature classes only.
Expand description

The macro to simplify class definition.

struct TestClass;

impl TestClass {
    fn method(&self) {}
    fn static_func() {}
}

class_def! {
    TestClass
    // optional prototype initializer
    (proto) {
        proto.set("method", Func::from(Method(TestClass::method)))?;
    }
    // optional static initializer
    @(ctor) {
        ctor.set("static_func", Func::from(TestClass::static_func))?;
    }
    // optional internal refs marker (for gc)
    ~(_self, _marker) {
        // mark internal refs if exists
    }
}