Crates.io | take_ref |
lib.rs | take_ref |
version | 0.2.0 |
source | src |
created_at | 2020-09-14 09:30:43.751385 |
updated_at | 2020-09-15 03:45:23.202535 |
description | TakeRef, TakeSlice, and TakeString traits enable treating references/slices and values interchangeably. They can be treated as references/slices. And you can take ownership of the value within with a clone performed only as needed. |
homepage | |
repository | https://github.com/bazald/take_ref/ |
max_upload_size | |
id | 288530 |
size | 27,791 |
take_ref
provides TakeRef
, TakeSlice
, and TakeString
traits which enable treating references/slices and values interchangeably.
They can be treated as references/slices.
And you can take ownership of the value within with a clone performed only as needed.
The example take_slice
can take in both &[i64]
and Vec<i64>
instances and refer to them multiple times
before finally deciding that it needs to take ownership of a Vec<i64>
.
At that point if it is a &[i64]
a Vec<i64>
is constructed from the &[i64]
.
On the other hand, if it is a Vec<i64>
ownership is transferred directly without overhead.
use take_ref::TakeSlice;
fn take_slice(value: impl TakeSlice<i64>) {
value.as_slice();
value.as_slice();
value.take();
}