| Crates.io | another-option |
| lib.rs | another-option |
| version | 0.1.1 |
| created_at | 2019-12-30 06:08:00.802055+00 |
| updated_at | 2019-12-30 06:11:36.264887+00 |
| description | Another option data type; useful when allocations are expensive. |
| homepage | |
| repository | https://github.com/xpe/another-option |
| max_upload_size | |
| id | 193441 |
| size | 13,092 |
another-optionThis package provides Opt<T> as an alternative to Option<T>. Why would you want another option? Opt provides advantages when:
T, is expensive to allocate, andNone and Some(...) is frequent.Since Rust's built-in Option<T> is an enum, it will drop its Some(...) value when None is assigned.
let mut option: Option<String> = Some(String::with_capacity(1024));
option = None; // drops the string
option = Some(String::with_capacity(1024)); // allocation
Since Opt<T> always owns the value, even when empty, the value can be reused without drops or allocations:
use crate::another_option::Opt;
let mut opt: Opt<String> = Opt::some(String::with_capacity(1024));
opt.map_in_place(|v| v.push_str("value"));
opt.set_none(); // does *not* drop the string
opt.set_some();
assert_eq!(opt.unwrap(), String::from("value"));