statsig-rust 0.19.1

Statsig Rust SDK for usage in multi-user server environments.
Documentation
mod utils;

use statsig_rust::networking::{NetworkClient, RequestArgs};
use std::{sync::Arc, time::Duration};
use utils::mock_scrapi::{Endpoint, EndpointStub, Method, MockScrapi};

async fn setup() -> MockScrapi {
    let mock_scrapi = MockScrapi::new().await;

    mock_scrapi
        .stub(EndpointStub {
            delay_ms: 10000,
            method: Method::POST,
            ..EndpointStub::with_endpoint(Endpoint::DownloadConfigSpecs)
        })
        .await;

    mock_scrapi
}

#[tokio::test]
async fn test_killing_inflight_requests() {
    let mock_scrapi = setup().await;
    let network_client = Arc::new(NetworkClient::new("inflight_key", None, None));
    let url = mock_scrapi.url_for_endpoint(Endpoint::DownloadConfigSpecs);

    let network_client_clone = network_client.clone();
    let spawned_task = tokio::task::spawn(async move {
        network_client_clone
            .post(
                RequestArgs {
                    url,
                    ..RequestArgs::new()
                },
                None,
            )
            .await
            .unwrap();
    });

    network_client.shutdown();

    let result = tokio::time::timeout(Duration::from_millis(100), spawned_task).await;
    assert!(result.is_ok());
}

#[tokio::test]
async fn test_per_request_timeout() {
    let mock_scrapi = setup().await;
    let network_client = Arc::new(NetworkClient::new("per_req_key", None, None));
    let url = mock_scrapi.url_for_endpoint(Endpoint::DownloadConfigSpecs);

    let network_client_clone = network_client.clone();
    let spawned_task = tokio::task::spawn(async move {
        network_client_clone
            .post(
                RequestArgs {
                    url,
                    timeout_ms: 10,
                    ..RequestArgs::new()
                },
                None,
            )
            .await
            .unwrap();
    });

    let result = tokio::time::timeout(Duration::from_millis(100), spawned_task).await;
    assert!(result.is_ok());
}