fluvio_spu_schema/client/
api.rs

1// ApiRequest and Response that has all request and response
2// use for generic dump and client
3
4use tracing::trace;
5use std::convert::TryInto;
6use std::io::Error as IoError;
7
8use fluvio_protocol::bytes::Buf;
9use fluvio_protocol::Encoder;
10use fluvio_protocol::api::api_decode;
11use fluvio_protocol::api::RequestMessage;
12use fluvio_protocol::api::RequestHeader;
13use fluvio_protocol::api::ApiMessage;
14
15use super::SpuClientApiKey;
16use super::offset::ReplicaOffsetUpdateRequest;
17
18/// Request from Spu Server to Client
19#[derive(Debug, Encoder)]
20pub enum SpuClientRequest {
21    #[fluvio(tag = 0)]
22    ReplicaOffsetUpdateRequest(RequestMessage<ReplicaOffsetUpdateRequest>),
23}
24
25impl Default for SpuClientRequest {
26    fn default() -> Self {
27        Self::ReplicaOffsetUpdateRequest(RequestMessage::<ReplicaOffsetUpdateRequest>::default())
28    }
29}
30
31impl ApiMessage for SpuClientRequest {
32    type ApiKey = SpuClientApiKey;
33
34    fn decode_with_header<T>(src: &mut T, header: RequestHeader) -> Result<Self, IoError>
35    where
36        Self: Default + Sized,
37        Self::ApiKey: Sized,
38        T: Buf,
39    {
40        trace!("decoding with header: {:#?}", header);
41        match header.api_key().try_into()? {
42            SpuClientApiKey::ReplicaOffsetUpdate => {
43                api_decode!(Self, ReplicaOffsetUpdateRequest, src, header)
44            }
45        }
46    }
47}