Skip to main content

common/
entities.rs

1// Generated by Qleany v1.5.6 from common_entities.tera
2
3use crate::types::EntityId;
4use crate::types::HasId;
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
8pub struct Root {
9    pub id: EntityId,
10    #[serde(with = "chrono::serde::ts_milliseconds")]
11    pub created_at: chrono::DateTime<chrono::Utc>,
12    #[serde(with = "chrono::serde::ts_milliseconds")]
13    pub updated_at: chrono::DateTime<chrono::Utc>,
14    pub document: EntityId,
15}
16
17impl HasId for Root {
18    fn id(&self) -> EntityId {
19        self.id
20    }
21}
22
23#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
24pub struct Document {
25    pub id: EntityId,
26    #[serde(with = "chrono::serde::ts_milliseconds")]
27    pub created_at: chrono::DateTime<chrono::Utc>,
28    #[serde(with = "chrono::serde::ts_milliseconds")]
29    pub updated_at: chrono::DateTime<chrono::Utc>,
30    pub title: String,
31    pub frames: Vec<EntityId>,
32    pub text_direction: TextDirection,
33    pub default_wrap_mode: WrapMode,
34    /// Document-wide default natural language as an ISO 639-1 code (e.g.
35    /// "en", "fr"). Used as the fallback hyphenation language for blocks
36    /// that don't set their own `fmt_language`. `None` is treated as "en".
37    #[serde(default)]
38    pub default_language: Option<String>,
39    pub resources: Vec<EntityId>,
40    pub lists: Vec<EntityId>,
41    pub tables: Vec<EntityId>,
42    pub character_count: i64,
43    pub block_count: i64,
44}
45
46impl HasId for Document {
47    fn id(&self) -> EntityId {
48        self.id
49    }
50}
51#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
52pub enum TextDirection {
53    #[default]
54    LeftToRight,
55    RightToLeft,
56}
57#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
58pub enum WrapMode {
59    #[default]
60    NoWrap,
61    WordWrap,
62    WrapAnywhere,
63    WrapAtWordBoundaryOrAnywhere,
64}
65
66#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
67pub struct Frame {
68    pub id: EntityId,
69    #[serde(with = "chrono::serde::ts_milliseconds")]
70    pub created_at: chrono::DateTime<chrono::Utc>,
71    #[serde(with = "chrono::serde::ts_milliseconds")]
72    pub updated_at: chrono::DateTime<chrono::Utc>,
73    pub parent_frame: Option<EntityId>,
74    pub blocks: Vec<EntityId>,
75    pub child_order: Vec<i64>,
76    pub fmt_height: Option<i64>,
77    pub fmt_width: Option<i64>,
78    pub fmt_top_margin: Option<i64>,
79    pub fmt_bottom_margin: Option<i64>,
80    pub fmt_left_margin: Option<i64>,
81    pub fmt_right_margin: Option<i64>,
82    pub fmt_padding: Option<i64>,
83    pub fmt_border: Option<i64>,
84    pub fmt_position: Option<FramePosition>,
85    pub fmt_is_blockquote: Option<bool>,
86    pub table: Option<EntityId>,
87    /// Rope byte range occupied by this frame's contents. Plan §1.6
88    /// invariant: all blocks in `Frame.blocks` have byte ranges
89    /// contained within this range, and no two frames' ranges
90    /// overlap. Empty/unset = `(0, 0)`. Internal field — not
91    /// surfaced through DTOs.
92    #[serde(default)]
93    pub byte_range: (u32, u32),
94}
95
96impl HasId for Frame {
97    fn id(&self) -> EntityId {
98        self.id
99    }
100}
101#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
102pub enum FramePosition {
103    #[default]
104    InFlow,
105    FloatLeft,
106    FloatRight,
107}
108
109#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
110pub struct Block {
111    pub id: EntityId,
112    #[serde(with = "chrono::serde::ts_milliseconds")]
113    pub created_at: chrono::DateTime<chrono::Utc>,
114    #[serde(with = "chrono::serde::ts_milliseconds")]
115    pub updated_at: chrono::DateTime<chrono::Utc>,
116    pub list: Option<EntityId>,
117    pub document_position: i64,
118    pub fmt_alignment: Option<Alignment>,
119    pub fmt_top_margin: Option<i64>,
120    pub fmt_bottom_margin: Option<i64>,
121    pub fmt_left_margin: Option<i64>,
122    pub fmt_right_margin: Option<i64>,
123    pub fmt_heading_level: Option<i64>,
124    pub fmt_indent: Option<i64>,
125    pub fmt_text_indent: Option<i64>,
126    pub fmt_marker: Option<MarkerType>,
127    pub fmt_tab_positions: Vec<i64>,
128    pub fmt_line_height: Option<i64>,
129    pub fmt_non_breakable_lines: Option<bool>,
130    pub fmt_direction: Option<TextDirection>,
131    pub fmt_background_color: Option<String>,
132    pub fmt_is_code_block: Option<bool>,
133    pub fmt_code_language: Option<String>,
134    /// Enable automatic + soft-hyphen hyphenation for this block.
135    #[serde(default)]
136    pub fmt_hyphenate: Option<bool>,
137    /// Natural language of this block as an ISO 639-1 code (e.g. "en",
138    /// "fr"); drives hyphenation dictionary selection.
139    #[serde(default)]
140    pub fmt_language: Option<String>,
141}
142
143impl HasId for Block {
144    fn id(&self) -> EntityId {
145        self.id
146    }
147}
148#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
149pub enum Alignment {
150    #[default]
151    Left,
152    Right,
153    Center,
154    Justify,
155}
156#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
157pub enum MarkerType {
158    #[default]
159    NoMarker,
160    Unchecked,
161    Checked,
162}
163
164#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
165pub enum UnderlineStyle {
166    #[default]
167    NoUnderline,
168    SingleUnderline,
169    DashUnderline,
170    DotLine,
171    DashDotLine,
172    DashDotDotLine,
173    WaveUnderline,
174    SpellCheckUnderline,
175}
176#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
177pub enum CharVerticalAlignment {
178    #[default]
179    Normal,
180    SuperScript,
181    SubScript,
182    Middle,
183    Bottom,
184    Top,
185    Baseline,
186}
187
188#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
189pub struct List {
190    pub id: EntityId,
191    #[serde(with = "chrono::serde::ts_milliseconds")]
192    pub created_at: chrono::DateTime<chrono::Utc>,
193    #[serde(with = "chrono::serde::ts_milliseconds")]
194    pub updated_at: chrono::DateTime<chrono::Utc>,
195    pub style: ListStyle,
196    pub indent: i64,
197    pub prefix: String,
198    pub suffix: String,
199}
200
201impl HasId for List {
202    fn id(&self) -> EntityId {
203        self.id
204    }
205}
206#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
207pub enum ListStyle {
208    #[default]
209    Disc,
210    Circle,
211    Square,
212    Decimal,
213    LowerAlpha,
214    UpperAlpha,
215    LowerRoman,
216    UpperRoman,
217}
218
219#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
220pub struct Resource {
221    pub id: EntityId,
222    #[serde(with = "chrono::serde::ts_milliseconds")]
223    pub created_at: chrono::DateTime<chrono::Utc>,
224    #[serde(with = "chrono::serde::ts_milliseconds")]
225    pub updated_at: chrono::DateTime<chrono::Utc>,
226    pub resource_type: ResourceType,
227    pub name: String,
228    pub url: String,
229    pub mime_type: String,
230    pub data_base64: String,
231}
232
233impl HasId for Resource {
234    fn id(&self) -> EntityId {
235        self.id
236    }
237}
238#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
239pub enum ResourceType {
240    #[default]
241    Image,
242    StyleSheet,
243    Other,
244}
245
246#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
247pub struct Table {
248    pub id: EntityId,
249    #[serde(with = "chrono::serde::ts_milliseconds")]
250    pub created_at: chrono::DateTime<chrono::Utc>,
251    #[serde(with = "chrono::serde::ts_milliseconds")]
252    pub updated_at: chrono::DateTime<chrono::Utc>,
253    pub cells: Vec<EntityId>,
254    pub rows: i64,
255    pub columns: i64,
256    pub column_widths: Vec<i64>,
257    pub fmt_border: Option<i64>,
258    pub fmt_cell_spacing: Option<i64>,
259    pub fmt_cell_padding: Option<i64>,
260    pub fmt_width: Option<i64>,
261    pub fmt_alignment: Option<Alignment>,
262}
263
264impl HasId for Table {
265    fn id(&self) -> EntityId {
266        self.id
267    }
268}
269
270#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
271pub struct TableCell {
272    pub id: EntityId,
273    #[serde(with = "chrono::serde::ts_milliseconds")]
274    pub created_at: chrono::DateTime<chrono::Utc>,
275    #[serde(with = "chrono::serde::ts_milliseconds")]
276    pub updated_at: chrono::DateTime<chrono::Utc>,
277    pub row: i64,
278    pub column: i64,
279    pub row_span: i64,
280    pub column_span: i64,
281    pub cell_frame: Option<EntityId>,
282    pub fmt_padding: Option<i64>,
283    pub fmt_border: Option<i64>,
284    pub fmt_vertical_alignment: Option<CellVerticalAlignment>,
285    pub fmt_background_color: Option<String>,
286}
287
288impl HasId for TableCell {
289    fn id(&self) -> EntityId {
290        self.id
291    }
292}
293#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq, Eq)]
294pub enum CellVerticalAlignment {
295    #[default]
296    Top,
297    Middle,
298    Bottom,
299}