llmproxy 0.2.2

A simple HTTP proxy server for llm api requests
Documentation
use crate::models::{RegisterRequest, ResponseStatus, ServerResponse};
use crate::state::AppState;
use axum::{extract::State, http::StatusCode, response::IntoResponse, Json};
use tracing;

pub async fn unregister_server(
    State(state): State<AppState>,
    Json(payload): Json<RegisterRequest>,
) -> impl IntoResponse {
    let mut servers = state.servers.lock().await;

    if payload.addr.trim().is_empty() || !payload.addr.contains(':') {
        tracing::warn!(
            "Invalid address provided for unregistration: {}",
            payload.addr
        );
        return (
            StatusCode::BAD_REQUEST,
            Json(ServerResponse {
                status: ResponseStatus::Error,
                message: "Invalid address format. Expected host:port".to_string(),
            }),
        );
    }

    let server_addr = payload.addr.trim().to_string();

    if let Some(pos) = servers.iter().position(|s| s.addr == server_addr) {
        servers.remove(pos);
        tracing::info!("Unregistered server: addr={}", server_addr);
        (
            StatusCode::OK,
            Json(ServerResponse {
                status: ResponseStatus::Success,
                message: "Server unregistered successfully".to_string(),
            }),
        )
    } else {
        tracing::warn!("Server not found for unregistration: addr={}", server_addr);
        (
            StatusCode::NOT_FOUND,
            Json(ServerResponse {
                status: ResponseStatus::Error,
                message: "Server not found".to_string(),
            }),
        )
    }
}