r-epub 0.2.2

Library to support parse .epub file
Documentation
use serde::{Deserialize, Serialize};

use crate::types;

#[derive(Debug, Serialize, Deserialize)]
pub struct Toc {
    pub head: Head,
    #[serde(rename = "navMap")]
    pub nav_map: NavMap,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Head {
    #[serde(rename = "meta")]
    pub metas: Vec<types::Meta>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct NavMap {
    #[serde(rename = "navPoint", default)]
    pub nav_points: Vec<NavPoint>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct NavPoint {
    #[serde(rename = "@playOrder")]
    pub play_order: u32,
    #[serde(rename = "@id")]
    pub id: String,
    #[serde(rename = "@class")]
    pub class: String,
    #[serde(rename = "navLabel")]
    pub nav_lable: NavLabel,
    #[serde(rename = "navPoint", default)]
    pub sub_navpoints: Vec<NavPoint>,
    pub content: Content,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct NavLabel {
    pub text: Text,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Content {
    #[serde[rename = "@src"]]
    pub src: String,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Text {
    #[serde(rename = "$text")]
    pub text: String,
}

impl Toc {
    pub fn depth(&self) -> usize {
        if let Some(meta) = self.head.metas.iter().find(|m| m.name == "dtb:depth") {
            return meta.content.parse::<usize>().unwrap();
        }
        0
    }
}