dynamic-plugin-macros 0.7.0

Macros for dynamic-plugin
Documentation
use std::hash::Hasher;

#[derive(Default)]
pub struct PluginSignatureHasher {
    inner: u64,
    #[cfg(feature = "debug-hashes")]
    debug: String,
}

#[cfg(feature = "debug-hashes")]
impl std::fmt::Debug for PluginSignatureHasher {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        f.debug_struct("PluginSignatureHasher")
            .field("debug", &self.debug)
            .finish_non_exhaustive()
    }
}

impl Hasher for PluginSignatureHasher {
    fn finish(&self) -> u64 {
        self.inner
    }

    fn write(&mut self, bytes: &[u8]) {
        #[cfg(feature = "debug-hashes")]
        self.debug.push_str(&String::from_utf8_lossy(bytes));
        for byte in bytes {
            self.inner = self.inner.wrapping_add(u64::from(*byte)).rotate_left(8);
        }
    }
}