Started to implement init

This commit is contained in:
Mathieu David 2015-07-07 02:56:19 +02:00
parent b94304405a
commit a27bc498eb
4 changed files with 92 additions and 3 deletions

2
.gitignore vendored
View file

@ -1,2 +1,4 @@
target
Cargo.lock
book-test

View file

@ -1,3 +1,3 @@
#[test]
fn it_works() {
}
pub mod mdbook;
pub use mdbook::MDBook;

View file

@ -2,6 +2,7 @@ extern crate mdbook;
extern crate getopts;
use std::env;
use mdbook::MDBook;
const NAME: &'static str = "mdbook";
const VERSION: &'static str = "0.0.1";
@ -108,7 +109,14 @@ fn init(args: Vec<String>) {
if matches.opt_present("help") {
println!("{}", usage);
return;
}
let dir = std::env::current_dir().unwrap();
let book = MDBook::new();
book.init(&dir);
}
fn build(args: Vec<String>) {

79
src/mdbook.rs Normal file
View file

@ -0,0 +1,79 @@
use std::path::PathBuf;
use std::fs::{self, File, metadata};
pub struct MDBook {
dest: PathBuf,
src: PathBuf,
}
impl MDBook {
pub fn new() -> Self {
MDBook {
dest: PathBuf::from("book"),
src: PathBuf::from("src"),
}
}
pub fn init(&self, dir: &PathBuf) -> Result<(),&str> {
// Hacky way to check if the directory exists... Until PathExt moves to stable
match metadata(dir) {
Err(_) => return Err("Destination path does not exist"),
_ => {}
}
let dest = if self.dest.is_relative() {
dir.join(&self.dest)
} else {
self.dest.clone()
};
let src = if self.src.is_relative() {
dir.join(&self.src)
} else {
self.src.clone()
};
// Hacky way to check if the directory exists... Until PathExt moves to stable
match metadata(&dest) {
Err(_) => {
// There is a very high chance that the error is due to the fact that
// the directory / file does not exist
fs::create_dir(&dest).unwrap();
},
Ok(_) => { /* If there is no error, the directory / file does exist */ }
}
// Hacky way to check if the directory exists... Until PathExt moves to stable
match metadata(&src) {
Err(_) => {
// There is a very high chance that the error is due to the fact that
// the directory / file does not exist
fs::create_dir(&src).unwrap();
},
Ok(_) => { /* If there is no error, the directory / file does exist */ }
}
// Hacky way to check if the directory exists... Until PathExt moves to stable
match metadata(dir.join("src/SUMMARY.md")) {
Err(_) => {
// There is a very high chance that the error is due to the fact that
// the directory / file does not exist
File::create("src/SUMMARY.md").unwrap();
},
Ok(_) => { /* If there is no error, the directory / file does exist */ }
}
return Ok(());
}
pub fn set_dest(mut self, dest: PathBuf) -> Self {
self.dest = dest;
self
}
pub fn set_src(mut self, src: PathBuf) -> Self {
self.src = src;
self
}
}