nix_compat/derivation/
hdm_lookup.rs1use crate::{nixhash::Sha256, store_path::StorePathRef};
2
3pub trait HashDerivationModuloLookup {
15 fn lookup_hdm(&self, drv_path: &StorePathRef<'_>) -> Option<Sha256>;
19}
20
21pub fn lookup_fn<F>(func: F) -> impl HashDerivationModuloLookup
23where
24 F: Fn(&StorePathRef) -> Option<Sha256>,
25{
26 LookupFn { func }
27}
28
29struct LookupFn<F> {
30 func: F,
31}
32
33impl<F> HashDerivationModuloLookup for LookupFn<F>
34where
35 F: Fn(&StorePathRef) -> Option<Sha256>,
36{
37 fn lookup_hdm(&self, drv_path: &StorePathRef) -> Option<Sha256> {
38 (self.func)(drv_path)
39 }
40}
41
42#[cfg(feature = "hashbrown")]
43impl HashDerivationModuloLookup for hashbrown::HashMap<crate::store_path::StorePath, Sha256> {
44 fn lookup_hdm(&self, drv_path: &StorePathRef<'_>) -> Option<Sha256> {
45 self.get(drv_path).copied()
46 }
47}