#macro-traits #data-structures

unitscale

Facade crate for statically-scaled unit macros and traits

9 releases

Uses new Rust 2024

0.2.0 Feb 4, 2026
0.1.7 Apr 15, 2025

#505 in Embedded development

Apache-2.0

21KB
344 lines

unitscale

Overview

This is the public-facing facade crate that re-exports the traits and macros from unitscale_core and unitscale_macros. It is designed to be ergonomic and beginner-friendly.

Modules

  • core: Exposes all traits and types from unitscale_core.
  • macros: Exposes macros from unitscale_macros.
    • Can set types and scalars as f32 or f64 with the marco argument with
  • prelude: Contains common re-exports for quick onboarding.

Example

You will need to add unitscale_core and num_traits to your dependancies.

use unitscale::prelude::*;

// Default is `f32`. If you want f64 then you can add `with = "f64"`.

// #[unit_scale(to = 0.1, with = "f64")]
#[unit_scale(to = 0.5)]
struct HalfUnit;

// #[unit_type(with = "f64")]
#[unit_type]
struct Percent;

let p = Percent::<HalfUnit, u8>::try_from(30.0).unwrap();
// v.to_f32() gives back 30.0 within the precision limit of the type (e.g. u8)
assert_eq!(p.scaled_value(), 60);

Use Cases

This crate is ideal for anyone working with embedded systems, battery management protocols, or anywhere you need strongly typed unit data tied to fixed encoding scales.

Licensing

For licensing information, please refer to the LICENSE file in each crate.

Dependencies

~225–680KB
~15K SLoC