#cat #ffi #client #nodejs #bindings

cat-rs

cat 客户端用 Rust 实现

14 个版本

0.1.0-alpha.02019 年 11 月 10 日
0.0.9 2019 年 10 月 11 日
0.0.8-alpha.22019 年 7 月 29 日
0.0.8-alpha.12019 年 4 月 26 日
0.0.2 2019 年 3 月 11 日

#29 in #cat

每月下载量 45

MIT 许可证

355KB
8K SLoC

C 7.5K SLoC // 0.1% comments Rust 285 SLoC // 0.0% comments

cat Build Status

Rust cat 绑定。

注意:此 crate 主要为 Nodejs 的 Native Addons(使用 neon)创建。

示例

创建一个新的 cat 客户端

extern crate cat_rs as cat;
use cat::logEvent;
use cat::CatClient;
use cat::CatTransaction;

let mut cat = CatClient::new("test");
cat.init()?
let mut tr = CatTransaction::new("foo", "bar")

tr.log("test", "it", "0", "");
tr.complete();

Ok(())

使用 neon

  1. 将 cat 事务导出到 nodejs。

cat.rs

use cat_rs::{self, CatTransaction};
use neon::prelude::*;

declare_types! {
    pub class JsCatTransaction for CatTransaction {
        init(mut ctx) {
            let _type = ctx.argument::<JsString>(0)?.value();
            let _name = ctx.argument::<JsString>(1)?.value();
            let trans = CatTransaction::new(_type, _name);
            Ok(trans)
        }

        method complete(mut ctx) {
            let mut this = ctx.this();
            let guard = ctx.lock();
            {
                let mut trans  = this.borrow_mut(&guard);
                trans.complete();
            }
            Ok(ctx.undefined().upcast())
        }

        method log(mut ctx) {
            let _type = ctx.argument::<JsString>(0)?.value();
            let _name = ctx.argument::<JsString>(0)?.value();
            let _stat = ctx.argument::<JsString>(0)?.value();
            let _data = ctx.argument::<JsString>(0)?.value();

            {
                let mut this = ctx.this();
                let guard = ctx.lock();
                let mut trans = this.borrow_mut(&guard);

                trans.log(_type, _name, _stat, _data);
            }

            Ok(ctx.undefined().upcast())
        }
    }
}
  1. 注册此类

lib.rs

use cat::JsCatTransaction;

register_module!(mut ctx, {
    ctx.export_class::<JsCatTransaction>("NodeCatTransaction")?;
})

依赖

~0.8–3.5MB
~73K SLoC