use crate::common::rich_text::RichText;
use crate::database::date::{DateValue, FormulaResultValue};
use crate::database::files::FileReference;
use crate::database::id::PropertyId;
use crate::database::relation::RelationValue;
use crate::database::select::SelectedValue;
use crate::user::User;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use serde_json::Number;
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum RollupValue {
Number { number: Option<Number> },
Date { date: Option<DateTime<Utc>> },
Array { array: Vec<RollupPropertyValue> },
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
#[serde(tag = "type")]
#[serde(rename_all = "snake_case")]
pub enum RollupPropertyValue {
#[serde(rename = "rich_text")]
Text {
rich_text: Vec<RichText>,
},
Number {
number: Option<Number>,
},
Select {
select: Option<SelectedValue>,
},
Status {
status: Option<SelectedValue>,
},
MultiSelect {
multi_select: Option<Vec<SelectedValue>>,
},
Date {
date: Option<DateValue>,
},
Formula {
formula: FormulaResultValue,
},
Relation {
relation: Option<Vec<RelationValue>>,
},
Rollup {
rollup: Option<RollupValue>,
},
People {
people: Vec<User>,
},
Files {
files: Option<Vec<FileReference>>,
},
Checkbox {
checkbox: bool,
},
Url {
url: Option<String>,
},
Email {
email: Option<String>,
},
PhoneNumber {
phone_number: String,
},
CreatedTime {
created_time: DateTime<Utc>,
},
CreatedBy {
created_by: User,
},
LastEditedTime {
last_edited_time: DateTime<Utc>,
},
LastEditedBy {
last_edited_by: User,
},
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)]
pub struct Rollup {
pub relation_property_name: String,
pub relation_property_id: PropertyId,
pub rollup_property_name: String,
pub rollup_property_id: String,
pub function: RollupFunction,
}
#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Copy, Clone)]
#[serde(rename_all = "snake_case")]
pub enum RollupFunction {
Average,
Checked,
Count,
CountPerGroup,
CountValues,
DateRange,
EarliestDate,
Empty,
LatestDate,
Max,
Median,
Min,
NotEmpty,
PercentChecked,
PercentEmpty,
PercentNotEmpty,
PercentPerGroup,
PercentUnchecked,
Range,
ShowOriginal,
ShowUnique,
Sum,
Unchecked,
Unique,
}