use std::sync::Arc;

use arrow::array::{Datum, StringArray};

use super::{Key, KeyRef};

impl Key for String {
    type Ref<'r> = &'r str;

    fn as_key_ref(&self) -> Self::Ref<'_> {
        self
    }

    fn to_arrow_datum(&self) -> Arc<dyn Datum> {
        Arc::new(StringArray::new_scalar(self))
    }
}

impl<'r> KeyRef<'r> for &'r str {
    type Key = String;

    fn to_key(self) -> Self::Key {
        self.to_string()
    }
}
