use crate::client::ReadyWriteBatch;
use crate::proto::{PbPutKvReqForBucket, PutKvResponse};
use crate::rpc::api_key::ApiKey;
use crate::rpc::api_version::ApiVersion;
use crate::rpc::frame::ReadError;
use crate::rpc::frame::WriteError;
use crate::rpc::message::{ReadVersionedType, RequestBody, WriteVersionedType};
use crate::{impl_read_version_type, impl_write_version_type, proto};
use bytes::{Buf, BufMut};
use prost::Message;
#[allow(dead_code)]
pub struct PutKvRequest {
pub inner_request: proto::PutKvRequest,
}
#[allow(dead_code)]
impl PutKvRequest {
pub fn new(
table_id: i64,
ack: i16,
max_request_timeout_ms: i32,
target_columns: Vec<i32>,
ready_batches: &mut [ReadyWriteBatch],
) -> crate::error::Result<Self> {
let mut request = proto::PutKvRequest {
table_id,
acks: ack as i32,
timeout_ms: max_request_timeout_ms,
target_columns,
..Default::default()
};
for ready_batch in ready_batches {
request.buckets_req.push(PbPutKvReqForBucket {
partition_id: ready_batch.table_bucket.partition_id(),
bucket_id: ready_batch.table_bucket.bucket_id(),
records: ready_batch.write_batch.build()?,
})
}
Ok(PutKvRequest {
inner_request: request,
})
}
}
impl RequestBody for PutKvRequest {
type ResponseBody = PutKvResponse;
const API_KEY: ApiKey = ApiKey::PutKv;
const REQUEST_VERSION: ApiVersion = ApiVersion(0);
}
impl_write_version_type!(PutKvRequest);
impl_read_version_type!(PutKvResponse);