cloudflare/endpoints/workerskv/
write_bulk.rs1use crate::framework::endpoint::{EndpointSpec, Method, RequestBody};
2
3use crate::endpoints::workerskv::WorkersKvBulkResult;
4use crate::framework::response::ApiSuccess;
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug)]
21pub struct WriteBulk<'a> {
22 pub account_identifier: &'a str,
23 pub namespace_identifier: &'a str,
24 pub bulk_key_value_pairs: Vec<KeyValuePair>,
25}
26
27impl EndpointSpec for WriteBulk<'_> {
28 type JsonResponse = WorkersKvBulkResult;
29 type ResponseType = ApiSuccess<Self::JsonResponse>;
30
31 fn method(&self) -> Method {
32 Method::PUT
33 }
34 fn path(&self) -> String {
35 format!(
36 "accounts/{}/storage/kv/namespaces/{}/bulk",
37 self.account_identifier, self.namespace_identifier
38 )
39 }
40 #[inline]
41 fn body(&self) -> Option<RequestBody> {
42 if self.bulk_key_value_pairs.len() > 10_000 {
43 panic!("Bulk write request must have 10,000 key-value pairs or less.");
44 }
45 let body = serde_json::to_string(&self.bulk_key_value_pairs).unwrap();
47 Some(RequestBody::Json(body))
48 }
49 }
51
52#[serde_with::skip_serializing_none]
54#[derive(Serialize, Deserialize, Clone, Debug)]
55pub struct KeyValuePair {
56 pub key: String,
57 pub value: String,
58 pub expiration: Option<i64>,
59 pub expiration_ttl: Option<i64>,
60 pub base64: Option<bool>,
61}