Trait starlark::values::Freeze

source ·
pub trait Freeze {
    type Frozen;

    // Required method
    fn freeze(self, freezer: &Freezer) -> Result<Self::Frozen>;
}
Expand description

Need to be implemented for non-simple StarlarkValue.

This is called on freeze of the heap. Must produce a replacement object to place in the frozen heap.

For relatively simple cases it can be implemented with #[derive(Freeze)]:


use starlark::values::Freeze;

#[derive(Freeze)]
struct MyType<V> {
    value: V,
    // This field does not implement `Freeze`, but we can use it as is for freeze.
    #[freeze(identity)]
    data: AdditionalData,
}

Required Associated Types§

source

type Frozen

When type is frozen, it is frozen into this type.

Required Methods§

source

fn freeze(self, freezer: &Freezer) -> Result<Self::Frozen>

Freeze a value. The frozen value must be equal to the original, and produce the same hash.

Note during freeze, Value objects in Self might be already special forward-objects, trying to unpack these objects will crash the process. So the function is only allowed to access Value objects after it froze them.

Implementations on Foreign Types§

source§

impl Freeze for bool

§

type Frozen = bool

source§

fn freeze(self, _freezer: &Freezer) -> Result<bool>

source§

impl Freeze for i32

§

type Frozen = i32

source§

fn freeze(self, _freezer: &Freezer) -> Result<i32>

source§

impl Freeze for i64

§

type Frozen = i64

source§

fn freeze(self, _freezer: &Freezer) -> Result<i64>

source§

impl Freeze for u32

§

type Frozen = u32

source§

fn freeze(self, _freezer: &Freezer) -> Result<u32>

source§

impl Freeze for u64

§

type Frozen = u64

source§

fn freeze(self, _freezer: &Freezer) -> Result<u64>

source§

impl Freeze for ()

§

type Frozen = ()

source§

fn freeze(self, _freezer: &Freezer) -> Result<()>

source§

impl Freeze for usize

§

type Frozen = usize

source§

fn freeze(self, _freezer: &Freezer) -> Result<usize>

source§

impl Freeze for String

§

type Frozen = String

source§

fn freeze(self, _freezer: &Freezer) -> Result<String>

source§

impl<'v, T: 'static> Freeze for PhantomData<&'v T>

source§

impl<A: Freeze> Freeze for (A,)

§

type Frozen = (<A as Freeze>::Frozen,)

source§

fn freeze(self, freezer: &Freezer) -> Result<(A::Frozen,)>

source§

impl<A: Freeze, B: Freeze> Freeze for (A, B)

§

type Frozen = (<A as Freeze>::Frozen, <B as Freeze>::Frozen)

source§

fn freeze(self, freezer: &Freezer) -> Result<(A::Frozen, B::Frozen)>

source§

impl<A: Freeze, B: Freeze, C: Freeze> Freeze for (A, B, C)

§

type Frozen = (<A as Freeze>::Frozen, <B as Freeze>::Frozen, <C as Freeze>::Frozen)

source§

fn freeze(self, freezer: &Freezer) -> Result<(A::Frozen, B::Frozen, C::Frozen)>

source§

impl<A: Freeze, B: Freeze, C: Freeze, D: Freeze> Freeze for (A, B, C, D)

§

type Frozen = (<A as Freeze>::Frozen, <B as Freeze>::Frozen, <C as Freeze>::Frozen, <D as Freeze>::Frozen)

source§

fn freeze( self, freezer: &Freezer ) -> Result<(A::Frozen, B::Frozen, C::Frozen, D::Frozen)>

source§

impl<T> Freeze for Option<T>
where T: Freeze,

§

type Frozen = Option<<T as Freeze>::Frozen>

source§

fn freeze(self, freezer: &Freezer) -> Result<Option<T::Frozen>>

source§

impl<T> Freeze for Box<[T]>
where T: Freeze,

§

type Frozen = Box<[<T as Freeze>::Frozen]>

source§

fn freeze(self, freezer: &Freezer) -> Result<Self::Frozen>

source§

impl<T> Freeze for Box<T>
where T: Freeze,

§

type Frozen = Box<<T as Freeze>::Frozen>

source§

fn freeze(self, freezer: &Freezer) -> Result<Self::Frozen>

source§

impl<T> Freeze for Vec<T>
where T: Freeze,

§

type Frozen = Vec<<T as Freeze>::Frozen>

source§

fn freeze(self, freezer: &Freezer) -> Result<Vec<T::Frozen>>

source§

impl<T> Freeze for RefCell<T>
where T: Freeze,

§

type Frozen = <T as Freeze>::Frozen

source§

fn freeze(self, freezer: &Freezer) -> Result<T::Frozen>

source§

impl<T> Freeze for UnsafeCell<T>
where T: Freeze,

§

type Frozen = UnsafeCell<<T as Freeze>::Frozen>

source§

fn freeze(self, freezer: &Freezer) -> Result<Self::Frozen>

Implementors§