6 releases (1 stable)
1.0.0 | Apr 4, 2024 |
---|---|
0.2.2 | Dec 6, 2022 |
0.2.1 | Apr 26, 2020 |
0.2.0 | Mar 24, 2020 |
0.1.1 | Mar 22, 2020 |
#251 in Data structures
11,370 downloads per month
Used in 71 crates
(5 directly)
12KB
199 lines
Maybe Owned values
Documentation | Crate informations | Repository |
This crate provides two simple wrappers
Mown
and
MownMut
for values that can be either owned or borrowed.
The type Mown
is an simple enum
type with two constructors:
pub trait Borrowed {
type Owned: Borrow<Self>;
}
pub enum Mown<'a, T: Borrowed> {
Owned(T::Owned),
Borrowed(&'a T)
}
The mutable version MownMut
follows the same definition with a mutable
reference.
This is very similar to the standard
Cow
type, except that it is not possible to transform a borrowed value into an owned
one.
This is also slightly different from the similar crate
boow
since the ToOwned
trait allow for the use of Mown
with unsized types
(for instance Mown<str>
) and with mutable references.
Basic Usage
One basic use case for the Mown
type is the situation where one wants to
reuse some input borrowed value under some condition, or then use a custom
owned value.
use mown::Mown;
fn function(input_value: &String) -> Mown<String> {
if condition {
Mown::Borrowed(input_value)
} else {
let custom_value: String = "foo_".to_string() + input_value + "_bar";
Mown::Owned(custom_value)
}
}
One can also wrap unsized types for which the provided ToOwned
trait has been implemented.
This is the case for the unsized str
type with the sized owned type String
.
use mown::Mown;
fn function(input_value: &str) -> Mown<str> {
if condition {
Mown::Borrowed(input_value)
} else {
let custom_value: String = "foo_".to_string() + input_value + "_bar";
Mown::Owned(custom_value)
}
}
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
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.