pub(crate) mod aggregates;
use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use crate::{time_series::TimestampOrRelative, AdvancedFilter, PropertyIdentifier};
use super::{
common::{SortDirection, TaggedContainerReference},
instances::PropertiesObject,
};
#[skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct LastUpdatedTimeFilter {
pub gte: Option<TimestampOrRelative>,
pub gt: Option<TimestampOrRelative>,
pub lte: Option<TimestampOrRelative>,
pub lt: Option<TimestampOrRelative>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RecordData<TProperties> {
pub source: TaggedContainerReference,
pub properties: TProperties,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RecordWrite<TProperties> {
pub space: String,
pub external_id: String,
pub sources: Vec<RecordData<TProperties>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Record<TProperties> {
pub space: String,
pub external_id: String,
pub properties: PropertiesObject<TProperties>,
pub created_time: i64,
pub last_updated_time: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PropertiesPerContainer {
pub source: TaggedContainerReference,
pub properties: Vec<String>,
}
#[skip_serializing_none]
#[derive(Serialize, Deserialize, Clone, Debug)]
#[serde(rename_all = "camelCase")]
pub struct RecordsPropertySort {
pub property: Vec<String>,
pub direction: Option<SortDirection>,
}
impl RecordsPropertySort {
pub fn new(property: impl PropertyIdentifier, direction: SortDirection) -> Self {
Self {
property: property.into_identifier(),
direction: Some(direction),
}
}
}
#[skip_serializing_none]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RecordsRetrieveRequest {
pub last_updated_time: LastUpdatedTimeFilter,
pub filter: Option<AdvancedFilter>,
pub sources: Option<Vec<PropertiesPerContainer>>,
pub limit: Option<u32>,
pub sort: Option<Vec<RecordsPropertySort>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum RecordCursor {
Cursor(String),
InitializeCursor(String),
}
#[skip_serializing_none]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RecordsSyncRequest {
pub sources: Option<Vec<PropertiesPerContainer>>,
pub filter: Option<AdvancedFilter>,
pub limit: Option<u32>,
#[serde(flatten)]
pub cursor: RecordCursor,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CursorAndHasNext {
pub next_cursor: String,
pub has_next: bool,
}