#![cfg(test)]
use allocative::Allocative;
use starlark_derive::starlark_value;
use starlark_derive::Freeze;
use starlark_derive::NoSerialize;
use starlark_derive::Trace;
use crate as starlark;
use crate::any::ProvidesStaticType;
use crate::values::AllocFrozenValue;
use crate::values::AllocValue;
use crate::values::FreezeResult;
use crate::values::FrozenHeap;
use crate::values::FrozenValue;
use crate::values::Heap;
use crate::values::StarlarkValue;
use crate::values::Value;
use crate::values::ValueLifetimeless;
use crate::values::ValueLike;
#[derive(
Trace,
Freeze,
Debug,
derive_more::Display,
Allocative,
ProvidesStaticType,
NoSerialize
)]
#[display("TestComplexValue<{}>", _0)]
pub(crate) struct TestComplexValue<V: ValueLifetimeless>(pub(crate) V);
#[starlark_value(type = "TestComplexValue")]
impl<'v, V: ValueLike<'v>> StarlarkValue<'v> for TestComplexValue<V> where
Self: ProvidesStaticType<'v>
{
}
impl<'v> AllocValue<'v> for TestComplexValue<Value<'v>> {
fn alloc_value(self, heap: &'v Heap) -> Value<'v> {
heap.alloc_complex(self)
}
}
impl AllocFrozenValue for TestComplexValue<FrozenValue> {
fn alloc_frozen_value(self, heap: &FrozenHeap) -> FrozenValue {
heap.alloc_simple(self)
}
}
pub(crate) fn trim_rust_backtrace(error: &str) -> &str {
match error.find("\nStack backtrace:") {
Some(pos) => error[..pos].trim_end(),
None => error.trim_end(),
}
}