Skip to content

Instantly share code, notes, and snippets.

@dherman
Last active September 7, 2016 17:56
Show Gist options
  • Save dherman/f4131507f070ad049bf557dc0c75de0a to your computer and use it in GitHub Desktop.
Save dherman/f4131507f070ad049bf557dc0c75de0a to your computer and use it in GitHub Desktop.
#[macro_use]
extern crate neon;
extern crate neon_sys;
use std::ops::Drop;
use neon::*;
pub struct Greeter {
greeting: String
}
impl Drop for Greeter {
fn drop(&mut self) {
println!("dropping greeter: {}", self.greeting);
}
}
module! {
export pub class JsDontCallMe as DontCallMe for () {
init() {
Ok(())
}
method snarf() : i32 {
println!("snarf!");
Ok(42)
}
}
/// A simple native class for creating greeting strings.
export pub class JsGreeter for Greeter {
init(greeting: String) {
Ok(Greeter {
greeting: greeting
})
}
call() : i32 {
println!("in construct.[[Call]]");
Ok(3)
}
constructor() {
let kind = self.kind();
let scope = self.scope;
let greeting = self.arguments.this(scope).grab(|greeter| {
greeter.greeting.clone()
});
println!("in constructor.[[Construct]], call kind is {:?}, greeting is {}", kind, greeting);
Ok(())
}
method hello(name: String) : String {
let scope = self.scope;
Ok(call.arguments.this(scope).grab(|greeter| {
format!("{}, {}!", greeter.greeting, name)
}))
}
method ƒoo() : String {
Ok(String::from("scooby dooby doo"))
}
}
export function returnThis() : JsObject {
Ok(self.arguments.this(self.scope))
}
export function isGreeter(x: JsValue) : bool {
Ok(x.is_a::<JsGreeter>())
}
export function printInteger(i: JsInteger) {
println!("integer: {}", i.value());
Ok(())
}
export function noop() { Ok(()) }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment