#analytics #meilisearch #client #user #http-client #message #github

segment

Segment analytics client for Rust. Forked for Meilisearch: https://github.com/meilisearch

9 releases

new 0.2.5 Jan 8, 2025
0.2.4 May 7, 2024
0.2.3 Oct 25, 2023
0.2.2 Jan 9, 2023
0.1.1 Sep 30, 2021

#285 in Web programming

Download history 7571/week @ 2024-09-18 6378/week @ 2024-09-25 7461/week @ 2024-10-02 7612/week @ 2024-10-09 8127/week @ 2024-10-16 8571/week @ 2024-10-23 8207/week @ 2024-10-30 8120/week @ 2024-11-06 7492/week @ 2024-11-13 6841/week @ 2024-11-20 6569/week @ 2024-11-27 6715/week @ 2024-12-04 6461/week @ 2024-12-11 5172/week @ 2024-12-18 3083/week @ 2024-12-25 4711/week @ 2025-01-01

20,574 downloads per month

MIT license

38KB
602 lines

Segment

Test Status API

This crate is an unofficial segment analytics client for Rust used by Meilisearch

Example usage(s)

use segment::{HttpClient, Client, AutoBatcher, Batcher};
use segment::message::{Track, User};
use serde_json::json;

#[tokio::main(flavor = "current_thread")]
async fn main() {
    let write_key = "YOUR_WRITE_KEY";

    let client = HttpClient::default();
    let batcher = Batcher::new(None);
    let mut batcher = AutoBatcher::new(client, batcher, write_key.to_string());

    // Pretend this is reading off of a queue, a file, or some other data
    // source.
    for i in 0..100 {
        let msg = 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.
        batcher.push(msg).await.unwrap();
    }

    batcher.flush().await.unwrap();
}

or when you want to do struct to struct transformations

use segment::{HttpClient, Client};
use segment::message::{Track, Message, User};
use serde_json::json;

#[tokio::main(flavor = "current_thread")]
async fn main() {
    let write_key = "YOUR_WRITE_KEY";

    let client = HttpClient::default();
    client.send(write_key.to_string(), Message::from(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()
    })).await.expect("could not send to Segment");
}

License

Licensed under MIT license.

Dependencies

~5–19MB
~283K SLoC