[][src]Enum abi_stable::std_types::cow::RCow

#[repr(C)]pub enum RCow<'a, B: ?Sized> where
    B: BorrowOwned<'a>, 
{ Borrowed(<B as BorrowOwned<'a>>::RBorrowed), Owned(<B as BorrowOwned<'a>>::ROwned), }

Ffi-safe equivalent of ::std::borrow::Cow.

The most common examples of this type are:

  • RCow<'_,str>: contains an RStr<'_> or an RString.

  • RCow<'_,[T]>: contains an RSlice<'_,T> or an RVec.

  • RCow<'_,T>: contains a &T or a T.

Example

Using a RCow<'a,str>.

This implements a solution to the well known fizzbuzz problem.

use abi_stable::std_types::RCow;

fn fizzbuzz(n:u32)->RCow<'static,str>{
    match (n%3,n%5) {
        (0,0)=>RCow::from("FizzBuzz"),
        (0,_)=>RCow::from("Fizz"),
        (_,0)=>RCow::from("Buzz"),
        (_,_)=>RCow::from(n.to_string()),
    }
}

for n in 1..=100{
    println!("{}",fizzbuzz(n));
}

Note:this example allocates when the number is neither a multiple of 5 or 3.

Variants

Borrowed(<B as BorrowOwned<'a>>::RBorrowed)
Owned(<B as BorrowOwned<'a>>::ROwned)

Implementations

impl<'a, B: ?Sized> RCow<'a, B> where
    B: BorrowOwned<'a>, 
[src]

pub fn to_mut(&mut self) -> &mut B::ROwned[src]

Get a mutable reference to the owner form of RCow, converting to the owned form if it is currently the borrowed form.

Examples

use abi_stable::std_types::RCow;
 
let mut cow:RCow<'_,str>=RCow::from("Hello");
 
assert_eq!(&*cow,"Hello");
assert!(cow.is_borrowed());
 
cow.to_mut().push_str(", world!");
 
assert!(cow.is_owned());
assert_eq!(cow,RCow::from("Hello, world!"));
 

pub fn into_owned(self) -> B::ROwned[src]

Unwraps into the owned owner form of RCow, converting to the owned form if it is currently the borrowed form.

Examples

use abi_stable::std_types::RCow;
 
let mut cow:RCow<'_,str>=RCow::from("Hello");

assert_eq!(&*cow,"Hello");
 
let mut buff=cow.into_owned();
buff.push_str(", world!");
 
assert_eq!(&*buff,"Hello, world!");
 

pub fn borrowed<'b: 'a>(&'b self) -> <B as BorrowOwned<'b>>::RBorrowed[src]

Gets the contents of the RCow casted to the borrowed variant.

Examples

use abi_stable::std_types::{RCow,RSlice};
{
    let cow:RCow<'_,[u8]>=RCow::from(&[0,1,2,3][..]);
    assert_eq!( cow.borrowed(), RSlice::from_slice(&[0,1,2,3]) );
}
{
    let cow:RCow<'_,[u8]>=RCow::from(vec![0,1,2,3]);
    assert_eq!( cow.borrowed(), RSlice::from_slice(&[0,1,2,3]) );
}

pub fn is_borrowed(&self) -> bool[src]

Whether this is a borrowing RCow.

Examples

use abi_stable::std_types::RCow;
 
{
    let cow:RCow<'_,[u8]>=RCow::from(&[0,1,2,3][..]);
    assert!( cow.is_borrowed() );
}
{
    let cow:RCow<'_,[u8]>=RCow::from(vec![0,1,2,3]);
    assert!( !cow.is_borrowed() );
}
 

pub fn is_owned(&self) -> bool[src]

Whether this is an owning RCow.

Examples

use abi_stable::std_types::RCow;
 
let cow:RCow<'_,[u8]>=RCow::from(&[0,1,2,3][..]);
assert!( !cow.is_owned() );
 
let cow:RCow<'_,[u8]>=RCow::from(vec![0,1,2,3]);
assert!( cow.is_owned() );
 

impl<'a, T> RCow<'a, [T]> where
    T: Clone
[src]

pub fn from_slice(this: &'a [T]) -> Self[src]

For converting a &'a [T] to an RCow<'a,[T]>, most useful when converting from &'a [T;N] because it coerces the array to a slice.

Trait Implementations

impl<'a, B: ?Sized> AsRef<B> for RCow<'a, B> where
    B: BorrowOwned<'a>, 
[src]

impl<'a, B: ?Sized> Borrow<B> for RCow<'a, B> where
    B: BorrowOwned<'a>, 
[src]

impl<'a, B: ?Sized> Clone for RCow<'a, B> where
    B: BorrowOwned<'a>,
    B::ROwned: Clone
[src]

impl<'a, B: ?Sized> Copy for RCow<'a, B> where
    B: BorrowOwned<'a>,
    B::ROwned: Copy
[src]

impl<'a, B: ?Sized> Debug for RCow<'a, B> where
    B: Debug,
    B: BorrowOwned<'a>, 
[src]

impl<'a, B: ?Sized> Deref for RCow<'a, B> where
    B: BorrowOwned<'a>, 
[src]

type Target = B

The resulting type after dereferencing.

impl<'de, 'a, T> Deserialize<'de> for RCow<'a, [T]> where
    T: Clone + Deserialize<'de>, 
[src]

impl<'de, 'a> Deserialize<'de> for RCow<'a, str>[src]

impl<'de, 'a, T> Deserialize<'de> for RCow<'a, T> where
    T: Clone + Deserialize<'de>, 
[src]

impl<'a, B: ?Sized> Display for RCow<'a, B> where
    B: BorrowOwned<'a>,
    B: Display
[src]

impl<'a, B: ?Sized> Eq for RCow<'a, B> where
    B: Eq,
    B: BorrowOwned<'a>, 
[src]

impl<'a, T> From<&'a [T]> for RCow<'a, [T]> where
    T: Clone
[src]

impl<'a> From<&'a RString> for RCow<'a, str>[src]

impl<'a> From<&'a String> for RCow<'a, str>[src]

impl<'a> From<&'a str> for RCow<'a, str>[src]

impl<'a, B: ?Sized> From<Cow<'a, B>> for RCow<'a, B> where
    B: BorrowOwned<'a>, 
[src]

impl<'a, T> From<RSlice<'a, T>> for RCow<'a, [T]> where
    T: Clone
[src]

impl<'a> From<RStr<'a>> for RCow<'a, str>[src]

impl<'a> From<RString> for RCow<'a, str>[src]

impl<'a, T> From<RVec<T>> for RCow<'a, [T]> where
    T: Clone
[src]

impl<'a> From<String> for RCow<'a, str>[src]

impl<'a, T> From<Vec<T>> for RCow<'a, [T]> where
    T: Clone
[src]

impl<'a, B: ?Sized> GetStaticEquivalent_ for RCow<'a, B> where
    B: BorrowOwned<'a>,
    B: __GetStaticEquivalent_,
    <B as BorrowOwned<'a>>::RBorrowed: StableAbi,
    <B as BorrowOwned<'a>>::ROwned: StableAbi
[src]

type StaticEquivalent = _static_RCow<'static, __GetStaticEquivalent<B>>

impl<'a, B: ?Sized> Hash for RCow<'a, B> where
    B: Hash,
    B: BorrowOwned<'a>, 
[src]

impl<'a, B: ?Sized> Into<Cow<'a, B>> for RCow<'a, B> where
    B: BorrowOwned<'a>, 
[src]

impl<'a, B: ?Sized> IntoReprRust for RCow<'a, B> where
    B: BorrowOwned<'a>, 
[src]

type ReprRust = Cow<'a, B>

impl<'a, B: ?Sized> Ord for RCow<'a, B> where
    B: Ord,
    B: BorrowOwned<'a>, 
[src]

impl<'a, B: ?Sized> PartialEq<RCow<'a, B>> for RCow<'a, B> where
    B: PartialEq,
    B: BorrowOwned<'a>, 
[src]

impl<'a, B: ?Sized> PartialOrd<RCow<'a, B>> for RCow<'a, B> where
    B: PartialOrd,
    B: BorrowOwned<'a>, 
[src]

impl<'a, B: ?Sized> Serialize for RCow<'a, B> where
    B: BorrowOwned<'a>,
    B: Serialize
[src]

impl<'a, B: ?Sized> SharedStableAbi for RCow<'a, B> where
    B: BorrowOwned<'a>,
    B: __GetStaticEquivalent_,
    <B as BorrowOwned<'a>>::RBorrowed: StableAbi,
    <B as BorrowOwned<'a>>::ROwned: StableAbi
[src]

type IsNonZeroType = False

Whether this type has a single invalid bit-pattern. Read more

type Kind = __ValueKind

The kind of abi stability of this type,there are 2: Read more

Auto Trait Implementations

impl<'a, B: ?Sized> RefUnwindSafe for RCow<'a, B> where
    <B as BorrowOwned<'a>>::RBorrowed: RefUnwindSafe,
    <B as BorrowOwned<'a>>::ROwned: RefUnwindSafe

impl<'a, B: ?Sized> Send for RCow<'a, B> where
    <B as BorrowOwned<'a>>::RBorrowed: Send,
    <B as BorrowOwned<'a>>::ROwned: Send

impl<'a, B: ?Sized> Sync for RCow<'a, B> where
    <B as BorrowOwned<'a>>::RBorrowed: Sync,
    <B as BorrowOwned<'a>>::ROwned: Sync

impl<'a, B: ?Sized> Unpin for RCow<'a, B> where
    <B as BorrowOwned<'a>>::RBorrowed: Unpin,
    <B as BorrowOwned<'a>>::ROwned: Unpin

impl<'a, B: ?Sized> UnwindSafe for RCow<'a, B> where
    <B as BorrowOwned<'a>>::RBorrowed: UnwindSafe,
    <B as BorrowOwned<'a>>::ROwned: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<'a, T> BorrowOwned<'a> for T where
    T: 'a + Clone
[src]

type ROwned = T

type RBorrowed = &'a T

impl<T> DeserializeOwned for T where
    T: for<'de> Deserialize<'de>, 
[src]

impl<T> From<T> for T[src]

impl<This> GetConstGenericVTable for This where
    This: StableAbi + Eq + PartialEq<This> + Debug + Send + Sync
[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> SelfOps for T where
    T: ?Sized
[src]

impl<This> StableAbi for This where
    This: SharedStableAbi<Kind = ValueKind>, 
[src]

impl<T> StringExt for T where
    T: Borrow<str> + ?Sized
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<This> TransmuteElement for This where
    This: ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The error type returned when the conversion fails.

impl<T> TypeIdentity for T where
    T: ?Sized
[src]

type Type = T

The same type as Self. Read more