Build Status Crates.io Coverage Status
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
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
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.