text-document-common 1.4.0

Shared entities, database, events, and undo/redo infrastructure for text-document
Documentation
// Generated by Qleany v1.5.6 from common_entities.tera

use crate::types::EntityId;
use crate::types::HasId;
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct Root {
    pub id: EntityId,
    #[serde(with = "chrono::serde::ts_milliseconds")]
    pub created_at: chrono::DateTime<chrono::Utc>,
    #[serde(with = "chrono::serde::ts_milliseconds")]
    pub updated_at: chrono::DateTime<chrono::Utc>,
    pub document: EntityId,
}

impl HasId for Root {
    fn id(&self) -> EntityId {
        self.id
    }
}

#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct Document {
    pub id: EntityId,
    #[serde(with = "chrono::serde::ts_milliseconds")]
    pub created_at: chrono::DateTime<chrono::Utc>,
    #[serde(with = "chrono::serde::ts_milliseconds")]
    pub updated_at: chrono::DateTime<chrono::Utc>,
    pub title: String,
    pub frames: Vec<EntityId>,
    pub text_direction: TextDirection,
    pub default_wrap_mode: WrapMode,
    pub resources: Vec<EntityId>,
    pub lists: Vec<EntityId>,
    pub tables: Vec<EntityId>,
    pub character_count: i64,
    pub block_count: i64,
}

impl HasId for Document {
    fn id(&self) -> EntityId {
        self.id
    }
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
pub enum TextDirection {
    #[default]
    LeftToRight,
    RightToLeft,
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
pub enum WrapMode {
    #[default]
    NoWrap,
    WordWrap,
    WrapAnywhere,
    WrapAtWordBoundaryOrAnywhere,
}

#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct Frame {
    pub id: EntityId,
    #[serde(with = "chrono::serde::ts_milliseconds")]
    pub created_at: chrono::DateTime<chrono::Utc>,
    #[serde(with = "chrono::serde::ts_milliseconds")]
    pub updated_at: chrono::DateTime<chrono::Utc>,
    pub parent_frame: Option<EntityId>,
    pub blocks: Vec<EntityId>,
    pub child_order: Vec<i64>,
    pub fmt_height: Option<i64>,
    pub fmt_width: Option<i64>,
    pub fmt_top_margin: Option<i64>,
    pub fmt_bottom_margin: Option<i64>,
    pub fmt_left_margin: Option<i64>,
    pub fmt_right_margin: Option<i64>,
    pub fmt_padding: Option<i64>,
    pub fmt_border: Option<i64>,
    pub fmt_position: Option<FramePosition>,
    pub fmt_is_blockquote: Option<bool>,
    pub table: Option<EntityId>,
}

impl HasId for Frame {
    fn id(&self) -> EntityId {
        self.id
    }
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
pub enum FramePosition {
    #[default]
    InFlow,
    FloatLeft,
    FloatRight,
}

#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct Block {
    pub id: EntityId,
    #[serde(with = "chrono::serde::ts_milliseconds")]
    pub created_at: chrono::DateTime<chrono::Utc>,
    #[serde(with = "chrono::serde::ts_milliseconds")]
    pub updated_at: chrono::DateTime<chrono::Utc>,
    pub elements: Vec<EntityId>,
    pub list: Option<EntityId>,
    pub text_length: i64,
    pub document_position: i64,
    pub plain_text: String,
    pub fmt_alignment: Option<Alignment>,
    pub fmt_top_margin: Option<i64>,
    pub fmt_bottom_margin: Option<i64>,
    pub fmt_left_margin: Option<i64>,
    pub fmt_right_margin: Option<i64>,
    pub fmt_heading_level: Option<i64>,
    pub fmt_indent: Option<i64>,
    pub fmt_text_indent: Option<i64>,
    pub fmt_marker: Option<MarkerType>,
    pub fmt_tab_positions: Vec<i64>,
    pub fmt_line_height: Option<i64>,
    pub fmt_non_breakable_lines: Option<bool>,
    pub fmt_direction: Option<TextDirection>,
    pub fmt_background_color: Option<String>,
    pub fmt_is_code_block: Option<bool>,
    pub fmt_code_language: Option<String>,
}

impl HasId for Block {
    fn id(&self) -> EntityId {
        self.id
    }
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
pub enum Alignment {
    #[default]
    Left,
    Right,
    Center,
    Justify,
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
pub enum MarkerType {
    #[default]
    NoMarker,
    Unchecked,
    Checked,
}

#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct InlineElement {
    pub id: EntityId,
    #[serde(with = "chrono::serde::ts_milliseconds")]
    pub created_at: chrono::DateTime<chrono::Utc>,
    #[serde(with = "chrono::serde::ts_milliseconds")]
    pub updated_at: chrono::DateTime<chrono::Utc>,
    pub content: InlineContent,
    pub fmt_font_family: Option<String>,
    pub fmt_font_point_size: Option<i64>,
    pub fmt_font_weight: Option<i64>,
    pub fmt_font_bold: Option<bool>,
    pub fmt_font_italic: Option<bool>,
    pub fmt_font_underline: Option<bool>,
    pub fmt_font_overline: Option<bool>,
    pub fmt_font_strikeout: Option<bool>,
    pub fmt_letter_spacing: Option<i64>,
    pub fmt_word_spacing: Option<i64>,
    pub fmt_anchor_href: Option<String>,
    pub fmt_anchor_names: Vec<String>,
    pub fmt_is_anchor: Option<bool>,
    pub fmt_tooltip: Option<String>,
    pub fmt_underline_style: Option<UnderlineStyle>,
    pub fmt_vertical_alignment: Option<CharVerticalAlignment>,
}

impl HasId for InlineElement {
    fn id(&self) -> EntityId {
        self.id
    }
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
pub enum InlineContent {
    #[default]
    Empty,
    Text(String),
    Image {
        name: String,
        width: i64,
        height: i64,
        quality: i64,
    },
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
pub enum UnderlineStyle {
    #[default]
    NoUnderline,
    SingleUnderline,
    DashUnderline,
    DotLine,
    DashDotLine,
    DashDotDotLine,
    WaveUnderline,
    SpellCheckUnderline,
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
pub enum CharVerticalAlignment {
    #[default]
    Normal,
    SuperScript,
    SubScript,
    Middle,
    Bottom,
    Top,
    Baseline,
}

#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct List {
    pub id: EntityId,
    #[serde(with = "chrono::serde::ts_milliseconds")]
    pub created_at: chrono::DateTime<chrono::Utc>,
    #[serde(with = "chrono::serde::ts_milliseconds")]
    pub updated_at: chrono::DateTime<chrono::Utc>,
    pub style: ListStyle,
    pub indent: i64,
    pub prefix: String,
    pub suffix: String,
}

impl HasId for List {
    fn id(&self) -> EntityId {
        self.id
    }
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
pub enum ListStyle {
    #[default]
    Disc,
    Circle,
    Square,
    Decimal,
    LowerAlpha,
    UpperAlpha,
    LowerRoman,
    UpperRoman,
}

#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct Resource {
    pub id: EntityId,
    #[serde(with = "chrono::serde::ts_milliseconds")]
    pub created_at: chrono::DateTime<chrono::Utc>,
    #[serde(with = "chrono::serde::ts_milliseconds")]
    pub updated_at: chrono::DateTime<chrono::Utc>,
    pub resource_type: ResourceType,
    pub name: String,
    pub url: String,
    pub mime_type: String,
    pub data_base64: String,
}

impl HasId for Resource {
    fn id(&self) -> EntityId {
        self.id
    }
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
pub enum ResourceType {
    #[default]
    Image,
    StyleSheet,
    Other,
}

#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct Table {
    pub id: EntityId,
    #[serde(with = "chrono::serde::ts_milliseconds")]
    pub created_at: chrono::DateTime<chrono::Utc>,
    #[serde(with = "chrono::serde::ts_milliseconds")]
    pub updated_at: chrono::DateTime<chrono::Utc>,
    pub cells: Vec<EntityId>,
    pub rows: i64,
    pub columns: i64,
    pub column_widths: Vec<i64>,
    pub fmt_border: Option<i64>,
    pub fmt_cell_spacing: Option<i64>,
    pub fmt_cell_padding: Option<i64>,
    pub fmt_width: Option<i64>,
    pub fmt_alignment: Option<Alignment>,
}

impl HasId for Table {
    fn id(&self) -> EntityId {
        self.id
    }
}

#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct TableCell {
    pub id: EntityId,
    #[serde(with = "chrono::serde::ts_milliseconds")]
    pub created_at: chrono::DateTime<chrono::Utc>,
    #[serde(with = "chrono::serde::ts_milliseconds")]
    pub updated_at: chrono::DateTime<chrono::Utc>,
    pub row: i64,
    pub column: i64,
    pub row_span: i64,
    pub column_span: i64,
    pub cell_frame: Option<EntityId>,
    pub fmt_padding: Option<i64>,
    pub fmt_border: Option<i64>,
    pub fmt_vertical_alignment: Option<CellVerticalAlignment>,
    pub fmt_background_color: Option<String>,
}

impl HasId for TableCell {
    fn id(&self) -> EntityId {
        self.id
    }
}
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
pub enum CellVerticalAlignment {
    #[default]
    Top,
    Middle,
    Bottom,
}