pub struct OnceFn<T>(pub Cell<Option<T>>);Expand description
Helper type for creating a function from a closure which implements FnMut
When called, will take the internal value leaving it empty. If the internal value was already empty it will return a error.
Tuple Fields§
§0: Cell<Option<T>>Implementations§
Methods from Deref<Target = Cell<Option<F>>>§
1.17.0 · Sourcepub fn swap(&self, other: &Cell<T>)
pub fn swap(&self, other: &Cell<T>)
Swaps the values of two Cells.
The difference with std::mem::swap is that this function doesn’t
require a &mut reference.
§Panics
This function will panic if self and other are different Cells that partially overlap.
(Using just standard library methods, it is impossible to create such partially overlapping Cells.
However, unsafe code is allowed to e.g. create two &Cell<[i32; 2]> that partially overlap.)
§Examples
use std::cell::Cell;
let c1 = Cell::new(5i32);
let c2 = Cell::new(10i32);
c1.swap(&c2);
assert_eq!(10, c1.get());
assert_eq!(5, c2.get());1.17.0 · Sourcepub fn replace(&self, val: T) -> T
pub fn replace(&self, val: T) -> T
Replaces the contained value with val, and returns the old contained value.
§Examples
use std::cell::Cell;
let cell = Cell::new(5);
assert_eq!(cell.get(), 5);
assert_eq!(cell.replace(10), 5);
assert_eq!(cell.get(), 10);1.0.0 · Sourcepub fn get(&self) -> T
pub fn get(&self) -> T
Returns a copy of the contained value.
§Examples
use std::cell::Cell;
let c = Cell::new(5);
let five = c.get();Sourcepub fn update<F>(&self, f: F) -> Twhere
F: FnOnce(T) -> T,
🔬This is a nightly-only experimental API. (cell_update)
pub fn update<F>(&self, f: F) -> Twhere
F: FnOnce(T) -> T,
cell_update)Updates the contained value using a function and returns the new value.
§Examples
#![feature(cell_update)]
use std::cell::Cell;
let c = Cell::new(5);
let new = c.update(|x| x + 1);
assert_eq!(new, 6);
assert_eq!(c.get(), 6);1.12.0 · Sourcepub fn as_ptr(&self) -> *mut T
pub fn as_ptr(&self) -> *mut T
Returns a raw pointer to the underlying data in this cell.
§Examples
use std::cell::Cell;
let c = Cell::new(5);
let ptr = c.as_ptr();1.17.0 · Sourcepub fn take(&self) -> T
pub fn take(&self) -> T
Takes the value of the cell, leaving Default::default() in its place.
§Examples
use std::cell::Cell;
let c = Cell::new(5);
let five = c.take();
assert_eq!(five, 5);
assert_eq!(c.into_inner(), 0);1.37.0 · Sourcepub fn as_slice_of_cells(&self) -> &[Cell<T>]
pub fn as_slice_of_cells(&self) -> &[Cell<T>]
Returns a &[Cell<T>] from a &Cell<[T]>
§Examples
use std::cell::Cell;
let slice: &mut [i32] = &mut [1, 2, 3];
let cell_slice: &Cell<[i32]> = Cell::from_mut(slice);
let slice_cell: &[Cell<i32>] = cell_slice.as_slice_of_cells();
assert_eq!(slice_cell.len(), 3);Sourcepub fn as_array_of_cells(&self) -> &[Cell<T>; N]
🔬This is a nightly-only experimental API. (as_array_of_cells)
pub fn as_array_of_cells(&self) -> &[Cell<T>; N]
as_array_of_cells)Returns a &[Cell<T>; N] from a &Cell<[T; N]>
§Examples
#![feature(as_array_of_cells)]
use std::cell::Cell;
let mut array: [i32; 3] = [1, 2, 3];
let cell_array: &Cell<[i32; 3]> = Cell::from_mut(&mut array);
let array_cell: &[Cell<i32>; 3] = cell_array.as_array_of_cells();Trait Implementations§
Source§impl<'js, R, Fun> IntoJsFunc<'js, ()> for OnceFn<Fun>
impl<'js, R, Fun> IntoJsFunc<'js, ()> for OnceFn<Fun>
Source§fn param_requirements() -> ParamRequirement
fn param_requirements() -> ParamRequirement
Source§impl<'js, R, Fun, A> IntoJsFunc<'js, (A,)> for OnceFn<Fun>
impl<'js, R, Fun, A> IntoJsFunc<'js, (A,)> for OnceFn<Fun>
Source§fn param_requirements() -> ParamRequirement
fn param_requirements() -> ParamRequirement
Source§impl<'js, R, Fun, A, B> IntoJsFunc<'js, (A, B)> for OnceFn<Fun>
impl<'js, R, Fun, A, B> IntoJsFunc<'js, (A, B)> for OnceFn<Fun>
Source§fn param_requirements() -> ParamRequirement
fn param_requirements() -> ParamRequirement
Source§impl<'js, R, Fun, A, B, C> IntoJsFunc<'js, (A, B, C)> for OnceFn<Fun>
impl<'js, R, Fun, A, B, C> IntoJsFunc<'js, (A, B, C)> for OnceFn<Fun>
Source§fn param_requirements() -> ParamRequirement
fn param_requirements() -> ParamRequirement
Source§impl<'js, R, Fun, A, B, C, D> IntoJsFunc<'js, (A, B, C, D)> for OnceFn<Fun>where
Fun: FnOnce(A, B, C, D) -> R + 'js,
(A, B, C, D): FromParams<'js> + 'js,
R: IntoJs<'js> + 'js,
impl<'js, R, Fun, A, B, C, D> IntoJsFunc<'js, (A, B, C, D)> for OnceFn<Fun>where
Fun: FnOnce(A, B, C, D) -> R + 'js,
(A, B, C, D): FromParams<'js> + 'js,
R: IntoJs<'js> + 'js,
Source§fn param_requirements() -> ParamRequirement
fn param_requirements() -> ParamRequirement
Source§impl<'js, R, Fun, A, B, C, D, E> IntoJsFunc<'js, (A, B, C, D, E)> for OnceFn<Fun>where
Fun: FnOnce(A, B, C, D, E) -> R + 'js,
(A, B, C, D, E): FromParams<'js> + 'js,
R: IntoJs<'js> + 'js,
impl<'js, R, Fun, A, B, C, D, E> IntoJsFunc<'js, (A, B, C, D, E)> for OnceFn<Fun>where
Fun: FnOnce(A, B, C, D, E) -> R + 'js,
(A, B, C, D, E): FromParams<'js> + 'js,
R: IntoJs<'js> + 'js,
Source§fn param_requirements() -> ParamRequirement
fn param_requirements() -> ParamRequirement
Source§impl<'js, R, Fun, A, B, C, D, E, F> IntoJsFunc<'js, (A, B, C, D, E, F)> for OnceFn<Fun>where
Fun: FnOnce(A, B, C, D, E, F) -> R + 'js,
(A, B, C, D, E, F): FromParams<'js> + 'js,
R: IntoJs<'js> + 'js,
impl<'js, R, Fun, A, B, C, D, E, F> IntoJsFunc<'js, (A, B, C, D, E, F)> for OnceFn<Fun>where
Fun: FnOnce(A, B, C, D, E, F) -> R + 'js,
(A, B, C, D, E, F): FromParams<'js> + 'js,
R: IntoJs<'js> + 'js,
Source§fn param_requirements() -> ParamRequirement
fn param_requirements() -> ParamRequirement
Source§impl<'js, R, Fun, A, B, C, D, E, F, G> IntoJsFunc<'js, (A, B, C, D, E, F, G)> for OnceFn<Fun>where
Fun: FnOnce(A, B, C, D, E, F, G) -> R + 'js,
(A, B, C, D, E, F, G): FromParams<'js> + 'js,
R: IntoJs<'js> + 'js,
impl<'js, R, Fun, A, B, C, D, E, F, G> IntoJsFunc<'js, (A, B, C, D, E, F, G)> for OnceFn<Fun>where
Fun: FnOnce(A, B, C, D, E, F, G) -> R + 'js,
(A, B, C, D, E, F, G): FromParams<'js> + 'js,
R: IntoJs<'js> + 'js,
Source§fn param_requirements() -> ParamRequirement
fn param_requirements() -> ParamRequirement
Source§impl<'js, R, Fun, A, B, C, D, E, F, G, H> IntoJsFunc<'js, (A, B, C, D, E, F, G, H)> for OnceFn<Fun>where
Fun: FnOnce(A, B, C, D, E, F, G, H) -> R + 'js,
(A, B, C, D, E, F, G, H): FromParams<'js> + 'js,
R: IntoJs<'js> + 'js,
impl<'js, R, Fun, A, B, C, D, E, F, G, H> IntoJsFunc<'js, (A, B, C, D, E, F, G, H)> for OnceFn<Fun>where
Fun: FnOnce(A, B, C, D, E, F, G, H) -> R + 'js,
(A, B, C, D, E, F, G, H): FromParams<'js> + 'js,
R: IntoJs<'js> + 'js,
Source§fn param_requirements() -> ParamRequirement
fn param_requirements() -> ParamRequirement
Auto Trait Implementations§
impl<T> !Freeze for OnceFn<T>
impl<T> !RefUnwindSafe for OnceFn<T>
impl<T> Send for OnceFn<T>where
T: Send,
impl<T> !Sync for OnceFn<T>
impl<T> Unpin for OnceFn<T>where
T: Unpin,
impl<T> UnwindSafe for OnceFn<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more