use crate as starlark;
use crate::values::Freeze;
use crate::values::FreezeError;
use crate::values::FreezeResult;
use crate::values::Freezer;
use crate::values::FrozenHeap;
struct FreezeSentinel {
frozen: bool,
}
impl Freeze for FreezeSentinel {
type Frozen = Self;
fn freeze(self, _: &Freezer) -> FreezeResult<Self> {
assert!(!self.frozen);
Ok(Self { frozen: true })
}
}
#[derive(Freeze)]
#[freeze(validator = check_froze_before_validating)]
struct Test {
sentinel: FreezeSentinel,
}
fn check_froze_before_validating(test: &Test) -> anyhow::Result<()> {
assert!(test.sentinel.frozen);
Ok(())
}
#[test]
fn test() -> anyhow::Result<()> {
let t = Test {
sentinel: FreezeSentinel { frozen: false },
};
let freezer = Freezer::new(FrozenHeap::new());
t.freeze(&freezer)?;
Ok(())
}