boox_note_parser/
virtual_page.rs1use crate::{
2 error::Result,
3 id::PageUuid,
4 json::Dimensions,
5 utils::{convert_timestamp_to_datetime, parse_json},
6};
7
8#[derive(Debug, Clone)]
9pub struct VirtualPage {
10 pub page_id: PageUuid,
11 pub created: chrono::DateTime<chrono::Utc>,
12 pub modified: chrono::DateTime<chrono::Utc>,
13 pub zoom_scale: f32,
14 pub dimensions: Dimensions,
15 pub layout: Dimensions,
16 pub geo: Dimensions,
17 pub geo_layout: String,
18 pub template_path: String,
19 pub page_number: String,
20}
21
22impl VirtualPage {
23 pub fn read(mut reader: impl std::io::Read) -> Result<Self> {
24 let container = protobuf::VirtualPageContainer::read(&mut reader)?;
25 Ok(Self {
26 page_id: PageUuid::from_str(&container.virtual_page.page_uuid)?,
27 created: convert_timestamp_to_datetime(container.virtual_page.created)?,
28 modified: convert_timestamp_to_datetime(container.virtual_page.modified)?,
29 zoom_scale: container.virtual_page.zoom_scale,
30 dimensions: parse_json(&container.virtual_page.dimensions_json)?,
31 layout: parse_json(&container.virtual_page.layout_json)?,
32 geo: parse_json(&container.virtual_page.geo_json)?,
33 geo_layout: container.virtual_page.geo_layout.clone(),
34 template_path: container.virtual_page.template_path.clone(),
35 page_number: container.virtual_page.page_number.clone(),
36 })
37 }
38}
39
40pub mod protobuf {
41 use prost::Message;
42
43 use crate::error::Result;
44
45 #[derive(Clone, PartialEq, Message)]
46 pub struct VirtualPageContainer {
47 #[prost(message, required, tag = "1")]
48 pub virtual_page: VirtualPage,
49 }
50
51 impl VirtualPageContainer {
52 pub fn read(mut reader: impl std::io::Read) -> Result<Self> {
53 let mut buf = Vec::new();
54 reader.read_to_end(&mut buf)?;
55
56 Ok(VirtualPageContainer::decode(&buf[..])?)
57 }
58 }
59
60 #[derive(Clone, PartialEq, Message)]
61 pub struct VirtualPage {
62 #[prost(string, tag = "1")]
64 pub page_uuid: String,
65 #[prost(uint64, tag = "2")]
67 pub created: u64,
68 #[prost(uint64, tag = "3")]
70 pub modified: u64,
71 #[prost(float, tag = "4")]
73 pub zoom_scale: f32,
74 #[prost(string, tag = "6")]
76 pub dimensions_json: String,
77 #[prost(string, tag = "7")]
79 pub layout_json: String,
80 #[prost(string, tag = "8")]
82 pub geo_json: String,
83 #[prost(string, tag = "9")]
85 pub geo_layout: String,
86 #[prost(string, tag = "10")]
88 pub template_path: String,
89 #[prost(string, tag = "12")]
91 pub page_number: String,
92 }
93}