use crate::framework::response::ApiResult;
use chrono::DateTime;
use chrono::{TimeZone, Utc};
use serde::{Deserialize, Deserializer, Serialize};
pub mod create_namespace;
pub mod delete_bulk;
pub mod delete_key;
pub mod get_namespace;
pub mod list_namespace_keys;
pub mod list_namespaces;
pub mod read_key;
pub mod read_key_metadata;
pub mod remove_namespace;
pub mod rename_namespace;
pub mod write_bulk;
pub mod write_key;
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
pub struct WorkersKvNamespace {
pub id: String,
pub title: String,
pub supports_url_encoding: Option<bool>,
}
impl ApiResult for WorkersKvNamespace {}
impl ApiResult for Vec<WorkersKvNamespace> {}
#[serde_with::skip_serializing_none]
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
pub struct Key {
pub name: String,
#[serde(default)]
#[serde(deserialize_with = "deserialize_option_timestamp")]
pub expiration: Option<DateTime<Utc>>,
#[serde(default)]
pub metadata: Option<serde_json::Value>,
}
pub fn deserialize_option_timestamp<'de, D>(
deserializer: D,
) -> Result<Option<DateTime<Utc>>, D::Error>
where
D: Deserializer<'de>,
{
let s: Option<i64> = Option::deserialize(deserializer)?;
if let Some(s) = s {
return Ok(Utc.timestamp_opt(s, 0).single());
}
Ok(None)
}
impl ApiResult for Key {}
impl ApiResult for Vec<Key> {}
fn url_encode_key(key: &str) -> String {
urlencoding::encode(key).to_string()
}
#[serde_with::skip_serializing_none]
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
pub struct WorkersKvBulkResult {
pub successful_key_count: Option<i8>,
pub unsuccessful_keys: Option<Vec<String>>,
}
impl ApiResult for WorkersKvBulkResult {}