use rama::{Context, Service};
use tansu_sans_io::{
ApiKey, ErrorCode, GetTelemetrySubscriptionsRequest, GetTelemetrySubscriptionsResponse,
};
use tracing::instrument;
use uuid::Uuid;
use crate::{Error, Result, Storage};
#[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct GetTelemetrySubscriptionsService;
impl ApiKey for GetTelemetrySubscriptionsService {
const KEY: i16 = GetTelemetrySubscriptionsRequest::KEY;
}
impl<G> Service<G, GetTelemetrySubscriptionsRequest> for GetTelemetrySubscriptionsService
where
G: Storage,
{
type Response = GetTelemetrySubscriptionsResponse;
type Error = Error;
#[instrument(skip(ctx, req))]
async fn serve(
&self,
ctx: Context<G>,
req: GetTelemetrySubscriptionsRequest,
) -> Result<Self::Response, Self::Error> {
let _ = (ctx, req);
let client_instance_id = *Uuid::new_v4().as_bytes();
Ok(GetTelemetrySubscriptionsResponse::default()
.throttle_time_ms(0)
.error_code(ErrorCode::None.into())
.client_instance_id(client_instance_id)
.subscription_id(0)
.accepted_compression_types(Some([0].into()))
.push_interval_ms(5_000)
.telemetry_max_bytes(1_024)
.delta_temporality(false)
.requested_metrics(Some([].into())))
}
}