use crate::typing::Ty;
use crate::values::alloc_value::AllocFrozenStringValue;
use crate::values::alloc_value::AllocStringValue;
use crate::values::type_repr::StarlarkTypeRepr;
use crate::values::AllocFrozenValue;
use crate::values::AllocValue;
use crate::values::FrozenHeap;
use crate::values::FrozenStringValue;
use crate::values::FrozenValue;
use crate::values::Heap;
use crate::values::StringValue;
use crate::values::UnpackValue;
use crate::values::Value;
impl AllocFrozenValue for String {
fn alloc_frozen_value(self, heap: &FrozenHeap) -> FrozenValue {
self.alloc_frozen_string_value(heap).to_frozen_value()
}
}
impl AllocFrozenStringValue for String {
fn alloc_frozen_string_value(self, heap: &FrozenHeap) -> FrozenStringValue {
heap.alloc_str(self.as_str())
}
}
impl<'a> AllocFrozenValue for &'a str {
fn alloc_frozen_value(self, heap: &FrozenHeap) -> FrozenValue {
self.alloc_frozen_string_value(heap).to_frozen_value()
}
}
impl<'a> AllocFrozenStringValue for &'a str {
fn alloc_frozen_string_value(self, heap: &FrozenHeap) -> FrozenStringValue {
heap.alloc_str(self)
}
}
impl<'v> AllocValue<'v> for String {
fn alloc_value(self, heap: &'v Heap) -> Value<'v> {
self.alloc_string_value(heap).to_value()
}
}
impl<'v> AllocStringValue<'v> for String {
fn alloc_string_value(self, heap: &'v Heap) -> StringValue<'v> {
heap.alloc_str(self.as_str())
}
}
impl StarlarkTypeRepr for char {
fn starlark_type_repr() -> Ty {
String::starlark_type_repr()
}
}
impl<'v> AllocValue<'v> for char {
fn alloc_value(self, heap: &'v Heap) -> Value<'v> {
self.alloc_string_value(heap).to_value()
}
}
impl<'v> AllocStringValue<'v> for char {
fn alloc_string_value(self, heap: &'v Heap) -> StringValue<'v> {
heap.alloc_char(self)
}
}
impl StarlarkTypeRepr for &'_ String {
fn starlark_type_repr() -> Ty {
String::starlark_type_repr()
}
}
impl<'v> AllocValue<'v> for &'_ String {
fn alloc_value(self, heap: &'v Heap) -> Value<'v> {
self.alloc_string_value(heap).to_value()
}
}
impl<'v> AllocStringValue<'v> for &'_ String {
fn alloc_string_value(self, heap: &'v Heap) -> StringValue<'v> {
heap.alloc_str(self.as_str())
}
}
impl<'v> AllocValue<'v> for &'_ str {
fn alloc_value(self, heap: &'v Heap) -> Value<'v> {
self.alloc_string_value(heap).to_value()
}
}
impl<'v> AllocStringValue<'v> for &'_ str {
fn alloc_string_value(self, heap: &'v Heap) -> StringValue<'v> {
heap.alloc_str(self)
}
}
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)
}
}