-
-
Save vietlq/6c26384112e44145ef0a42222e36016a to your computer and use it in GitHub Desktop.
Example of using neon after `neon new ... ` step
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// JS calling Rust | |
var addon = require('../native'); | |
console.log(addon.hello()); | |
// -> "hello node" | |
console.log(addon.adder(1,2)); | |
// -> 3 | |
console.log(addon.objAdder({a: 2, b: 5})); | |
// -> {result: 7} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#[macro_use] | |
extern crate neon; | |
use neon::vm::{Call, JsResult}; | |
use neon::js::{JsNumber, JsObject, JsString}; | |
fn hello(call: Call) -> JsResult<JsString> { | |
let scope = call.scope; | |
Ok(JsString::new(scope, "hello node").unwrap()) | |
} | |
fn adder(call: Call) -> JsResult<JsNumber> { | |
let scope = call.scope; | |
let a = call.arguments | |
.require(scope, 0)? | |
.check::<JsNumber>()? | |
.value(); | |
let b = call.arguments | |
.require(scope, 1)? | |
.check::<JsNumber>()? | |
.value(); | |
Ok(JsNumber::new(scope, a + b)) | |
} | |
/// Takes in an object, returning a new object. | |
fn obj_adder(call: Call) -> JsResult<JsObject> { | |
use neon::js::Object; | |
let scope = call.scope; | |
let obj = &call.arguments.require(scope, 0)?.check::<JsObject>()?; | |
let a: f64 = obj.get(scope, "a")?.check::<JsNumber>()?.value(); | |
let b: f64 = obj.get(scope, "b")?.check::<JsNumber>()?.value(); | |
let result = JsObject::new(scope); | |
result.set("result", JsNumber::new(scope, a + b))?; | |
Ok(result) | |
} | |
register_module!(m, { | |
m.export("hello", hello)?; | |
m.export("adder", adder)?; | |
m.export("objAdder", obj_adder)?; | |
Ok(()) | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment