Use Path for fs utils rather than AsRef

This commit is contained in:
Vincent Prouillet 2017-05-16 14:54:50 +09:00
parent be784bbaa3
commit 59b4b07cb3
3 changed files with 17 additions and 21 deletions

View file

@ -16,8 +16,8 @@ base_url = "https://example.com"
"#; "#;
pub fn create_new_project<P: AsRef<Path>>(name: P) -> Result<()> { pub fn create_new_project(name: &str) -> Result<()> {
let path = name.as_ref(); let path = Path::new(name);
// Better error message than the rust default // Better error message than the rust default
if path.exists() && path.is_dir() { if path.exists() && path.is_dir() {
@ -26,7 +26,7 @@ pub fn create_new_project<P: AsRef<Path>>(name: P) -> Result<()> {
// main folder // main folder
create_dir(path)?; create_dir(path)?;
create_file(path.join("config.toml"), CONFIG.trim_left())?; create_file(&path.join("config.toml"), CONFIG.trim_left())?;
// content folder // content folder
create_dir(path.join("content"))?; create_dir(path.join("content"))?;

View file

@ -5,15 +5,14 @@ use std::path::Path;
use errors::{Result, ResultExt}; use errors::{Result, ResultExt};
/// Create a file with the content given /// Create a file with the content given
pub fn create_file<P: AsRef<Path>>(path: P, content: &str) -> Result<()> { pub fn create_file(path: &Path, content: &str) -> Result<()> {
let mut file = File::create(&path)?; let mut file = File::create(&path)?;
file.write_all(content.as_bytes())?; file.write_all(content.as_bytes())?;
Ok(()) Ok(())
} }
/// Create a directory at the given path if it doesn't exist already /// Create a directory at the given path if it doesn't exist already
pub fn ensure_directory_exists<P: AsRef<Path>>(path: P) -> Result<()> { pub fn ensure_directory_exists(path: &Path) -> Result<()> {
let path = path.as_ref();
if !path.exists() { if !path.exists() {
create_directory(&path)?; create_directory(&path)?;
} }
@ -22,8 +21,7 @@ pub fn ensure_directory_exists<P: AsRef<Path>>(path: P) -> Result<()> {
/// Very similar to `create_dir` from the std except it checks if the folder /// Very similar to `create_dir` from the std except it checks if the folder
/// exists before creating it /// exists before creating it
pub fn create_directory<P: AsRef<Path>>(path: P) -> Result<()> { pub fn create_directory(path: &Path) -> Result<()> {
let path = path.as_ref();
if !path.exists() { if !path.exists() {
create_dir(path) create_dir(path)
.chain_err(|| format!("Was not able to create folder {}", path.display()))?; .chain_err(|| format!("Was not able to create folder {}", path.display()))?;
@ -32,9 +30,7 @@ pub fn create_directory<P: AsRef<Path>>(path: P) -> Result<()> {
} }
/// Return the content of a file, with error handling added /// Return the content of a file, with error handling added
pub fn read_file<P: AsRef<Path>>(path: P) -> Result<String> { pub fn read_file(path: &Path) -> Result<String> {
let path = path.as_ref();
let mut content = String::new(); let mut content = String::new();
File::open(path) File::open(path)
.chain_err(|| format!("Failed to open '{:?}'", path.display()))? .chain_err(|| format!("Failed to open '{:?}'", path.display()))?

View file

@ -299,7 +299,7 @@ impl Site {
// Finally, create a index.html file there with the page rendered // Finally, create a index.html file there with the page rendered
let output = page.render_html(&self.tera, &self.config)?; let output = page.render_html(&self.tera, &self.config)?;
create_file(current_path.join("index.html"), &self.inject_livereload(output))?; create_file(&current_path.join("index.html"), &self.inject_livereload(output))?;
// Copy any asset we found previously into the same directory as the index.html // Copy any asset we found previously into the same directory as the index.html
for asset in &page.assets { for asset in &page.assets {
@ -332,7 +332,7 @@ impl Site {
pub fn render_robots(&self) -> Result<()> { pub fn render_robots(&self) -> Result<()> {
ensure_directory_exists(&self.output_path)?; ensure_directory_exists(&self.output_path)?;
create_file( create_file(
self.output_path.join("robots.txt"), &self.output_path.join("robots.txt"),
&self.tera.render("robots.txt", &Context::new())? &self.tera.render("robots.txt", &Context::new())?
) )
} }
@ -361,14 +361,14 @@ impl Site {
let output_path = self.output_path.join(&taxonomy.get_list_name()); let output_path = self.output_path.join(&taxonomy.get_list_name());
let list_output = taxonomy.render_list(&self.tera, &self.config)?; let list_output = taxonomy.render_list(&self.tera, &self.config)?;
create_directory(&output_path)?; create_directory(&output_path)?;
create_file(output_path.join("index.html"), &self.inject_livereload(list_output))?; create_file(&output_path.join("index.html"), &self.inject_livereload(list_output))?;
for item in &taxonomy.items { for item in &taxonomy.items {
let single_output = taxonomy.render_single_item(item, &self.tera, &self.config)?; let single_output = taxonomy.render_single_item(item, &self.tera, &self.config)?;
create_directory(&output_path.join(&item.slug))?; create_directory(&output_path.join(&item.slug))?;
create_file( create_file(
output_path.join(&item.slug).join("index.html"), &output_path.join(&item.slug).join("index.html"),
&self.inject_livereload(single_output) &self.inject_livereload(single_output)
)?; )?;
} }
@ -410,7 +410,7 @@ impl Site {
let sitemap = self.tera.render("sitemap.xml", &context)?; let sitemap = self.tera.render("sitemap.xml", &context)?;
create_file(self.output_path.join("sitemap.xml"), &sitemap)?; create_file(&self.output_path.join("sitemap.xml"), &sitemap)?;
Ok(()) Ok(())
} }
@ -443,7 +443,7 @@ impl Site {
let sitemap = self.tera.render("rss.xml", &context)?; let sitemap = self.tera.render("rss.xml", &context)?;
create_file(self.output_path.join("rss.xml"), &sitemap)?; create_file(&self.output_path.join("rss.xml"), &sitemap)?;
Ok(()) Ok(())
} }
@ -489,7 +489,7 @@ impl Site {
&self.tera, &self.tera,
&self.config, &self.config,
)?; )?;
create_file(output_path.join("index.html"), &self.inject_livereload(output))?; create_file(&output_path.join("index.html"), &self.inject_livereload(output))?;
} }
Ok(()) Ok(())
@ -535,10 +535,10 @@ impl Site {
create_directory(&page_path)?; create_directory(&page_path)?;
let output = paginator.render_pager(pager, self)?; let output = paginator.render_pager(pager, self)?;
if i > 0 { if i > 0 {
create_file(page_path.join("index.html"), &self.inject_livereload(output))?; create_file(&page_path.join("index.html"), &self.inject_livereload(output))?;
} else { } else {
create_file(output_path.join("index.html"), &self.inject_livereload(output))?; create_file(&output_path.join("index.html"), &self.inject_livereload(output))?;
create_file(page_path.join("index.html"), &render_redirect_template(&section.permalink, &self.tera)?)?; create_file(&page_path.join("index.html"), &render_redirect_template(&section.permalink, &self.tera)?)?;
} }
} }