♻️ Major code restructuring
This commit is contained in:
parent
a96e203bb3
commit
fa66d628a0
221 changed files with 228 additions and 315 deletions
101
helpers/pagetop-build/src/lib.rs
Normal file
101
helpers/pagetop-build/src/lib.rs
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
//! This function uses the [static_files](https://docs.rs/static-files/latest/static_files/) library
|
||||
//! to embed at compile time a bundle of static files in your binary.
|
||||
//!
|
||||
//! Just create folder with static resources in your project (for example `static`):
|
||||
//!
|
||||
//! ```bash
|
||||
//! cd project_dir
|
||||
//! mkdir static
|
||||
//! echo "Hello, world!" > static/hello
|
||||
//! ```
|
||||
//!
|
||||
//! Add to `Cargo.toml` the required dependencies:
|
||||
//!
|
||||
//! ```toml
|
||||
//! [build-dependencies]
|
||||
//! pagetop-build = { ... }
|
||||
//! ```
|
||||
//!
|
||||
//! Add `build.rs` with call to bundle resources (*guides* will be the magic word in this example):
|
||||
//!
|
||||
//! ```rust#ignore
|
||||
//! use pagetop_build::StaticFilesBundle;
|
||||
//!
|
||||
//! fn main() -> std::io::Result<()> {
|
||||
//! StaticFilesBundle::from_dir("./static")
|
||||
//! .with_name("guides")
|
||||
//! .build()
|
||||
//! }
|
||||
//! ```
|
||||
//!
|
||||
//! Optionally, you can pass a function to filter those files into the `./static` folder which
|
||||
//! should be excluded in the resources bundle:
|
||||
//!
|
||||
//! ```rust#ignore
|
||||
//! use pagetop_build::StaticFilesBundle;
|
||||
//!
|
||||
//! fn main() -> std::io::Result<()> {
|
||||
//! StaticFilesBundle::from_dir("./static")
|
||||
//! .with_name("guides")
|
||||
//! .with_filter(except_css_dir)
|
||||
//! .build()
|
||||
//! }
|
||||
//!
|
||||
//! fn except_css_dir(p: &Path) -> bool {
|
||||
//! if let Some(parent) = p.parent() {
|
||||
//! !matches!(parent.to_str(), Some("/css"))
|
||||
//! }
|
||||
//! true
|
||||
//! }
|
||||
//! ```
|
||||
//!
|
||||
//! This will create a file called `guides.rs` in the standard directory
|
||||
//! [OUT_DIR](https://doc.rust-lang.org/cargo/reference/environment-variables.html) where all
|
||||
//! intermediate and output artifacts are placed during compilation.
|
||||
//!
|
||||
//! You don't need to access this file, just include it in your project using the builder name as an
|
||||
//! identifier:
|
||||
//!
|
||||
//! ```rust#ignore
|
||||
//! use pagetop::prelude::*;
|
||||
//!
|
||||
//! static_files!(guides);
|
||||
//! ```
|
||||
//!
|
||||
//! Also you can get the bundle as a static reference to the generated HashMap resources collection:
|
||||
//!
|
||||
//! ```rust#ignore
|
||||
//! use pagetop::prelude::*;
|
||||
//!
|
||||
//! static_files!(guides => BUNDLE_GUIDES);
|
||||
//! ```
|
||||
//!
|
||||
//! You can build more than one resources file to compile with your project.
|
||||
|
||||
use std::path::Path;
|
||||
|
||||
pub struct StaticFilesBundle(static_files::ResourceDir);
|
||||
|
||||
impl StaticFilesBundle {
|
||||
pub fn from_dir(dir: &'static str) -> Self {
|
||||
StaticFilesBundle(static_files::resource_dir(dir))
|
||||
}
|
||||
|
||||
pub fn with_name(mut self, name: &'static str) -> Self {
|
||||
self.0.with_generated_filename(
|
||||
Path::new(std::env::var("OUT_DIR").unwrap().as_str()).join(format!("{}.rs", name)),
|
||||
);
|
||||
self.0.with_module_name(format!("bundle_{}", name));
|
||||
self.0.with_generated_fn(name);
|
||||
self
|
||||
}
|
||||
|
||||
pub fn with_filter(mut self, filter: fn(p: &Path) -> bool) -> Self {
|
||||
self.0.with_filter(filter);
|
||||
self
|
||||
}
|
||||
|
||||
pub fn build(self) -> std::io::Result<()> {
|
||||
self.0.build()
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue