use allocative::Allocative;
use starlark_derive::starlark_value;
use starlark_derive::NoSerialize;
use starlark_derive::ProvidesStaticType;
use crate as starlark;
use crate::values::layout::avalue::alloc_static;
use crate::values::layout::avalue::AValueBasic;
use crate::values::layout::avalue::AValueImpl;
use crate::values::layout::heap::repr::AValueRepr;
use crate::values::AllocFrozenValue;
use crate::values::FrozenHeap;
use crate::values::FrozenValue;
use crate::values::StarlarkValue;
#[derive(
Allocative,
NoSerialize,
Debug,
derive_more::Display,
ProvidesStaticType
)]
#[display("Ellipsis")]
pub(crate) struct Ellipsis;
pub(crate) static VALUE_ELLIPSIS: AValueRepr<AValueImpl<'static, AValueBasic<Ellipsis>>> =
alloc_static(Ellipsis);
#[starlark_value(type = "ellipsis")]
impl<'v> StarlarkValue<'v> for Ellipsis {}
impl Ellipsis {
pub(crate) fn new_value() -> FrozenValue {
FrozenValue::new_repr(&VALUE_ELLIPSIS)
}
}
impl AllocFrozenValue for Ellipsis {
fn alloc_frozen_value(self, _heap: &FrozenHeap) -> FrozenValue {
Ellipsis::new_value()
}
}
#[cfg(test)]
mod tests {
use crate::assert;
#[test]
fn test_ellipsis() {
assert::pass("...");
}
}