fluvio_spu_schema/fetch/
request.rs1use std::fmt::Debug;
2use std::marker::PhantomData;
3
4use fluvio_protocol::api::Request;
5use fluvio_protocol::{Decoder, Encoder};
6use fluvio_protocol::derive::FluvioDefault;
7use fluvio_protocol::record::RecordSet;
8use fluvio_types::PartitionId;
9
10use crate::COMMON_VERSION;
11use crate::isolation::Isolation;
12
13use super::FetchResponse;
14
15pub type DefaultFetchRequest = FetchRequest<RecordSet>;
16
17#[derive(Encoder, Decoder, FluvioDefault, Debug)]
18pub struct FetchRequest<R> {
19 pub max_wait: i32,
21
22 pub min_bytes: i32,
24
25 #[fluvio(min_version = 3, ignorable)]
27 pub max_bytes: i32,
28
29 #[fluvio(min_version = 4)]
36 pub isolation_level: Isolation,
37
38 pub topics: Vec<FetchableTopic>,
40
41 #[fluvio(min_version = 7)]
43 pub forgotten: Vec<ForgottenTopic>,
44
45 pub data: PhantomData<R>,
46}
47
48impl<R> Request for FetchRequest<R>
49where
50 R: Debug + Decoder + Encoder,
51{
52 const API_KEY: u16 = 1;
53
54 const MIN_API_VERSION: i16 = 0;
55 const DEFAULT_API_VERSION: i16 = COMMON_VERSION;
56
57 type Response = FetchResponse<R>;
58}
59
60#[derive(Encoder, Decoder, FluvioDefault, Debug)]
61pub struct FetchableTopic {
62 pub name: String,
64
65 pub fetch_partitions: Vec<FetchPartition>,
67}
68
69#[derive(Encoder, Decoder, FluvioDefault, Debug)]
70pub struct ForgottenTopic {
71 #[fluvio(min_version = 7)]
73 pub name: String,
74
75 #[fluvio(min_version = 7)]
77 pub forgotten_partition_indexes: Vec<i32>,
78}
79
80#[derive(Encoder, Decoder, FluvioDefault, Debug)]
81pub struct FetchPartition {
82 pub partition_index: PartitionId,
84
85 #[fluvio(min_version = 9, ignorable)]
87 pub current_leader_epoch: i32,
88
89 pub fetch_offset: i64,
91
92 #[fluvio(min_version = 5)]
95 pub log_start_offset: i64,
96
97 pub max_bytes: i32,
100}
101
102#[cfg(feature = "file")]
103pub use file::*;
104#[cfg(feature = "file")]
105mod file {
106 use super::*;
107 use crate::file::FileRecordSet;
108 pub type FileFetchRequest = FetchRequest<FileRecordSet>;
109}