use std::fmt::Display;
use crate::Partition;
pub trait IntoParams {
fn into_params(self) -> Vec<(String, String)>;
}
impl IntoParams for Vec<(String, String)> {
fn into_params(self) -> Vec<(String, String)> {
self
}
}
pub fn to_query<T>(name: &str, item: &Option<T>, params: &mut Vec<(String, String)>)
where
T: Display,
{
if let Some(it) = item {
params.push((name.to_string(), it.to_string()));
}
}
pub fn to_query_vec(name: &str, item: &Option<Vec<String>>, params: &mut Vec<(String, String)>) {
if let Some(it) = item {
params.push((
name.to_string(),
format!(
"[{}]",
it.iter()
.map(|val| { format!("\"{val}\"") })
.collect::<Vec<String>>()
.join(", ")
),
));
}
}
pub fn to_query_vec_i64(name: &str, item: &Option<Vec<i64>>, params: &mut Vec<(String, String)>) {
if let Some(it) = item {
params.push((
name.to_string(),
format!(
"[{}]",
it.iter()
.map(|val| { format!("{val}") })
.collect::<Vec<String>>()
.join(", ")
),
))
}
}
#[derive(Debug, Default, Clone)]
pub struct LimitCursorQuery {
pub limit: Option<i32>,
pub cursor: Option<String>,
}
impl IntoParams for LimitCursorQuery {
fn into_params(self) -> Vec<(String, String)> {
let mut params = Vec::<(String, String)>::new();
to_query("limit", &self.limit, &mut params);
to_query("cursor", &self.cursor, &mut params);
params
}
}
#[derive(Debug, Default, Clone)]
pub struct LimitCursorPartitionQuery {
pub limit: Option<i32>,
pub cursor: Option<String>,
pub partition: Option<Partition>,
}
impl IntoParams for LimitCursorPartitionQuery {
fn into_params(self) -> Vec<(String, String)> {
let mut params = Vec::<(String, String)>::new();
to_query("limit", &self.limit, &mut params);
to_query("cursor", &self.cursor, &mut params);
to_query("partition", &self.partition, &mut params);
params
}
}