fourchan-rs 0.1.1

Async 4chan JSON API client and type bindings
Documentation
use std::collections::HashMap;

use serde::{Deserialize, Serialize};

/// Per-board rate-limit cooldowns, in seconds.
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Cooldowns {
    #[serde(default)]
    pub threads: u32,
    #[serde(default)]
    pub replies: u32,
    #[serde(default)]
    pub images: u32,
}

/// A single board, as returned by `boards.json`.
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Board {

    /// Short slug.
    pub board: String,
    pub title: String,
    pub meta_description: String,

    /// `1` if work-safe.
    #[serde(default)]
    pub ws_board: u8,

    pub per_page: u32,
    pub pages: u32,

    pub max_filesize: u64,
    pub max_webm_filesize: u64,
    pub max_comment_chars: u32,
    #[serde(default)]
    pub max_webm_duration: u32,

    pub bump_limit: u32,
    pub image_limit: u32,

    #[serde(default)]
    pub cooldowns: Cooldowns,

    // Optional capability flags. Default to 0/false when omitted.
    #[serde(default)]
    pub spoilers: u8,
    #[serde(default)]
    pub custom_spoilers: u8,
    #[serde(default)]
    pub is_archived: u8,
    #[serde(default)]
    pub country_flags: u8,
    #[serde(default)]
    pub user_ids: u8,
    #[serde(default)]
    pub oekaki: u8,
    #[serde(default)]
    pub sjis_tags: u8,
    #[serde(default)]
    pub code_tags: u8,
    #[serde(default)]
    pub math_tags: u8,
    #[serde(default)]
    pub text_only: u8,
    #[serde(default)]
    pub forced_anon: u8,
    #[serde(default)]
    pub webm_audio: u8,
    #[serde(default)]
    pub require_subject: u8,
    #[serde(default)]
    pub min_image_width: u32,
    #[serde(default)]
    pub min_image_height: u32,

    /// Map of board-specific flag codes to display names, if the board has them.
    #[serde(default)]
    pub board_flags: Option<HashMap<String, String>>,
}

impl Board {
    pub fn is_ws(&self) -> bool { self.ws_board == 1 }
    pub fn has_archive(&self) -> bool { self.is_archived == 1 }
}

#[derive(Debug, Clone, Deserialize, Serialize)]
pub(crate) struct BoardList {
    pub boards: Vec<Board>,
}