#segment #analytics #client #com #thread

segment_analytics

Segment Analytics (segment.com) client for rust ;)

3 releases

Uses old Rust 2015

0.1.3 Oct 15, 2017
0.1.2 Jun 29, 2016
0.1.1 Jun 28, 2016

#46 in #segment

MIT/Apache

15KB
297 lines

Rust Segment Analytics Client

Build Status Crates.io Coverage Status

Segment Analytics Client now available for rust ;)

Usage

Add this to your Cargo.toml:

[dependencies]
segment_analytics = "0.1.3"

and this to your crate root:

extern crate segment_analytics;

Examples

Usage with shared instance across thread.

extern crate segment_analytics;
use segment_analytics::Segment;

let segment = Arc::new(Segment::new(Some(SEGMENT_WRITE_KEY.to_string())));

let segment1 = segment.clone();
thread::spawn(move || {

  let mut properties = HashMap::new();
  properties.insert("firstname", "Jimmy");
  properties.insert("lastname", "Page");

  let mut context = HashMap::new();
  context.insert("ip", "134.157.15.3");

  segment1.track(Some("anonymous_id"),
                 None,
                 "EventName",
                 Some(properties),
                 Some(context))

  segment1.alias("anonymous_id", "user_id");

  let mut traits = HashMap::new();
  traits.insert("email", "bill@gates.com");
  let mut context = HashMap::new();
  context.insert("ip", "134.157.15.3");
  segment1.identify(None,Some("user_id"), None, Some(traits), Some(context));
});

Under the hood, one thread worker is in charge of sending the messages to segment endpoint. If the thread drops, a new one is created.

Traits, Properties and Context must implement ToJsonString (I'm not a fan of current json solutions in rust).

pub trait ToJsonString {
    fn to_json_string(&self) -> String;
}

For convenience ToJsonString is (basically) implemented for HashMap.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~8–17MB
~200K SLoC