1use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct Page {
9 pub id: String,
10 pub title: String,
11 pub summary: Option<String>,
12 pub content: String,
13 pub entity_id: Option<String>,
14 #[serde(default, alias = "domain")]
15 pub space: Option<String>,
16 pub source_memory_ids: Vec<String>,
18 pub version: i64,
19 pub status: String,
20 pub created_at: String,
21 pub last_compiled: String,
22 pub last_modified: String,
23 pub sources_updated_count: i64,
25 pub stale_reason: Option<String>,
27 pub user_edited: bool,
29 #[serde(default, skip_serializing_if = "is_zero_f32")]
32 pub relevance_score: f32,
33 #[serde(skip_serializing_if = "Option::is_none")]
34 pub last_edited_by: Option<String>,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub last_edited_at: Option<i64>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 pub last_delta_summary: Option<String>,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub changelog: Option<String>,
41 #[serde(default = "default_creation_kind")]
45 pub creation_kind: String,
46 #[serde(default = "default_review_status")]
50 pub review_status: String,
51}
52
53fn default_creation_kind() -> String {
54 "distilled".to_string()
55}
56
57fn default_review_status() -> String {
58 "confirmed".to_string()
59}
60
61fn is_zero_f32(v: &f32) -> bool {
62 *v == 0.0
63}
64
65#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
69pub struct PageEvidence {
70 pub page_id: String,
71 pub source_kind: String, pub locator: Option<String>,
73 pub title: Option<String>,
74 pub linked_at: i64,
75 pub link_reason: Option<String>,
76}