microcad_lang/render/
hash.rs1use std::hash::Hasher;
7
8use derive_more::Deref;
9
10pub type HashId = u64;
12
13pub trait ComputedHash {
15 fn computed_hash(&self) -> HashId;
17}
18
19#[derive(Deref, Debug, Clone)]
21pub struct Hashed<T: std::hash::Hash> {
22 #[deref]
23 inner: T,
24 hash: HashId,
25}
26
27impl<T: std::hash::Hash> Hashed<T> {
28 pub fn new(inner: T) -> Self {
30 let mut hasher = rustc_hash::FxHasher::default();
31 inner.hash(&mut hasher);
32 Self {
33 inner,
34 hash: hasher.finish(),
35 }
36 }
37}
38
39impl<T: std::hash::Hash> ComputedHash for Hashed<T> {
40 fn computed_hash(&self) -> HashId {
41 self.hash
42 }
43}