unleash-edge-client-api 20.1.0

Unleash edge is a proxy for Unleash. It can return both evaluated feature toggles as well as the raw data from Unleash's client API
Documentation
use axum::{
    Router,
    extract::{Query, State},
    response::{Sse, sse::Event},
    routing::get,
};
use futures_util::Stream;

use unleash_edge_appstate::AppState;
use unleash_edge_streaming::stream_broadcast::stream_deltas;
use unleash_edge_types::{EdgeResult, FeatureFilters, errors::EdgeError, tokens::EdgeToken};

pub fn router() -> Router<AppState> {
    Router::new().route("/streaming", get(setup_streaming))
}

async fn setup_streaming(
    State(app_state): State<AppState>,
    edge_token: EdgeToken,
    Query(filter_query): Query<FeatureFilters>,
) -> EdgeResult<Sse<impl Stream<Item = Result<Event, axum::Error>>>> {
    let Some(delta_cache_manager) = app_state.delta_cache_manager.as_ref() else {
        return Err(EdgeError::SseError(
            "No delta cache manager found, streaming will not work. This is likely because Edge was not started in streaming mode.".into(),
        ));
    };

    stream_deltas(
        delta_cache_manager.clone(),
        app_state.token_cache.clone(),
        edge_token,
        filter_query,
    )
    .await
}