Switch from rustc_serialize to serde. Closes #18

This commit is contained in:
Mathieu David 2016-11-03 01:58:42 +01:00
parent 30eb85711e
commit 67aee5c192
7 changed files with 33 additions and 28 deletions

View File

@ -16,8 +16,9 @@ exclude = [
[dependencies] [dependencies]
clap = "2.2.1" clap = "2.2.1"
handlebars = "0.20.0" handlebars = { version = "0.20.0", features = ["serde_type"] }
rustc-serialize = "0.3.18" serde = "0.8.17"
serde_json = "0.8.3"
pulldown-cmark = "0.0.8" pulldown-cmark = "0.0.8"
log = "0.3" log = "0.3"
env_logger = "0.3.4" env_logger = "0.3.4"

View File

@ -1,4 +1,5 @@
use rustc_serialize::json::Json; use serde_json;
use serde_json::Value;
use std::fs::File; use std::fs::File;
use std::io::Read; use std::io::Read;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
@ -53,23 +54,25 @@ impl BookConfig {
} }
// Convert to JSON // Convert to JSON
if let Ok(config) = Json::from_str(&data) { if let Ok(config) = serde_json::from_str::<serde_json::Value>(&data) {
// Extract data // Extract data
let config = config.as_object().unwrap();
debug!("[*]: Extracting data from config"); debug!("[*]: Extracting data from config");
// Title, author, description // Title, author, description
if let Some(a) = config.find_path(&["title"]) { if let Some(a) = config.get("title") {
self.title = a.to_string().replace("\"", "") self.title = a.to_string().replace("\"", "")
} }
if let Some(a) = config.find_path(&["author"]) { if let Some(a) = config.get("author") {
self.author = a.to_string().replace("\"", "") self.author = a.to_string().replace("\"", "")
} }
if let Some(a) = config.find_path(&["description"]) { if let Some(a) = config.get("description") {
self.description = a.to_string().replace("\"", "") self.description = a.to_string().replace("\"", "")
} }
// Destination // Destination
if let Some(a) = config.find_path(&["dest"]) { if let Some(a) = config.get("dest") {
let dest = PathBuf::from(&a.to_string().replace("\"", "")); let dest = PathBuf::from(&a.to_string().replace("\"", ""));
// If path is relative make it absolute from the parent directory of src // If path is relative make it absolute from the parent directory of src

View File

@ -1,4 +1,4 @@
use rustc_serialize::json::{Json, ToJson}; use serde::{Serialize, Serializer};
use std::path::PathBuf; use std::path::PathBuf;
use std::collections::BTreeMap; use std::collections::BTreeMap;
@ -36,16 +36,12 @@ impl Chapter {
} }
impl ToJson for Chapter { impl Serialize for Chapter {
fn to_json(&self) -> Json { fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error> where S: Serializer {
let mut m: BTreeMap<String, Json> = BTreeMap::new(); let mut state = try!(serializer.serialize_struct("Chapter", 2));
m.insert("name".to_owned(), self.name.to_json()); try!(serializer.serialize_struct_elt(&mut state, "name", self.name.clone()));
m.insert("path".to_owned(), try!(serializer.serialize_struct_elt(&mut state, "path", self.path.clone()));
self.path serializer.serialize_struct_end(state)
.to_str()
.expect("Json conversion failed for path")
.to_json());
m.to_json()
} }
} }

View File

@ -69,7 +69,8 @@
//! //!
//! Make sure to take a look at it. //! Make sure to take a look at it.
extern crate rustc_serialize; extern crate serde;
extern crate serde_json;
extern crate handlebars; extern crate handlebars;
extern crate pulldown_cmark; extern crate pulldown_cmark;

View File

@ -11,7 +11,10 @@ use std::io::{self, Read, Write};
use std::collections::BTreeMap; use std::collections::BTreeMap;
use handlebars::Handlebars; use handlebars::Handlebars;
use rustc_serialize::json::{Json, ToJson};
use serde::Serialize;
use serde_json;
use serde_json::value::ToJson;
pub struct HtmlHandlebars; pub struct HtmlHandlebars;
@ -276,10 +279,10 @@ impl Renderer for HtmlHandlebars {
} }
} }
fn make_data(book: &MDBook) -> Result<BTreeMap<String, Json>, Box<Error>> { fn make_data(book: &MDBook) -> Result<serde_json::Map<String, serde_json::Value>, Box<Error>> {
debug!("[fn]: make_data"); debug!("[fn]: make_data");
let mut data = BTreeMap::new(); let mut data = serde_json::Map::new();
data.insert("language".to_owned(), "en".to_json()); data.insert("language".to_owned(), "en".to_json());
data.insert("title".to_owned(), book.get_title().to_json()); data.insert("title".to_owned(), book.get_title().to_json());
data.insert("description".to_owned(), book.get_description().to_json()); data.insert("description".to_owned(), book.get_description().to_json());

View File

@ -1,7 +1,8 @@
use std::path::Path; use std::path::Path;
use std::collections::BTreeMap; use std::collections::BTreeMap;
use rustc_serialize::json::{self, ToJson}; use serde_json;
use serde_json::value::ToJson;
use handlebars::{Handlebars, RenderError, RenderContext, Helper, Context, Renderable}; use handlebars::{Handlebars, RenderError, RenderContext, Helper, Context, Renderable};
// Handlebars helper for navigation // Handlebars helper for navigation
@ -22,7 +23,7 @@ pub fn previous(c: &Context, _h: &Helper, r: &Handlebars, rc: &mut RenderContext
debug!("[*]: Decode chapters from JSON"); debug!("[*]: Decode chapters from JSON");
// Decode json format // Decode json format
let decoded: Vec<BTreeMap<String, String>> = match json::decode(&chapters.to_string()) { let decoded: Vec<BTreeMap<String, String>> = match serde_json::from_str(&chapters.to_string()) {
Ok(data) => data, Ok(data) => data,
Err(_) => return Err(RenderError::new("Could not decode the JSON data")), Err(_) => return Err(RenderError::new("Could not decode the JSON data")),
}; };
@ -121,7 +122,7 @@ pub fn next(c: &Context, _h: &Helper, r: &Handlebars, rc: &mut RenderContext) ->
debug!("[*]: Decode chapters from JSON"); debug!("[*]: Decode chapters from JSON");
// Decode json format // Decode json format
let decoded: Vec<BTreeMap<String, String>> = match json::decode(&chapters.to_string()) { let decoded: Vec<BTreeMap<String, String>> = match serde_json::from_str(&chapters.to_string()) {
Ok(data) => data, Ok(data) => data,
Err(_) => return Err(RenderError::new("Could not decode the JSON data")), Err(_) => return Err(RenderError::new("Could not decode the JSON data")),
}; };

View File

@ -1,7 +1,7 @@
use std::path::Path; use std::path::Path;
use std::collections::BTreeMap; use std::collections::BTreeMap;
use rustc_serialize::json; use serde_json;
use handlebars::{Handlebars, HelperDef, RenderError, RenderContext, Helper, Context}; use handlebars::{Handlebars, HelperDef, RenderError, RenderContext, Helper, Context};
use pulldown_cmark::{Parser, html, Event, Tag}; use pulldown_cmark::{Parser, html, Event, Tag};
@ -20,7 +20,7 @@ impl HelperDef for RenderToc {
try!(rc.writer.write("<ul class=\"chapter\">".as_bytes())); try!(rc.writer.write("<ul class=\"chapter\">".as_bytes()));
// Decode json format // Decode json format
let decoded: Vec<BTreeMap<String, String>> = json::decode(&chapters.to_string()).unwrap(); let decoded: Vec<BTreeMap<String, String>> = serde_json::from_str(&chapters.to_string()).unwrap();
let mut current_level = 1; let mut current_level = 1;