#[cfg(feature = "md5")]
/// A trait for accessing the md5 hash of an entry
pub trait Md5Hash {
    /// Returns the md5 hash of an entry
    ///
    /// If implementation is generated by the macro, this value is `const` and computed at compile time
    fn md5(&self) -> &'static [u8; 16];
}

#[cfg(feature = "sha1")]
/// A trait for accessing the sha1 hash of an entry
pub trait Sha1Hash {
    /// Returns the sha1 hash of an entry
    ///
    /// If implementation is generated by the macro, this value is `const` and computed at compile time
    fn sha1(&self) -> &'static [u8; 20];
}

#[cfg(feature = "sha2")]
/// A trait for accessing the sha2 224 hash of an entry
pub trait Sha2_224Hash {
    /// Returns the sha2 224 hash of an entry
    ///
    /// If implementation is generated by the macro, this value is `const` and computed at compile time
    fn sha2_224(&self) -> &'static [u8; 28];
}

#[cfg(feature = "sha2")]
/// A trait for accessing the sha2 256 hash of an entry
pub trait Sha2_256Hash {
    /// Returns the sha2 256 hash of an entry
    ///
    /// If implementation is generated by the macro, this value is `const` and computed at compile time
    fn sha2_256(&self) -> &'static [u8; 32];
}

#[cfg(feature = "sha2")]
/// A trait for accessing the sha2 384 hash of an entry
pub trait Sha2_384Hash {
    /// Returns the sha2 384 hash of an entry
    ///
    /// If implementation is generated by the macro, this value is `const` and computed at compile time
    fn sha2_384(&self) -> &'static [u8; 48];
}

#[cfg(feature = "sha2")]
/// A trait for accessing the sha2 512 hash of an entry
pub trait Sha2_512Hash {
    /// Returns the sha2 512 hash of an entry
    ///
    /// If implementation is generated by the macro, this value is `const` and computed at compile time
    fn sha2_512(&self) -> &'static [u8; 64];
}

#[cfg(feature = "sha3")]
/// A trait for accessing the sha3 224 hash of an entry
pub trait Sha3_224Hash {
    /// Returns the sha3 224 hash of an entry
    ///
    /// If implementation is generated by the macro, this value is `const` and computed at compile time
    fn sha3_224(&self) -> &'static [u8; 28];
}

#[cfg(feature = "sha3")]
/// A trait for accessing the sha3 256 hash of an entry
pub trait Sha3_256Hash {
    /// Returns the sha3 256 hash of an entry
    ///
    /// If implementation is generated by the macro, this value is `const` and computed at compile time
    fn sha3_256(&self) -> &'static [u8; 32];
}

#[cfg(feature = "sha3")]
/// A trait for accessing the sha3 384 hash of an entry
pub trait Sha3_384Hash {
    /// Returns the sha3 384 hash of an entry
    ///
    /// If implementation is generated by the macro, this value is `const` and computed at compile time
    fn sha3_384(&self) -> &'static [u8; 48];
}

#[cfg(feature = "sha3")]
/// A trait for accessing the sha3 512 hash of an entry
pub trait Sha3_512Hash {
    /// Returns the sha3 512 hash of an entry
    ///
    /// If implementation is generated by the macro, this value is `const` and computed at compile time
    fn sha3_512(&self) -> &'static [u8; 64];
}

#[cfg(feature = "blake3")]
/// A trait for accessing the blake3 256 hash of an entry
pub trait Blake3_256Hash {
    /// Returns the blake3 256 hash of an entry
    ///
    /// If implementation is generated by the macro, this value is `const` and computed at compile time
    fn blake3_256(&self) -> &'static [u8; 32];
}
