Add structs holding metadata for the books

This commit is contained in:
Mathieu David 2016-06-28 16:38:12 +02:00
parent 0c624d0f74
commit b7eae012c9
1 changed files with 71 additions and 0 deletions

71
src/book/metadata.rs Normal file
View File

@ -0,0 +1,71 @@
#[derive(Debug, Clone)]
pub struct BookMetadata {
pub title: String,
pub description: String,
pub language: Language,
authors: Vec<Author>,
translators: Vec<Author>,
}
#[derive(Debug, Clone)]
pub struct Author {
name: String,
email: Option<String>,
}
#[derive(Debug, Clone)]
pub struct Language {
name: String,
code: String,
}
impl BookMetadata {
pub fn new(title: &str) -> Self {
BookMetadata {
title: title.to_owned(),
description: String::new(),
language: Language::default(),
authors: Vec::new(),
translators: Vec::new(),
}
}
pub fn set_description(&mut self, description: &str) -> &mut Self {
self.description = description.to_owned();
self
}
pub fn add_author(&mut self, author: Author) -> &mut Self {
self.authors.push(author);
self
}
}
impl Author {
pub fn new(name: &str) -> Self {
Author {
name: name.to_owned(),
email: None,
}
}
pub fn with_email(mut self, email: &str) -> Self {
self.email = Some(email.to_owned());
self
}
}
impl Default for Language {
fn default() -> Self {
Language {
name: String::from("English"),
code: String::from("en"),
}
}
}