1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
use std::hash::{Hash, Hasher}; /// wrapper around `SeaHasher` from (https://crates.io/crates/seahash) /// /// Primarily used by `pgx`'s `#[derive(PostgresHash)]` macro. pub fn pgx_seahash<T: Hash>(value: &T) -> u64 { // taken from sources of "SeaHasher, v4.0.1" (https://crates.io/crates/seahash) // assuming the underlying implementation doesn't change, we // also want to ensure however we seed it doesn't change either // // these hash values might be stored on disk by Postgres, so we can't afford // to have them changing over time let mut hasher = seahash::SeaHasher::with_seeds( 0x16f11fe89b0d677c, 0xb480a793d8e6c86c, 0x6fe2e5aaf078ebc9, 0x14f994a4c5259381, ); value.hash(&mut hasher); hasher.finish() }