This library is a natural extension of the std::cell::OnceCell (or its original crate once_cell) library. This library provides a single-linked list OnceList type that allows you to store multiple values in a single OnceList instance even without the need for the mutability.
Alternatives (Consider using these crates first!)
once_cell- The original crate that provides aOnceCelltype. If you only need to store a single value, this crate is quite enough.elsa- A crate that providesFrozencollection types that allows you to store multiple values without the need for the mutability. They provides something similar toVecorHashMap, so if your use case requires more than 3-ish values or you need more complex data structure than a single-linked list, then you should use this crate instead.
Usage
A simple example:
use OnceList;
// Create a new empty list. Note that the variable is immutable.
let list = new;
// You can push values to the list without the need for mutability.
list.push;
list.push;
// Or you can push multiple values at once.
list.extend;
// You can iterate over the list.
assert_eq!;
// Some methods are mutable only.
let mut list_mut = list;
// You can remove (take) a value from the list.
let removed = list_mut.remove;
assert_eq!;
assert_eq!;
Features
By default, none of the features are enabled.
-
nightly: Enables the nightly-only features. Particularly, uses theallocator_apistd unstable feature. Note that even without this feature, this crate still supports the allocators thanks to theallocator_api2crate. -
sync: This library internally usesstd::cell::OnceCellwhich is not thread-safe. When you enable this feature, this library uses the thread-safestd::sync::OnceLockinstead.