alist 0.1.0

Association list offering fast lookups while preserving insertion order
Documentation
use core::fmt;

use crate::AList;

pub struct VacantEntry<'a, K, V> {
    alist: &'a mut AList<K, V>,
    key: K,
}

impl<'a, K, V> VacantEntry<'a, K, V> {
    pub(super) fn new(alist: &'a mut AList<K, V>, key: K) -> Self {
        Self { alist, key }
    }

    pub fn insert(self, value: V) -> &'a mut V {
        let pairs = &mut self.alist.pairs;
        let top = pairs.len();
        pairs.push((self.key, value));
        let (_, v) = &mut pairs[top];
        v
    }

    pub fn into_key(self) -> K {
        self.key
    }

    pub fn key(&self) -> &K {
        &self.key
    }
}

impl<'a, K: fmt::Debug, V> fmt::Debug for VacantEntry<'a, K, V> {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.debug_tuple("VacantEntry").field(self.key()).finish()
    }
}