fractal-matrix-api 4.2.0

Library to communicate with a Matrix.org server
Documentation
use serde::Serialize;
use std::ops::Not;

#[derive(Clone, Debug, Default, Serialize)]
pub struct Filter<'a> {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub event_fields: Option<Vec<&'a str>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub event_format: Option<EventFormat>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub presence: Option<EventFilter<'a>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub account_data: Option<EventFilter<'a>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub room: Option<RoomFilter<'a>>,
}

#[derive(Clone, Debug, Serialize)]
#[serde(rename_all = "lowercase")]
pub enum EventFormat {
    Client,
    Federation,
}

impl Default for EventFormat {
    fn default() -> Self {
        EventFormat::Client
    }
}

#[derive(Clone, Debug, Default, Serialize)]
pub struct EventFilter<'a> {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub limit: Option<i32>,
    #[serde(skip_serializing_if = "Vec::is_empty")]
    pub not_senders: Vec<&'a str>,
    #[serde(skip_serializing_if = "Vec::is_empty")]
    pub not_types: Vec<&'a str>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub senders: Option<Vec<&'a str>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub types: Option<Vec<&'a str>>,
}

#[derive(Clone, Debug, Default, Serialize)]
pub struct RoomFilter<'a> {
    #[serde(skip_serializing_if = "Vec::is_empty")]
    pub not_rooms: Vec<&'a str>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub rooms: Option<Vec<&'a str>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub ephemeral: Option<RoomEventFilter<'a>>,
    #[serde(skip_serializing_if = "Not::not")]
    pub include_leave: bool,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub state: Option<RoomEventFilter<'a>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub timeline: Option<RoomEventFilter<'a>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub account_data: Option<RoomEventFilter<'a>>,
}

#[derive(Clone, Debug, Default, Serialize)]
pub struct RoomEventFilter<'a> {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub lazy_load_members: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub limit: Option<i32>,
    #[serde(skip_serializing_if = "Vec::is_empty")]
    pub not_senders: Vec<&'a str>,
    #[serde(skip_serializing_if = "Vec::is_empty")]
    pub not_types: Vec<&'a str>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub senders: Option<Vec<&'a str>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub types: Option<Vec<&'a str>>,
    #[serde(skip_serializing_if = "Vec::is_empty")]
    pub not_rooms: Vec<&'a str>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub rooms: Option<Vec<&'a str>>,
    #[serde(skip_serializing_if = "Not::not")]
    pub contains_url: bool,
}