2 unstable releases
new 0.2.0 | Mar 9, 2025 |
---|---|
0.1.3 | Mar 9, 2025 |
#97 in Caching
26 downloads per month
24KB
282 lines
Const-struct-version
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:
- Custom derivations that have special logic we can't see.
- Objects that are inherently unstable/mutable.
- 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 theStructVersion
trait for an object automatically.uuid
- Support foruuid
crate.chrono
- Support forchrono
crate.indexmap
- Support forindexmap
crate.url
- Support forurl
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
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
at your option.
Dependencies
~0.5–1.7MB
~34K SLoC