use crate::values::{
AllocFrozenValue, AllocValue, FrozenHeap, FrozenValue, Heap, UnpackValue, Value,
};
impl AllocFrozenValue for String {
fn alloc_frozen_value(self, heap: &FrozenHeap) -> FrozenValue {
heap.alloc_str(self.as_str()).to_frozen_value()
}
}
impl<'v, 'a> AllocFrozenValue for &'a str {
fn alloc_frozen_value(self, heap: &FrozenHeap) -> FrozenValue {
heap.alloc_str(self).to_frozen_value()
}
}
impl<'v> AllocValue<'v> for String {
fn alloc_value(self, heap: &'v Heap) -> Value<'v> {
heap.alloc_str(self.as_str()).to_value()
}
}
impl<'v> AllocValue<'v> for char {
fn alloc_value(self, heap: &'v Heap) -> Value<'v> {
heap.alloc_char(self).to_value()
}
}
impl<'v> AllocValue<'v> for &'_ String {
fn alloc_value(self, heap: &'v Heap) -> Value<'v> {
heap.alloc_str(self.as_str()).to_value()
}
}
impl<'v> AllocValue<'v> for &'_ str {
fn alloc_value(self, heap: &'v Heap) -> Value<'v> {
heap.alloc_str(self).to_value()
}
}
impl<'v> UnpackValue<'v> for &'v str {
fn expected() -> String {
"str".to_owned()
}
fn unpack_value(value: Value<'v>) -> Option<Self> {
value.unpack_str()
}
}
impl<'v> UnpackValue<'v> for String {
fn expected() -> String {
"str".to_owned()
}
fn unpack_value(value: Value<'v>) -> Option<Self> {
value.unpack_str().map(ToOwned::to_owned)
}
}