diff --git a/CHANGELOG.md b/CHANGELOG.md index 9836a11..17ac92e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,13 @@ The format is based on project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +* Breaking change: Make most methods of `StaticFiles` return + `Result<&mut Self>`, to support method chaining, making typical + build scripts nicer (PR #115). + + ## Release 0.14.2 - 2022-08-20 * Improve error reporting. The debug output for `RucteError` is now the diff --git a/Cargo.toml b/Cargo.toml index 2716f25..a5d3e05 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ructe" -version = "0.14.2" +version = "0.15.0-PRE" authors = ["Rasmus Kaj "] description = "Rust Compiled Templates, efficient type-safe web page templates." documentation = "https://docs.rs/ructe" diff --git a/examples/actix/src/build.rs b/examples/actix/src/build.rs index 8459c38..7dd41fb 100644 --- a/examples/actix/src/build.rs +++ b/examples/actix/src/build.rs @@ -4,8 +4,9 @@ use ructe::{Ructe, RucteError}; fn main() -> Result<(), RucteError> { let mut ructe = Ructe::from_env()?; - let mut statics = ructe.statics()?; - statics.add_files("statics")?; - statics.add_sass_file("style.scss")?; + ructe + .statics()? + .add_files("statics")? + .add_sass_file("style.scss")?; ructe.compile_templates("templates") } diff --git a/examples/gotham/src/build.rs b/examples/gotham/src/build.rs index b75fbb3..2b95a23 100644 --- a/examples/gotham/src/build.rs +++ b/examples/gotham/src/build.rs @@ -4,8 +4,9 @@ use ructe::{Result, Ructe}; fn main() -> Result<()> { let mut ructe = Ructe::from_env()?; - let mut statics = ructe.statics()?; - statics.add_files("statics")?; - statics.add_sass_file("style.scss")?; + ructe + .statics()? + .add_files("statics")? + .add_sass_file("style.scss")?; ructe.compile_templates("templates") } diff --git a/examples/iron/src/build.rs b/examples/iron/src/build.rs index 131ccbb..7157fbf 100644 --- a/examples/iron/src/build.rs +++ b/examples/iron/src/build.rs @@ -5,8 +5,9 @@ use ructe::{Result, Ructe}; fn main() -> Result<()> { let mut ructe = Ructe::from_env()?; - let mut statics = ructe.statics()?; - statics.add_files("statics")?; - statics.add_sass_file("style.scss")?; + ructe + .statics()? + .add_files("statics")? + .add_sass_file("style.scss")?; ructe.compile_templates("templates") } diff --git a/examples/nickel/src/build.rs b/examples/nickel/src/build.rs index a85737d..1de6f34 100644 --- a/examples/nickel/src/build.rs +++ b/examples/nickel/src/build.rs @@ -6,8 +6,9 @@ use ructe::{Result, Ructe}; fn main() -> Result<()> { let mut ructe = Ructe::from_env()?; - let mut statics = ructe.statics()?; - statics.add_files("statics")?; - statics.add_sass_file("style.scss")?; + ructe + .statics()? + .add_files("statics")? + .add_sass_file("style.scss")?; ructe.compile_templates("templates") } diff --git a/examples/static-sass/src/build.rs b/examples/static-sass/src/build.rs index f31b8fd..4b0fa56 100644 --- a/examples/static-sass/src/build.rs +++ b/examples/static-sass/src/build.rs @@ -2,9 +2,9 @@ use ructe::{Ructe, RucteError}; fn main() -> Result<(), RucteError> { let mut ructe = Ructe::from_env()?; - let mut statics = ructe.statics()?; - statics.add_files("static")?; - statics.add_sass_file("scss/style.scss")?; - + ructe + .statics()? + .add_files("static")? + .add_sass_file("scss/style.scss")?; ructe.compile_templates("templates") } diff --git a/examples/tide/src/build.rs b/examples/tide/src/build.rs index 530c625..1b6ae29 100644 --- a/examples/tide/src/build.rs +++ b/examples/tide/src/build.rs @@ -5,8 +5,9 @@ use ructe::{Ructe, RucteError}; fn main() -> Result<(), RucteError> { let mut ructe = Ructe::from_env()?; - let mut statics = ructe.statics()?; - statics.add_files("statics")?; - statics.add_sass_file("style.scss")?; + ructe + .statics()? + .add_files("statics")? + .add_sass_file("style.scss")?; ructe.compile_templates("templates") } diff --git a/examples/warp03/src/build.rs b/examples/warp03/src/build.rs index 8459c38..7dd41fb 100644 --- a/examples/warp03/src/build.rs +++ b/examples/warp03/src/build.rs @@ -4,8 +4,9 @@ use ructe::{Ructe, RucteError}; fn main() -> Result<(), RucteError> { let mut ructe = Ructe::from_env()?; - let mut statics = ructe.statics()?; - statics.add_files("statics")?; - statics.add_sass_file("style.scss")?; + ructe + .statics()? + .add_files("statics")? + .add_sass_file("style.scss")?; ructe.compile_templates("templates") } diff --git a/src/lib.rs b/src/lib.rs index dbdd1a6..a8338ff 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -299,7 +299,8 @@ impl Ructe { /// # use ructe::{Ructe, RucteError}; /// # fn main() -> Result<(), RucteError> { /// let mut ructe = Ructe::from_env()?; - /// ructe.statics()?.add_files("static") + /// ructe.statics()?.add_files("static")?; + /// Ok(()) /// # } /// ``` /// diff --git a/src/staticfiles.rs b/src/staticfiles.rs index e09e200..002bd00 100644 --- a/src/staticfiles.rs +++ b/src/staticfiles.rs @@ -4,7 +4,7 @@ use std::ascii::escape_default; use std::collections::BTreeMap; use std::fmt::{self, Display}; use std::fs::{read_dir, File}; -use std::io::{self, Read, Write}; +use std::io::{Read, Write}; use std::path::{Path, PathBuf}; /// Handler for static files. @@ -285,7 +285,10 @@ impl StaticFile { } /// Add all files from a specific directory, `indir`, as static files. - pub fn add_files(&mut self, indir: impl AsRef) -> Result<()> { + pub fn add_files( + &mut self, + indir: impl AsRef, + ) -> Result<&mut Self> { let indir = self.path_for(indir); println!("cargo:rerun-if-changed={}", indir.display()); for entry in read_dir(indir)? { @@ -294,7 +297,7 @@ impl StaticFile { self.add_file(&entry.path())?; } } - Ok(()) + Ok(self) } /// Add all files from a specific directory, `indir`, as static files. @@ -318,7 +321,7 @@ impl StaticFile { &mut self, indir: impl AsRef, to: &str, - ) -> Result<()> { + ) -> Result<&mut Self> { for entry in read_dir(self.path_for(indir))? { let entry = entry?; let file_type = entry.file_type()?; @@ -333,7 +336,7 @@ impl StaticFile { self.add_files_as(&entry.path(), &to)?; } } - Ok(()) + Ok(self) } /// Add one specific file as a static file. @@ -342,7 +345,7 @@ impl StaticFile { /// name and ext are the name and extension from `path` and has is /// a few url-friendly bytes from a hash of the file content. /// - pub fn add_file(&mut self, path: impl AsRef) -> io::Result<()> { + pub fn add_file(&mut self, path: impl AsRef) -> Result<&mut Self> { let path = self.path_for(path); if let Some((name, ext)) = name_and_ext(&path) { println!("cargo:rerun-if-changed={}", path.display()); @@ -360,7 +363,7 @@ impl StaticFile { ext, )?; } - Ok(()) + Ok(self) } /// Add one specific file as a static file. @@ -370,12 +373,12 @@ impl StaticFile { &mut self, path: impl AsRef, url_name: &str, - ) -> io::Result<()> { + ) -> Result<&mut Self> { let path = &self.path_for(path); let ext = name_and_ext(path).map_or("", |(_, e)| e); println!("cargo:rerun-if-changed={}", path.display()); self.add_static(path, url_name, url_name, &FileContent(path), ext)?; - Ok(()) + Ok(self) } /// Add a resource by its name and content, without reading an actual file. @@ -418,7 +421,11 @@ impl StaticFile { /// # } /// assert_eq!(statics::black_css.name, "black-r3rltVhW.css"); /// ```` - pub fn add_file_data

(&mut self, path: P, data: &[u8]) -> Result<()> + pub fn add_file_data

( + &mut self, + path: P, + data: &[u8], + ) -> Result<&mut Self> where P: AsRef, { @@ -435,7 +442,7 @@ impl StaticFile { ext, )?; } - Ok(()) + Ok(self) } /// Compile a sass file and add the resulting css. @@ -448,7 +455,7 @@ impl StaticFile { /// This method is only available when ructe is built with the /// "sass" feature. #[cfg(feature = "sass")] - pub fn add_sass_file

(&mut self, src: P) -> Result<()> + pub fn add_sass_file

(&mut self, src: P) -> Result<&mut Self> where P: AsRef, { @@ -516,7 +523,7 @@ impl StaticFile { url_name: &str, content: &impl Display, suffix: &str, - ) -> io::Result<()> { + ) -> Result<&mut Self> { let rust_name = rust_name .replace('/', "_") .replace('-', "_") @@ -538,7 +545,7 @@ impl StaticFile { )?; self.names.insert(rust_name.clone(), url_name.into()); self.names_r.insert(url_name.into(), rust_name); - Ok(()) + Ok(self) } /// Get a mapping of names, from without hash to with.