const-struct-version

Crates.ioconst-struct-version
lib.rsconst-struct-version
version0.2.0
created_at2025-03-09 06:59:59.387746+00
updated_at2025-03-09 23:00:38.478968+00
descriptionA trait plus proc-macro to generate a hash based on the fields of a struct. Useful for intelligently expiring a cache when the stored object changes.
homepage
repositoryhttps://github.com/JosiahBull/const-struct-version
max_upload_size
id1585206
size136,188
Josiah Bull (JosiahBull)

documentation

https://docs.rs/const-struct-version

README

Const-struct-version

CI Crates.io Docs.rs

This crate has a trait + proc-macro to generate a hash based on the fields of a struct. Useful for intelligently expiring a cache when the stored object changes.

Note that this crate is NOT perfect and may not work for all use cases, especially given our limitations with proc-macros.

Known limitations:

  1. Custom derivations that have special logic we can't see.
  2. Objects that are inherently unstable/mutable.
  3. Struct/Enum names that are significant to the versioning.

Feel free to open an issue if you have a use case that doesn't work with this crate.

Features

  • serde-attributes - add #[serde(XXX)] attributes into the generated hash.
  • derive - derive the StructVersion trait for an object automatically.
  • uuid - Support for uuid crate.
  • chrono - Support for chrono crate.
  • indexmap - Support for indexmap crate.
  • url - Support for url crate.

Usage

[dependencies]
const_struct_version = "0.1"
use const_struct_version::StructVersion;

#[derive(StructVersion)]
pub struct Cart {
    items: Vec<String>,
    owner: String,
}

fn main() {
    println!("Cart version: {}", Cart::version_cached());
}

Contribution

Contribution are welcome! Please feel free to open an issue or a pull request.

License

Licensed under either of

at your option.

Commit count: 14

cargo fmt