Skip to content

uuhan/cat-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cat Build Status crates.io

Rust cat binding.

NB: This crate is mostly created for Nodejs's Native Addons(using neon) currently.

Examples

create a new cat client

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(())

work with neon

  1. cat transaction exported to 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. register this class

lib.rs

use cat::JsCatTransaction;

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