Crate manganis

Source
Expand description

§Manganis

The Manganis allows you to submit assets to any build tool that supports collecting assets. It makes it easy to self-host assets that are distributed throughout your libraries. Manganis also handles optimizing, converting, and fetching assets.

If you defined this in a component library:

use manganis::{Asset, asset};
const AVIF_ASSET: Asset = manganis::asset!("/assets/image.png");

AVIF_ASSET will be set to a new file name that will be served by some CLI. That file can be collected by any package that depends on the component library.

use manganis::{ImageFormat, ImageAssetOptions, Asset, asset, ImageSize};
// You can collect arbitrary files. Absolute paths are resolved relative to the package root
const _: Asset = asset!("/assets/script.js");

// You can collect images which will be automatically optimized
pub const PNG_ASSET: Asset =
    asset!("/assets/image.png");
// Resize the image at compile time to make the assets smaller
pub const RESIZED_PNG_ASSET: Asset =
    asset!("/assets/image.png", ImageAssetOptions::new().with_size(ImageSize::Manual { width: 52, height: 52 }));
// Or convert the image at compile time to a web friendly format
pub const AVIF_ASSET: Asset = asset!("/assets/image.png", ImageAssetOptions::new().with_format(ImageFormat::Avif));

§Adding Support to Your CLI

To add support for your CLI, you need to integrate with the manganis_cli_support crate. This crate provides utilities to collect assets that integrate with the Manganis macro. It makes it easy to integrate an asset collection and optimization system into a build tool.

Macros§

asset
The asset macro collects assets that will be included in the final binary

Structs§

Asset
A bundled asset with some options. The asset can be used in rsx! to reference the asset. It should not be read directly with std::fs::read because the path needs to be resolved relative to the bundle
BundledAsset
An asset that should be copied by the bundler with some options. This type will be serialized into the binary and added to the link section LinkSection::CURRENT. CLIs that support manganis, should pull out the assets from the link section, optimize, and write them to the filesystem at BundledAsset::bundled_path for the application to use.
CssAssetOptions
Options for a css asset
FolderAssetOptions
The builder for [FolderAsset]
ImageAssetOptions
Options for an image asset
JsAssetOptions
Options for a javascript asset

Enums§

AssetOptions
Settings for a generic asset
ImageFormat
The type of an image. You can read more about the tradeoffs between image formats here
ImageSize
The size of an image asset