use crate::{
db::access::{AccessPlan, normalize_access_plan_value},
traits::KeyValueCodec,
value::Value,
};
#[derive(Clone, Debug, Eq, PartialEq)]
pub(in crate::db::query) enum KeyAccess<K> {
Single(K),
Many(Vec<K>),
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub(in crate::db::query) enum KeyAccessKind {
Single,
Many,
Only,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub(in crate::db::query) struct KeyAccessState<K> {
pub(in crate::db::query::intent) kind: KeyAccessKind,
pub(in crate::db::query::intent) access: KeyAccess<K>,
}
pub(in crate::db::query) fn build_access_plan_from_keys<K>(
access: &KeyAccess<K>,
) -> AccessPlan<Value>
where
K: KeyValueCodec,
{
let plan = match access {
KeyAccess::Single(key) => AccessPlan::by_key(key.to_key_value()),
KeyAccess::Many(keys) => {
let mut values = Vec::with_capacity(keys.len());
values.extend(keys.iter().map(KeyValueCodec::to_key_value));
AccessPlan::by_keys(values)
}
};
normalize_access_plan_value(plan)
}