Crates.io | maybe-owned |
lib.rs | maybe-owned |
version | 0.3.4 |
source | src |
created_at | 2017-05-17 13:05:42.101327 |
updated_at | 2020-05-23 01:30:58.145244 |
description | provides a `MaybeOwned` (and `MaybeOwnedMut`) type similar to std's `Cow` but it implements `From |
homepage | |
repository | https://github.com/rustonaut/maybe-owned |
max_upload_size | |
id | 14920 |
size | 51,098 |
provides a MaybeOwned<'a,T>
type different to std's Cow
it implements From<T>
and From<&'a T>
and does not require ToOwned
This crate provides a MaybeOwned<'a,T>
enum. Different to std::borrow::Cow
it
implements From<T>
and From<&'a T>
and does not require a ToOwned
implementation.
While this can be nice for API's mainly consuming T's not implementing ToOwned
or implementing
ToOwned
through Clone
it also means it's borrowed version of String
is
&String
and not &str
making it less performant for cases like String
or Vec
.
Documentation can be viewed on docs.rs.
Take a look at the examples dir and the documentation for more complete examples.
The main benefit of MaybeOwned
over Cow
is for API design,
allowing API consumer to pass in both T
and &'a T
:
//... in a trait implementation
fn register<D>(&mut self, key: SomeId, data: D)
where D: Into<MaybeOwned<'a, Data>>
{
self.map.entry(key).or_insert_with(||data.into());
}
//...
//... in usage
// use owned data
registry.register(id1, data_owned);
// use a reference to the data
registry.register(id2, &data_ref);
// it ok to use the same reference again
registry.register(id3, &data_ref);
//...
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
v0.3.4
:
Added make_owned()
as a to_mut()
replacement,
but also available for MaybeOwnedMut
and more
clear in it's functionality.
Added a as_mut()
method to MaybeOwned
which
return a Option<&mut T>
Added missing BorrowMut implementation
for MaybeOwnedMut
v0.3.3
:
v0.3.2
:
std::ops
implementationsv0.3.1
:
serde
support