1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
//! A Rust client to Segment's tracking API. //! //! For more on what Segment is, refer to [Segment's //! documentation](https://segment.com/docs/). //! //! ## Examples //! //! ### Simple //! ```rust //! use analytics::http::HttpClient; //! use analytics::client::Client; //! use analytics::message::{Track, Message, User}; //! use serde_json::json; //! //! fn main() { //! let write_key = "YOUR_WRITE_KEY"; //! //! let client = HttpClient::default(); //! client.send(write_key, &Message::Track(Track { //! user: User::UserId { user_id: "some_user_id".to_owned() }, //! event: "Example Event".to_owned(), //! properties: json!({ //! "some property": "some value", //! "some other property": "some other value", //! }), //! ..Default::default() //! })).expect("could not send to Segment"); //! } //! ``` //! //! ### ETL-Like //! ```rust //! use analytics::http::HttpClient; //! use analytics::client::Client; //! use analytics::message::{BatchMessage, Track, User}; //! use analytics::batcher::Batcher; //! use serde_json::json; //! //! fn main() { //! let write_key = "YOUR_WRITE_KEY"; //! //! let client = HttpClient::default(); //! let mut batcher = Batcher::new(None); //! //! // Pretend this is reading off of a queue, a file, or some other data //! // source. //! for i in 0..100 { //! let msg = BatchMessage::Track(Track { //! user: User::UserId { user_id: format!("user-{}", i) }, //! event: "Example Event".to_owned(), //! properties: json!({ //! "foo": format!("bar-{}", i), //! }), //! ..Default::default() //! }); //! //! // An error here indicates a message is too large. In real life, you //! // would probably want to put this message in a deadletter queue or some //! // equivalent. //! if let Some(msg) = batcher.push(msg).unwrap() { //! client.send(write_key, &batcher.into_message()).unwrap(); //! //! batcher = Batcher::new(None); //! batcher.push(msg).unwrap(); // Same error condition as above. //! } //! } //! } //! ``` pub mod batcher; pub mod client; pub mod errors; pub mod http; pub mod message;