Skip to content

Commit f0c0d71

Browse files
authored
Merge pull request #177 from azerupi/serde
Switch from rustc_serialize to serde
2 parents 30eb857 + d2f3eb5 commit f0c0d71

File tree

7 files changed

+31
-29
lines changed

7 files changed

+31
-29
lines changed

Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ exclude = [
1616

1717
[dependencies]
1818
clap = "2.2.1"
19-
handlebars = "0.20.0"
20-
rustc-serialize = "0.3.18"
19+
handlebars = { version = "0.20.0", features = ["serde_type"] }
20+
serde = "0.8.17"
21+
serde_json = "0.8.3"
2122
pulldown-cmark = "0.0.8"
2223
log = "0.3"
2324
env_logger = "0.3.4"

src/book/bookconfig.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use rustc_serialize::json::Json;
1+
use serde_json;
22
use std::fs::File;
33
use std::io::Read;
44
use std::path::{Path, PathBuf};
@@ -53,23 +53,25 @@ impl BookConfig {
5353
}
5454

5555
// Convert to JSON
56-
if let Ok(config) = Json::from_str(&data) {
56+
if let Ok(config) = serde_json::from_str::<serde_json::Value>(&data) {
5757
// Extract data
5858

59+
let config = config.as_object().unwrap();
60+
5961
debug!("[*]: Extracting data from config");
6062
// Title, author, description
61-
if let Some(a) = config.find_path(&["title"]) {
63+
if let Some(a) = config.get("title") {
6264
self.title = a.to_string().replace("\"", "")
6365
}
64-
if let Some(a) = config.find_path(&["author"]) {
66+
if let Some(a) = config.get("author") {
6567
self.author = a.to_string().replace("\"", "")
6668
}
67-
if let Some(a) = config.find_path(&["description"]) {
69+
if let Some(a) = config.get("description") {
6870
self.description = a.to_string().replace("\"", "")
6971
}
7072

7173
// Destination
72-
if let Some(a) = config.find_path(&["dest"]) {
74+
if let Some(a) = config.get("dest") {
7375
let dest = PathBuf::from(&a.to_string().replace("\"", ""));
7476

7577
// If path is relative make it absolute from the parent directory of src

src/book/bookitem.rs

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
use rustc_serialize::json::{Json, ToJson};
1+
use serde::{Serialize, Serializer};
22
use std::path::PathBuf;
3-
use std::collections::BTreeMap;
43

54
#[derive(Debug, Clone)]
65
pub enum BookItem {
@@ -36,16 +35,12 @@ impl Chapter {
3635
}
3736

3837

39-
impl ToJson for Chapter {
40-
fn to_json(&self) -> Json {
41-
let mut m: BTreeMap<String, Json> = BTreeMap::new();
42-
m.insert("name".to_owned(), self.name.to_json());
43-
m.insert("path".to_owned(),
44-
self.path
45-
.to_str()
46-
.expect("Json conversion failed for path")
47-
.to_json());
48-
m.to_json()
38+
impl Serialize for Chapter {
39+
fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error> where S: Serializer {
40+
let mut state = try!(serializer.serialize_struct("Chapter", 2));
41+
try!(serializer.serialize_struct_elt(&mut state, "name", self.name.clone()));
42+
try!(serializer.serialize_struct_elt(&mut state, "path", self.path.clone()));
43+
serializer.serialize_struct_end(state)
4944
}
5045
}
5146

src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@
6969
//!
7070
//! Make sure to take a look at it.
7171
72-
extern crate rustc_serialize;
72+
extern crate serde;
73+
extern crate serde_json;
7374
extern crate handlebars;
7475
extern crate pulldown_cmark;
7576

src/renderer/html_handlebars/hbs_renderer.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ use std::io::{self, Read, Write};
1111
use std::collections::BTreeMap;
1212

1313
use handlebars::Handlebars;
14-
use rustc_serialize::json::{Json, ToJson};
14+
15+
use serde_json;
16+
use serde_json::value::ToJson;
1517

1618

1719
pub struct HtmlHandlebars;
@@ -276,10 +278,10 @@ impl Renderer for HtmlHandlebars {
276278
}
277279
}
278280

279-
fn make_data(book: &MDBook) -> Result<BTreeMap<String, Json>, Box<Error>> {
281+
fn make_data(book: &MDBook) -> Result<serde_json::Map<String, serde_json::Value>, Box<Error>> {
280282
debug!("[fn]: make_data");
281283

282-
let mut data = BTreeMap::new();
284+
let mut data = serde_json::Map::new();
283285
data.insert("language".to_owned(), "en".to_json());
284286
data.insert("title".to_owned(), book.get_title().to_json());
285287
data.insert("description".to_owned(), book.get_description().to_json());

src/renderer/html_handlebars/helpers/navigation.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
use std::path::Path;
22
use std::collections::BTreeMap;
33

4-
use rustc_serialize::json::{self, ToJson};
4+
use serde_json;
5+
use serde_json::value::ToJson;
56
use handlebars::{Handlebars, RenderError, RenderContext, Helper, Context, Renderable};
67

78
// Handlebars helper for navigation
@@ -22,7 +23,7 @@ pub fn previous(c: &Context, _h: &Helper, r: &Handlebars, rc: &mut RenderContext
2223

2324
debug!("[*]: Decode chapters from JSON");
2425
// Decode json format
25-
let decoded: Vec<BTreeMap<String, String>> = match json::decode(&chapters.to_string()) {
26+
let decoded: Vec<BTreeMap<String, String>> = match serde_json::from_str(&chapters.to_string()) {
2627
Ok(data) => data,
2728
Err(_) => return Err(RenderError::new("Could not decode the JSON data")),
2829
};
@@ -121,7 +122,7 @@ pub fn next(c: &Context, _h: &Helper, r: &Handlebars, rc: &mut RenderContext) ->
121122

122123
debug!("[*]: Decode chapters from JSON");
123124
// Decode json format
124-
let decoded: Vec<BTreeMap<String, String>> = match json::decode(&chapters.to_string()) {
125+
let decoded: Vec<BTreeMap<String, String>> = match serde_json::from_str(&chapters.to_string()) {
125126
Ok(data) => data,
126127
Err(_) => return Err(RenderError::new("Could not decode the JSON data")),
127128
};

src/renderer/html_handlebars/helpers/toc.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::path::Path;
22
use std::collections::BTreeMap;
33

4-
use rustc_serialize::json;
4+
use serde_json;
55
use handlebars::{Handlebars, HelperDef, RenderError, RenderContext, Helper, Context};
66
use pulldown_cmark::{Parser, html, Event, Tag};
77

@@ -20,7 +20,7 @@ impl HelperDef for RenderToc {
2020
try!(rc.writer.write("<ul class=\"chapter\">".as_bytes()));
2121

2222
// Decode json format
23-
let decoded: Vec<BTreeMap<String, String>> = json::decode(&chapters.to_string()).unwrap();
23+
let decoded: Vec<BTreeMap<String, String>> = serde_json::from_str(&chapters.to_string()).unwrap();
2424

2525
let mut current_level = 1;
2626

0 commit comments

Comments
 (0)