Crates.io | segment_analytics |
lib.rs | segment_analytics |
version | 0.1.3 |
source | src |
created_at | 2016-06-28 18:46:12.819628 |
updated_at | 2017-10-15 14:08:53.324083 |
description | Segment Analytics (segment.com) client for rust ;) |
homepage | https://github.com/aagahi/rust-segment-analytics |
repository | https://github.com/aagahi/rust-segment-analytics |
max_upload_size | |
id | 5521 |
size | 15,618 |
Segment Analytics Client now available for rust ;)
Add this to your Cargo.toml
:
[dependencies]
segment_analytics = "0.1.3"
and this to your crate root:
extern crate segment_analytics;
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
.
Licensed under either of
at your option.
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.