mod d34;
use mkit_core::hash::Hash;
pub use d34::D34Shards;
use crate::repo::{NamespaceKey, RepoId};
use crate::rt::{MaybeSend, MaybeSync};
use crate::store::{BlobKey, Partition};
pub trait ShardMap: MaybeSend + MaybeSync {
fn ref_shard(&self, repo: &RepoId, ref_name: &str) -> Partition;
fn coordinator(&self, ns: &NamespaceKey) -> Partition;
fn ref_index(&self, repo: &RepoId, ref_name: &str) -> Partition;
fn ref_index_partitions(&self, repo: &RepoId) -> Vec<Partition>;
fn membership(&self, repo: &RepoId, pack: &BlobKey) -> Partition;
fn object_index(&self, repo: &RepoId, object: &Hash) -> Partition;
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub struct SinglePartition;
impl ShardMap for SinglePartition {
fn ref_shard(&self, repo: &RepoId, _ref_name: &str) -> Partition {
Partition::Namespace(repo.namespace.clone())
}
fn coordinator(&self, ns: &NamespaceKey) -> Partition {
Partition::Namespace(ns.clone())
}
fn ref_index(&self, repo: &RepoId, _ref_name: &str) -> Partition {
Partition::Namespace(repo.namespace.clone())
}
fn ref_index_partitions(&self, repo: &RepoId) -> Vec<Partition> {
vec![Partition::Namespace(repo.namespace.clone())]
}
fn membership(&self, repo: &RepoId, _pack: &BlobKey) -> Partition {
Partition::Namespace(repo.namespace.clone())
}
fn object_index(&self, repo: &RepoId, _object: &Hash) -> Partition {
Partition::Namespace(repo.namespace.clone())
}
}