Skip to content

Commit d6ea45c

Browse files
committed
Use eyre for error handling
`Box<dyn Error>` is not `Send`, which makes it harder to parallelize the rendering of the blog posts. `eyre::Report` fortunately does not have this problem.
1 parent 2b37a2d commit d6ea45c

File tree

6 files changed

+33
-15
lines changed

6 files changed

+33
-15
lines changed

Cargo.lock

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ name = "blog"
99
path = "src/blog.rs"
1010

1111
[dependencies]
12+
eyre = "0.6.8"
1213
handlebars = { version = "3", features = ["dir_source"] }
1314
lazy_static = "1.4.0"
1415
serde = "1.0"

src/blog.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::error::Error;
33
#[path = "lib.rs"]
44
mod lib;
55

6-
pub fn main() -> Result<(), Box<dyn Error>> {
6+
pub fn main() -> eyre::Result<()> {
77
lib::main()?;
88

99
println!("blog has been generated; you can now serve its content by running\n\

src/blogs.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ pub(crate) struct Blog {
4646
}
4747

4848
impl Blog {
49-
fn load(prefix: PathBuf, dir: &Path) -> Result<Self, Box<dyn Error>> {
49+
fn load(prefix: PathBuf, dir: &Path) -> eyre::Result<Self> {
5050
let manifest_content = std::fs::read_to_string(dir.join(MANIFEST_FILE))?;
5151
let manifest: Manifest = serde_yaml::from_str(&manifest_content)?;
5252

@@ -122,7 +122,7 @@ impl Blog {
122122

123123
/// Recursively load blogs in a directory. A blog is a directory with a `blog.yml`
124124
/// file inside it.
125-
pub(crate) fn load(base: &Path) -> Result<Vec<Blog>, Box<dyn Error>> {
125+
pub(crate) fn load(base: &Path) -> eyre::Result<Vec<Blog>> {
126126
let mut blogs = Vec::new();
127127
load_recursive(base, base, &mut blogs)?;
128128
Ok(blogs)
@@ -132,7 +132,7 @@ fn load_recursive(
132132
base: &Path,
133133
current: &Path,
134134
blogs: &mut Vec<Blog>,
135-
) -> Result<(), Box<dyn Error>> {
135+
) -> eyre::Result<()> {
136136
for entry in std::fs::read_dir(current)? {
137137
let path = entry?.path();
138138
let file_type = path.metadata()?.file_type();

src/lib.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ impl<'a> Generator<'a> {
5151
fn new(
5252
out_directory: impl AsRef<Path>,
5353
posts_directory: impl AsRef<Path>,
54-
) -> Result<Self, Box<dyn Error>> {
54+
) -> eyre::Result<Self> {
5555
let mut handlebars = Handlebars::new();
5656
handlebars.set_strict_mode(true);
5757
handlebars.register_templates_directory(".hbs", "templates")?;
@@ -80,7 +80,7 @@ impl<'a> Generator<'a> {
8080
.replace(std::path::MAIN_SEPARATOR, "/")
8181
}
8282

83-
fn render(&self) -> Result<(), Box<dyn Error>> {
83+
fn render(&self) -> eyre::Result<()> {
8484
// make sure our output directory exists
8585
fs::create_dir_all(&self.out_directory)?;
8686

@@ -116,7 +116,7 @@ impl<'a> Generator<'a> {
116116
fs::write("./static/styles/vendor.css", &concatted).expect("couldn't write vendor css");
117117
}
118118

119-
fn render_blog(&self, blog: &Blog) -> Result<(), Box<dyn Error>> {
119+
fn render_blog(&self, blog: &Blog) -> eyre::Result<()> {
120120
std::fs::create_dir_all(self.out_directory.join(blog.prefix()))?;
121121

122122
let path = self.render_index(blog)?;
@@ -136,7 +136,7 @@ impl<'a> Generator<'a> {
136136
Ok(())
137137
}
138138

139-
fn render_index(&self, blog: &Blog) -> Result<PathBuf, Box<dyn Error>> {
139+
fn render_index(&self, blog: &Blog) -> eyre::Result<PathBuf> {
140140
let other_blogs: Vec<_> = self
141141
.blogs
142142
.iter()
@@ -161,7 +161,7 @@ impl<'a> Generator<'a> {
161161
Ok(path)
162162
}
163163

164-
fn render_post(&self, blog: &Blog, post: &Post) -> Result<PathBuf, Box<dyn Error>> {
164+
fn render_post(&self, blog: &Blog, post: &Post) -> eyre::Result<PathBuf> {
165165
let path = blog
166166
.prefix()
167167
.join(format!("{:04}", &post.year))
@@ -186,7 +186,7 @@ impl<'a> Generator<'a> {
186186
Ok(path)
187187
}
188188

189-
fn render_feed(&self, blog: &Blog) -> Result<(), Box<dyn Error>> {
189+
fn render_feed(&self, blog: &Blog) -> eyre::Result<()> {
190190
let posts: Vec<_> = blog.posts().iter().take(10).collect();
191191
let data = json!({
192192
"blog": blog,
@@ -198,7 +198,7 @@ impl<'a> Generator<'a> {
198198
Ok(())
199199
}
200200

201-
fn render_releases_feed(&self, blog: &Blog) -> Result<(), Box<dyn Error>> {
201+
fn render_releases_feed(&self, blog: &Blog) -> eyre::Result<()> {
202202
let posts = blog.posts().iter().cloned().collect::<Vec<_>>();
203203
let is_released: Vec<&Post> = posts.iter().filter(|post| post.release).collect();
204204
let releases: Vec<ReleasePost> = is_released
@@ -223,7 +223,7 @@ impl<'a> Generator<'a> {
223223
Ok(())
224224
}
225225

226-
fn copy_static_files(&self) -> Result<(), Box<dyn Error>> {
226+
fn copy_static_files(&self) -> eyre::Result<()> {
227227
copy_dir("static/fonts", &self.out_directory)?;
228228
copy_dir("static/images", &self.out_directory)?;
229229
copy_dir("static/styles", &self.out_directory)?;
@@ -236,7 +236,7 @@ impl<'a> Generator<'a> {
236236
name: impl AsRef<Path>,
237237
template: &str,
238238
data: serde_json::Value,
239-
) -> Result<(), Box<dyn Error>> {
239+
) -> eyre::Result<()> {
240240
let out_file = self.out_directory.join(name.as_ref());
241241
let file = File::create(out_file)?;
242242
self.handlebars.render_to_write(template, &data, file)?;
@@ -264,7 +264,7 @@ fn copy_dir(source: impl AsRef<Path>, dest: impl AsRef<Path>) -> Result<(), io::
264264
copy_inner(source, &dest)
265265
}
266266

267-
pub fn main() -> Result<(), Box<dyn Error>> {
267+
pub fn main() -> eyre::Result<()> {
268268
let blog = Generator::new("site", "posts")?;
269269

270270
blog.render()?;

src/posts.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ pub(crate) struct Post {
3636
}
3737

3838
impl Post {
39-
pub(crate) fn open(path: &Path, manifest: &Manifest) -> Result<Self, Box<dyn Error>> {
39+
pub(crate) fn open(path: &Path, manifest: &Manifest) -> eyre::Result<Self> {
4040
// yeah this might blow up, but it won't
4141
let filename = path.file_name().unwrap().to_str().unwrap();
4242

0 commit comments

Comments
 (0)