#wrapper #reference #container #own #borrow

mown

Maybe owned values. Wrappers for values that can be either owned or borrowed.

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

#236 in Data structures

Download history 579/week @ 2023-12-23 1206/week @ 2023-12-30 826/week @ 2024-01-06 1221/week @ 2024-01-13 1348/week @ 2024-01-20 1890/week @ 2024-01-27 1879/week @ 2024-02-03 1612/week @ 2024-02-10 1822/week @ 2024-02-17 1661/week @ 2024-02-24 2328/week @ 2024-03-02 1770/week @ 2024-03-09 1337/week @ 2024-03-16 1942/week @ 2024-03-23 2170/week @ 2024-03-30 1389/week @ 2024-04-06

7,175 downloads per month
Used in 42 crates (5 directly)

MIT/Apache

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

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.

No runtime deps