#newtype #macro #type #ulid #secret #strongly-typed #uuid

macro typed-fields

A collection of macros that generate newtypes

4 releases (breaking)

0.4.0 Feb 15, 2025
0.3.0 Dec 18, 2024
0.2.0 Aug 21, 2024
0.1.0 Jan 26, 2024

#252 in Procedural macros

Download history 75/week @ 2024-10-31 42/week @ 2024-11-07 3/week @ 2024-11-14 3/week @ 2024-11-21 69/week @ 2024-11-28 106/week @ 2024-12-05 153/week @ 2024-12-12 59/week @ 2024-12-19 1/week @ 2024-12-26 8/week @ 2025-01-02 13/week @ 2025-01-09 6/week @ 2025-01-16 1/week @ 2025-01-23 3/week @ 2025-01-30 3/week @ 2025-02-06 147/week @ 2025-02-13

154 downloads per month

MIT/Apache

21KB
397 lines

🦀 typed-fields

Do you like strongly-typed structs?

typed-fields is a collection of macros that generate types following the newtype pattern. The following types are currently supported:

  • name! - a string-based type
  • number! - a number-based type
  • secret! - a type for secrets (requires the secret feature)
  • ulid! - a type for ULIDs (requires the ulid feature)
  • url! - a type for URLs (requires the url feature)
  • uuid! - a type for UUIDs (requires the uuid feature)

Example

The following example showcases the number! macro, which generates a new type that is backed by an i64.

use typed_fields::number;

// Define a new type that is backed by an `i64`
number!(UserId);

fn main() {
    // Create a new `UserId` from an `i64`
    let id = UserId::new(42);

    // Common traits like `Display` are automatically implemented for the type
    println!("User ID: {}", id);
}

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~0.2–1.3MB
~26K SLoC