claude-code-api 0.1.3

OpenAI-compatible API gateway for Claude Code CLI
use axum::response::sse::{Event, KeepAlive, Sse};
use futures::stream::{Stream, StreamExt};
use std::convert::Infallible;
use std::time::Duration;
use serde::Serialize;

pub fn create_sse_stream<S, T>(stream: S) -> Sse<impl Stream<Item = Result<Event, Infallible>>>
where
    S: Stream<Item = T> + Send + 'static,
    T: Serialize,
{
    let event_stream = stream.map(|data| {
        Ok(Event::default()
            .data(serde_json::to_string(&data).unwrap_or_default()))
    });
    
    Sse::new(event_stream)
        .keep_alive(
            KeepAlive::new()
                .interval(Duration::from_secs(30))
                .text("keep-alive"),
        )
}

#[allow(dead_code)]
pub fn create_done_event() -> Event {
    Event::default().data("[DONE]")
}