mbed 0.1.3

Embed and transform assets into your Rust crate.
Documentation

mbed

Embed and transform assets into your Rust crate.

GitHub Actions Workflow Status Crates.io Version docs.rs Crates.io Total Downloads GitHub License

about

mbed provides macros for turning files and generated outputs into Artifact values. Artifacts carry their bytes, MIME type, and Id, and can be grouped into a Manifest for lookup by identifier.

Basic usage

Requires the macros feature.

pub const LOGO: Artifact<[u8]> = mbed::include_bytes!["../assets/logo.svg"];
pub const INDEX: Artifact<str> = mbed::include_str!["../pages/index.html"];

let id = LOGO.id();
assert_eq!(LOGO.mime(), "image/svg+xml");

Collections and manifests

collect! groups artifacts inside a module. manifest! can then reference individual artifacts or whole collections with ::*.

Requires the macros feature.

pub mod pages {
    pub const INDEX: Artifact<str> = mbed::include_str!["../pages/index.html"];
    pub const ABOUT: Artifact<str> = mbed::include_str!["../pages/about.html"];

    mbed::collect![INDEX, ABOUT];
}

pub mod images {
    pub const LOGO: Artifact<[u8]> = mbed::include_bytes!["../assets/logo.svg"];

    mbed::collect![LOGO];
}

pub const ASSETS: Manifest = mbed::manifest![pages::*, images::*];

let artifact = ASSETS.get(pages::INDEX.id()).unwrap();
assert_eq!(artifact.mime(), pages::INDEX.mime());

Images

Requires the image feature.

pub const LOGO: Artifact<Image> = mbed::image::include! {
    resize: Scale(0.5),
    path: "../assets/logo.png",
    format: WebP,
};

assert_eq!(LOGO.format(), mbed::image::Format::WebP);
let bytes = LOGO.as_bytes();

JavaScript bundles

Requires the bundle feature.

pub const APP: Artifact<Bundle> = mbed::js::bundle!["../frontend/app.js"];

let code = APP.code();
let sourcemap = APP.sourcemap();

Tailwind CSS

Requires the tailwindcss feature.

pub const STYLES: Artifact<str> = mbed::css::tailwindcss!("../tailwind.css");

Feature flags

  • macros enables include_bytes!, include_str!, collect!, and manifest!.
  • image enables image:include! and image metadata support.
  • bundle enables js:bundle!.
  • tailwindcss enables css:tailwindcss!.
  • serde enables serialization support for public data types.
  • cargo-progress shows bundling progress in Cargo build output. This feature is only supported on Linux.

License

mbed is licensed under the MIT License. See LICENSE for details.

Contributing

Contributions are welcome.

Please follow the existing code style and conventions used throughout the project. If you're proposing a new feature or API, opening an issue first is often the easiest way to discuss the design.