1use alloc::string::String;
2use alloc::vec::Vec;
3use serde::{Deserialize, Serialize};
4
5use crate::Encode;
6
7#[derive(Serialize, Deserialize, Clone, Debug)]
8pub struct Manual {
9 pub pages: Vec<Page>,
10}
11
12impl Encode<'_> for Manual {}
13
14#[derive(Serialize, Deserialize, Clone, Debug)]
15pub struct Page {
16 pub title: String,
18 pub badge: Option<u8>,
20 pub score: Option<(u8, i16)>,
22 pub theme: Option<u32>,
26 pub content: Vec<Block>,
27}
28
29#[derive(Serialize, Deserialize, Clone, Debug)]
30pub enum Block {
31 H2(String),
33 H3(String),
35 P(Paragraph),
37 Oli(Paragraph),
39 Uli(Paragraph),
41 A(u8),
43 Img(String),
45 Quote(Paragraph),
47 Qr(String),
49}
50
51pub type Paragraph = Vec<Inline>;
52
53#[derive(Serialize, Deserialize, Clone, Debug)]
54pub struct Inline {
55 pub kind: InlineKind,
56 pub content: String,
57}
58
59#[derive(Serialize, Deserialize, Clone, Copy, Debug)]
60pub enum InlineKind {
61 Plain,
63 Bold,
65 Italic,
67 Image,
69 Icon,
71 Br,
73}