* Create a crate for constant serialization of config structs for manganis * use SerializeConst for the image asset builder * switch to a declarative macro for assets * add serializable options for each asset type * implement the new manganis macro * optimize assets in the CLI * Fix assets with dioxus formattable * reduce fuzzing test limits * use the new syntax in examples * fix avif support * Fix manganis doc tests * cache asset optimization * Split out asset and bundled asset * make hash pointer width independent * Fix manganis macro docs * add constvec::is_empty method to fix clippy lint * remove nasm feature * simplify test_rsplit_once test so typos passes * revert example change from clippy fix * always accept unix paths * fix windows path seperator * fix folder asset hash * Optimize assets in a blocking task * Fix asset options docs * Document Asset and BundledAsset * simplify the linker macro a bit * add more docs to AssetParser expansion * add image format helpers * Split by both unix and windows path separators and take the smallest one
78 lines
2.0 KiB
Rust
78 lines
2.0 KiB
Rust
use const_serialize::SerializeConst;
|
|
|
|
use crate::AssetOptions;
|
|
|
|
/// Options for a css asset
|
|
#[derive(
|
|
Debug,
|
|
PartialEq,
|
|
PartialOrd,
|
|
Clone,
|
|
Copy,
|
|
Hash,
|
|
SerializeConst,
|
|
serde::Serialize,
|
|
serde::Deserialize,
|
|
)]
|
|
pub struct CssAssetOptions {
|
|
minify: bool,
|
|
preload: bool,
|
|
}
|
|
|
|
impl Default for CssAssetOptions {
|
|
fn default() -> Self {
|
|
Self::new()
|
|
}
|
|
}
|
|
|
|
impl CssAssetOptions {
|
|
/// Create a new css asset using the builder
|
|
pub const fn new() -> Self {
|
|
Self {
|
|
preload: false,
|
|
minify: true,
|
|
}
|
|
}
|
|
|
|
/// Sets whether the css should be minified (default: true)
|
|
///
|
|
/// Minifying the css can make your site load faster by loading less data
|
|
///
|
|
/// ```rust
|
|
/// # use manganis::{asset, Asset, CssAssetOptions};
|
|
/// const _: Asset = asset!("/assets/style.css", CssAssetOptions::new().with_minify(false));
|
|
/// ```
|
|
#[allow(unused)]
|
|
pub const fn with_minify(self, minify: bool) -> Self {
|
|
Self { minify, ..self }
|
|
}
|
|
|
|
/// Check if the asset is minified
|
|
pub const fn minified(&self) -> bool {
|
|
self.minify
|
|
}
|
|
|
|
/// Make the asset preloaded
|
|
///
|
|
/// Preloading css will make the image start to load as soon as possible. This is useful for css that is used soon after the page loads or css that may not be used immediately, but should start loading sooner
|
|
///
|
|
/// ```rust
|
|
/// # use manganis::{asset, Asset, CssAssetOptions};
|
|
/// const _: Asset = asset!("/assets/style.css", CssAssetOptions::new().with_preload(true));
|
|
/// ```
|
|
#[allow(unused)]
|
|
pub const fn with_preload(self, preload: bool) -> Self {
|
|
Self { preload, ..self }
|
|
}
|
|
|
|
/// Check if the asset is preloaded
|
|
pub const fn preloaded(&self) -> bool {
|
|
self.preload
|
|
}
|
|
|
|
/// Convert the options into options for a generic asset
|
|
pub const fn into_asset_options(self) -> AssetOptions {
|
|
AssetOptions::Css(self)
|
|
}
|
|
}
|