event-store-adapter-rs 0.2.1

crate to make DynamoDB an Event Store
Documentation
use std::collections::hash_map::DefaultHasher;
use std::fmt::Debug;
use std::hash::{Hash, Hasher};

pub trait KeyResolver: Debug + Send + 'static {
  fn resolve_pkey(&self, id_type_name: &str, value: &str, shard_count: u64) -> String;
  fn resolve_skey(&self, id_type_name: &str, value: &str, seq_nr: usize) -> String;
}

#[derive(Debug, Clone)]
pub struct DefaultPartitionKeyResolver;

impl KeyResolver for DefaultPartitionKeyResolver {
  fn resolve_pkey(&self, id_type_name: &str, value: &str, shard_count: u64) -> String {
    let mut hasher = DefaultHasher::new();
    value.hash(&mut hasher);
    let hash_value = hasher.finish();
    let remainder = hash_value % shard_count;
    format!("{}-{}", id_type_name, remainder)
  }

  fn resolve_skey(&self, id_type_name: &str, value: &str, seq_nr: usize) -> String {
    format!("{}-{}-{}", id_type_name, value, seq_nr)
  }
}