fluvio_sc_schema/mirroring/
mod.rs

1use std::fmt::Debug;
2
3use anyhow::Result;
4
5use fluvio_controlplane_metadata::mirroring::{
6    MirroringRemoteClusterRequest, MirroringRemoteClusterSpec, MirroringStatusResponse,
7};
8use fluvio_protocol::{Decoder, Encoder, Version};
9use fluvio_protocol::api::Request;
10
11use crate::{AdminPublicApiKey, TryEncodableFrom};
12use crate::objects::{COMMON_VERSION, TypeBuffer};
13
14#[derive(Encoder, Decoder, Default, Debug)]
15pub struct ObjectMirroringRequest(TypeBuffer);
16
17impl Request for ObjectMirroringRequest {
18    const API_KEY: u16 = AdminPublicApiKey::Mirroring as u16;
19    const MIN_API_VERSION: i16 = 14;
20    const DEFAULT_API_VERSION: i16 = COMMON_VERSION;
21    type Response = MirroringStatusResponse;
22}
23
24impl<S> TryEncodableFrom<MirroringRemoteClusterRequest<S>> for ObjectMirroringRequest
25where
26    MirroringRemoteClusterRequest<S>: Encoder + Decoder + Debug,
27    S: MirroringRemoteClusterSpec + fluvio_controlplane_metadata::core::Spec,
28{
29    fn try_encode_from(input: MirroringRemoteClusterRequest<S>, version: Version) -> Result<Self> {
30        Ok(Self(TypeBuffer::encode::<S, _>(input, version)?))
31    }
32
33    fn downcast(&self) -> Result<Option<MirroringRemoteClusterRequest<S>>> {
34        self.0.downcast::<S, _>()
35    }
36}