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