1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Default, Deserialize, Serialize)]
7pub struct Cooldowns {
8 #[serde(default)]
9 pub threads: u32,
10 #[serde(default)]
11 pub replies: u32,
12 #[serde(default)]
13 pub images: u32,
14}
15
16#[derive(Debug, Clone, Deserialize, Serialize)]
18pub struct Board {
19
20 pub board: String,
22 pub title: String,
23 pub meta_description: String,
24
25 #[serde(default)]
27 pub ws_board: u8,
28
29 pub per_page: u32,
30 pub pages: u32,
31
32 pub max_filesize: u64,
33 pub max_webm_filesize: u64,
34 pub max_comment_chars: u32,
35 #[serde(default)]
36 pub max_webm_duration: u32,
37
38 pub bump_limit: u32,
39 pub image_limit: u32,
40
41 #[serde(default)]
42 pub cooldowns: Cooldowns,
43
44 #[serde(default)]
46 pub spoilers: u8,
47 #[serde(default)]
48 pub custom_spoilers: u8,
49 #[serde(default)]
50 pub is_archived: u8,
51 #[serde(default)]
52 pub country_flags: u8,
53 #[serde(default)]
54 pub user_ids: u8,
55 #[serde(default)]
56 pub oekaki: u8,
57 #[serde(default)]
58 pub sjis_tags: u8,
59 #[serde(default)]
60 pub code_tags: u8,
61 #[serde(default)]
62 pub math_tags: u8,
63 #[serde(default)]
64 pub text_only: u8,
65 #[serde(default)]
66 pub forced_anon: u8,
67 #[serde(default)]
68 pub webm_audio: u8,
69 #[serde(default)]
70 pub require_subject: u8,
71 #[serde(default)]
72 pub min_image_width: u32,
73 #[serde(default)]
74 pub min_image_height: u32,
75
76 #[serde(default)]
78 pub board_flags: Option<HashMap<String, String>>,
79}
80
81impl Board {
82 pub fn is_ws(&self) -> bool { self.ws_board == 1 }
83 pub fn has_archive(&self) -> bool { self.is_archived == 1 }
84}
85
86#[derive(Debug, Clone, Deserialize, Serialize)]
87pub(crate) struct BoardList {
88 pub boards: Vec<Board>,
89}