JMAP Sharing Principals
This commit is contained in:
119
src/principal/query.rs
Normal file
119
src/principal/query.rs
Normal file
@@ -0,0 +1,119 @@
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::{
|
||||
core::query::{self, QueryObject},
|
||||
Set,
|
||||
};
|
||||
|
||||
use super::{Principal, Type};
|
||||
|
||||
#[derive(Serialize, Clone, Debug)]
|
||||
#[serde(untagged)]
|
||||
pub enum Filter {
|
||||
Email {
|
||||
#[serde(rename = "email")]
|
||||
value: String,
|
||||
},
|
||||
Name {
|
||||
#[serde(rename = "name")]
|
||||
value: String,
|
||||
},
|
||||
Text {
|
||||
#[serde(rename = "text")]
|
||||
value: String,
|
||||
},
|
||||
Type {
|
||||
#[serde(rename = "type")]
|
||||
value: Type,
|
||||
},
|
||||
Timezone {
|
||||
#[serde(rename = "timezone")]
|
||||
value: String,
|
||||
},
|
||||
Members {
|
||||
#[serde(rename = "members")]
|
||||
value: String,
|
||||
},
|
||||
QuotaLt {
|
||||
#[serde(rename = "quotaLowerThan")]
|
||||
value: u32,
|
||||
},
|
||||
QuotaGt {
|
||||
#[serde(rename = "quotaGreaterThan")]
|
||||
value: u32,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Serialize, Debug, Clone)]
|
||||
#[serde(tag = "property")]
|
||||
pub enum Comparator {
|
||||
#[serde(rename = "type")]
|
||||
Type,
|
||||
#[serde(rename = "name")]
|
||||
Name,
|
||||
#[serde(rename = "email")]
|
||||
Email,
|
||||
}
|
||||
|
||||
impl Filter {
|
||||
pub fn name(value: impl Into<String>) -> Self {
|
||||
Filter::Name {
|
||||
value: value.into(),
|
||||
}
|
||||
}
|
||||
pub fn email(value: impl Into<String>) -> Self {
|
||||
Filter::Email {
|
||||
value: value.into(),
|
||||
}
|
||||
}
|
||||
pub fn text(value: impl Into<String>) -> Self {
|
||||
Filter::Text {
|
||||
value: value.into(),
|
||||
}
|
||||
}
|
||||
pub fn timezone(value: impl Into<String>) -> Self {
|
||||
Filter::Timezone {
|
||||
value: value.into(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn members(value: impl Into<String>) -> Self {
|
||||
Filter::Members {
|
||||
value: value.into(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn ptype(value: Type) -> Self {
|
||||
Filter::Type { value }
|
||||
}
|
||||
|
||||
pub fn quota_lower_than(value: u32) -> Self {
|
||||
Filter::QuotaLt { value }
|
||||
}
|
||||
|
||||
pub fn quota_greater_than(value: u32) -> Self {
|
||||
Filter::QuotaGt { value }
|
||||
}
|
||||
}
|
||||
|
||||
impl Comparator {
|
||||
pub fn name() -> query::Comparator<Comparator> {
|
||||
query::Comparator::new(Comparator::Name)
|
||||
}
|
||||
|
||||
pub fn email() -> query::Comparator<Comparator> {
|
||||
query::Comparator::new(Comparator::Email)
|
||||
}
|
||||
|
||||
pub fn ptype() -> query::Comparator<Comparator> {
|
||||
query::Comparator::new(Comparator::Type)
|
||||
}
|
||||
}
|
||||
|
||||
impl QueryObject for Principal<Set> {
|
||||
type QueryArguments = ();
|
||||
|
||||
type Filter = Filter;
|
||||
|
||||
type Sort = Comparator;
|
||||
}
|
||||
Reference in New Issue
Block a user