rspack_hash 0.102.0

rspack hash
Documentation
use std::{
  borrow::Cow,
  path::{Path, PathBuf},
};

use smol_str::SmolStr;

use crate::{RspackHash, RspackHasher};

impl RspackHash for str {
  fn hash(&self, state: &mut RspackHasher) {
    state.write(self.as_bytes());
  }
}

impl RspackHash for String {
  fn hash(&self, state: &mut RspackHasher) {
    self.as_str().hash(state);
  }
}

impl RspackHash for SmolStr {
  fn hash(&self, state: &mut RspackHasher) {
    self.as_str().hash(state);
  }
}

impl RspackHash for Cow<'_, str> {
  fn hash(&self, state: &mut RspackHasher) {
    self.as_ref().hash(state);
  }
}

impl RspackHash for bool {
  fn hash(&self, state: &mut RspackHasher) {
    state.write(if *self { b"true" } else { b"false" });
  }
}

macro_rules! impl_content_hash_for_integer {
  ($($ty:ty),+ $(,)?) => {
    $(
      impl RspackHash for $ty {
        fn hash(&self, state: &mut RspackHasher) {
          let mut buffer = itoa::Buffer::new();
          state.write(buffer.format(*self).as_bytes());
        }
      }
    )+
  };
}

impl_content_hash_for_integer!(
  u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize
);

impl RspackHash for Path {
  fn hash(&self, state: &mut RspackHasher) {
    self.to_string_lossy().hash(state);
  }
}

impl RspackHash for PathBuf {
  fn hash(&self, state: &mut RspackHasher) {
    self.as_path().hash(state);
  }
}