bayard 0.9.0

A distributed search server.
use axum::{response::IntoResponse, Extension, Json};
use http::StatusCode;
use tonic::{transport::Channel, Request};
use tracing::error;

use crate::proto::cluster::{cluster_service_client::ClusterServiceClient, GetNodesRequest};

pub async fn nodes(
    Extension(channel): Extension<Channel>,
) -> Result<impl IntoResponse, StatusCode> {
    let mut client = ClusterServiceClient::new(channel);

    let req = GetNodesRequest {};
    let resp = match client.get_nodes(Request::new(req)).await {
        Ok(resp) => resp.into_inner(),
        Err(error) => {
            error!("{}", error);
            return Err(StatusCode::INTERNAL_SERVER_ERROR);
        }
    };

    let json = match serde_json::to_value(resp) {
        Ok(json) => json,
        Err(error) => {
            error!("{}", error);
            return Err(StatusCode::INTERNAL_SERVER_ERROR);
        }
    };

    Ok((StatusCode::OK, Json(json)))
}