preparing structs
This commit is contained in:
parent
9189053bbf
commit
bfdc70c1f0
|
@ -8,11 +8,8 @@ use book::chapter::Chapter;
|
|||
pub struct Book {
|
||||
metadata: BookMetadata,
|
||||
|
||||
//preface: Vec<Chapter>,
|
||||
frontmatter: Vec<Chapter>,
|
||||
//chapters: Vec<Chapter>,
|
||||
mainmatter: Vec<Chapter>,
|
||||
//appendix: Vec<Chapter>,
|
||||
backmatter: Vec<Chapter>,
|
||||
}
|
||||
|
||||
|
|
|
@ -1,24 +1,44 @@
|
|||
use std::path;
|
||||
use std::path::{Path, PathBuf};
|
||||
use book::metadata::Author;
|
||||
|
||||
/// The Chapter struct holds the title of the chapter as written in the SUMMARY.md file,
|
||||
/// the location of the markdown file containing the content and eventually sub-chapters
|
||||
|
||||
/// TODO use in template: author, description, index, class
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Chapter {
|
||||
/// The title of the chapter.
|
||||
title: String,
|
||||
file: path::PathBuf,
|
||||
/// Path to chapter's markdown file.
|
||||
file: PathBuf,
|
||||
|
||||
/// TODO The author of the chapter, or the book.
|
||||
author: Author,
|
||||
/// TODO The description of the chapter.
|
||||
description: String,
|
||||
/// TODO Index number of the chapter in its level. This is the Vec index + 1.
|
||||
index: i32,
|
||||
/// TODO CSS class that will be added to the page-level wrap div to allow customized chapter styles.
|
||||
class: String,
|
||||
|
||||
sub_chapters: Vec<Chapter>,
|
||||
}
|
||||
|
||||
|
||||
impl Chapter {
|
||||
/// Creates a new chapter with the given title and source file and no sub-chapters
|
||||
pub fn new(title: &str, file: &path::Path) -> Self {
|
||||
pub fn new(title: &str, file: &Path) -> Self {
|
||||
Chapter {
|
||||
title: title.to_owned(),
|
||||
file: file.to_owned(),
|
||||
|
||||
sub_chapters: Vec::new(),
|
||||
|
||||
// TODO placeholder values for now
|
||||
author: Author::new(""),
|
||||
description: "".to_string(),
|
||||
index: 0,
|
||||
class: "".to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -42,7 +62,7 @@ impl Chapter {
|
|||
pub fn title(&self) -> &str {
|
||||
&self.title
|
||||
}
|
||||
pub fn file(&self) -> &path::Path {
|
||||
pub fn file(&self) -> &Path {
|
||||
&self.file
|
||||
}
|
||||
pub fn sub_chapters(&self) -> &[Chapter] {
|
||||
|
|
|
@ -1,12 +1,32 @@
|
|||
use std::path::PathBuf;
|
||||
|
||||
/// TODO use in template: subtitle, description, publisher, number_format, section_names
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct BookMetadata {
|
||||
/// The title of the book.
|
||||
pub title: String,
|
||||
|
||||
/// TODO The subtitle, when titles are in the form of "The Immense Journey: An
|
||||
/// Imaginative Naturalist Explores the Mysteries of Man and Nature"
|
||||
pub subtitle: String,
|
||||
|
||||
/// TODO A brief description or summary.
|
||||
pub description: String,
|
||||
|
||||
/// TODO Publisher's info
|
||||
pub publisher: Publisher,
|
||||
|
||||
pub language: Language,
|
||||
|
||||
authors: Vec<Author>,
|
||||
translators: Vec<Author>,
|
||||
|
||||
/// TODO Chapter numbering scheme
|
||||
number_format: NumberFormat,
|
||||
/// TODO Section names for nested Vec<Chapter> structures, such as `[
|
||||
/// "Part", "Chapter", "Section" ]`
|
||||
section_names: Vec<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
|
@ -21,6 +41,38 @@ pub struct Language {
|
|||
code: String,
|
||||
}
|
||||
|
||||
/// TODO use Publisher in template.
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Publisher {
|
||||
name: String,
|
||||
/// link to the sublisher's site
|
||||
url: String,
|
||||
/// path to publisher's logo image
|
||||
logo_src: PathBuf,
|
||||
}
|
||||
|
||||
impl Publisher {
|
||||
pub fn default() -> Publisher {
|
||||
Publisher {
|
||||
name: "".to_string(),
|
||||
url: "".to_string(),
|
||||
logo_src: PathBuf::new(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// TODO use NumberFormat when rendering chapter titles.
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum NumberFormat {
|
||||
/// 19
|
||||
Arabic,
|
||||
/// XIX
|
||||
Roman,
|
||||
/// Nineteen
|
||||
Word,
|
||||
}
|
||||
|
||||
impl BookMetadata {
|
||||
pub fn new(title: &str) -> Self {
|
||||
|
@ -32,6 +84,12 @@ impl BookMetadata {
|
|||
|
||||
authors: Vec::new(),
|
||||
translators: Vec::new(),
|
||||
|
||||
// TODO placeholder values for now
|
||||
subtitle: "".to_string(),
|
||||
publisher: Publisher::default(),
|
||||
number_format: NumberFormat::Arabic,
|
||||
section_names: vec![],
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue