16 releases
0.4.4 | Mar 19, 2023 |
---|---|
0.4.2 | Nov 10, 2021 |
0.3.0-alpha4 | Jul 23, 2021 |
0.1.1 | Jan 17, 2021 |
0.1.0 | Nov 12, 2019 |
#76 in #static-site-generator
Used in 2 crates
26KB
495 lines
shtola
Shtola is a library for generic file processing. It enables you to build your own applications that function as static site generators! Here's an example:
use shtola::{Plugin, RefIR, ShFile, Shtola};
use std::time::SystemTime;
fn plugin() -> Plugin {
Box::new(|mut ir: RefIR| {
// Let's create our file in the IR (intermediate representation) file hash map!
let current_time = SystemTime::now();
ir.files.insert(
"current_time.txt".into(),
ShFile {
content: format!("{:?}", current_time).into(),
..ShFile::default()
},
);
})
}
fn main() {
let mut s = Shtola::new();
s.source("fixtures/empty");
s.destination("fixtures/dest_systemtime");
s.register(plugin());
s.build().expect("Build failed!");
// Now we have a "current_time.txt" file in our destination directory that
// contains the current system time!
}
Installation
Add the latest version of Shtola to your Cargo.toml
.
Documentation
lib.rs
:
With Shtola, you can build your own static site generators easily. All that Shtola itself does is read files and frontmatter, run them through a bunch of user-provided plugins, and write the result back to disk.
As a demonstration of Shtola's basic piping feature, see this example:
use shtola::Shtola;
let mut m = Shtola::new();
m.source("../fixtures/simple");
m.destination("../fixtures/dest/doctest_example");
m.clean(true);
m.build().unwrap();
A "plugin" is just a boxed function that takes a RefMut
to an IR
(intermediate
representation) struct. The plugin may modify the IR freely:
use shtola::{Plugin, ShFile, RefIR};
fn plugin() -> Plugin {
Box::new(|mut ir: RefIR| {
ir.files.insert("myFile".into(), ShFile::empty());
})
}
Dependencies
~5–15MB
~192K SLoC