[][src]Struct abi_stable::std_types::string::RString

#[repr(C)]
pub struct RString { /* fields omitted */ }

Ffi-safe equivalent of ::std::string::String

Example

This defines a function returning the last word of an RString.

use abi_stable::{
    std_types::RString,
    sabi_extern_fn,
};


#[sabi_extern_fn]
fn first_word(phrase:RString)->RString{
    match phrase.split_whitespace().next_back() {
        Some(x)=>x.into(),
        None=>RString::new(),
    }
}

Methods

impl RString[src]

pub const fn new() -> Self[src]

Creates a new,empty RString.

Example

use abi_stable::std_types::RString;

let str=RString::new();
 
assert_eq!(&str[..],"");

pub fn with_capacity(cap: usize) -> Self[src]

Creates a new, empty RString with the capacity to push strings that add up to cap bytes.

Example

use abi_stable::std_types::RString;

let str=RString::with_capacity(10);
 
assert_eq!(&str[..],"");
assert_eq!(str.capacity(),10);

pub fn slice<'a, I>(&'a self, i: I) -> RStr<'a> where
    str: Index<I, Output = str>, 
[src]

For slicing into RStrs.

This is an inherent method instead of an implementation of the ::std::ops::Index trait because it does not return a reference.

Example

use abi_stable::std_types::{RStr,RString};

let str=RString::from("What is that.");
 
assert_eq!(str.slice(..),RStr::from("What is that."));
assert_eq!(str.slice(..4),RStr::from("What"));
assert_eq!(str.slice(4..),RStr::from(" is that."));
assert_eq!(str.slice(4..7),RStr::from(" is"));

pub fn as_str(&self) -> &str[src]

Creates a &str with access to all the characters of the RString.

Example

use abi_stable::std_types::RString;

let str="What is that.";
assert_eq!(RString::from(str).as_str(),str);

pub const fn as_rstr(&self) -> RStr[src]

Creates an RStr<'_> with access to all the characters of the RString.

Example

use abi_stable::std_types::{RStr,RString};

let str="What is that.";
assert_eq!(
    RString::from(str).as_rstr(),
    RStr::from(str),
);

pub const fn len(&self) -> usize[src]

Returns the current length (in bytes) of the RString.

Example

use abi_stable::std_types::RString;

assert_eq!(RString::from("").len(),0);
assert_eq!(RString::from("a").len(),1);
assert_eq!(RString::from("Regular").len(),7);

pub const fn as_ptr(&self) -> *const u8[src]

Gets a raw pointer to the start of this RString's buffer.

pub const fn capacity(&self) -> usize[src]

Returns the current capacity (in bytes) of the RString.

Example

use abi_stable::std_types::RString;

let mut str=RString::with_capacity(13);

assert_eq!(str.capacity(),13);

str.push_str("What is that.");
assert_eq!(str.capacity(),13);

str.push(' ');
assert_ne!(str.capacity(),13);

pub const unsafe fn from_utf8_unchecked(vec: RVec<u8>) -> Self[src]

An unchecked conversion from a RVec<u8> to an RString.

Examples

use abi_stable::std_types::{RString,RVec};

let bytes=RVec::from("hello".as_bytes());

unsafe{
    assert_eq!( RString::from_utf8_unchecked(bytes).as_str(), "hello" );
}

pub fn from_utf8<V>(vec: V) -> Result<Self, FromUtf8Error> where
    V: Into<RVec<u8>>, 
[src]

Converts the vec vector of bytes to an RString.

Errors

This will return a Err(FromUtf8Error{..}) if vec was not valid utf-8.

Examples

use abi_stable::std_types::{RString,RVec};

let bytes_ok=RVec::from("hello".as_bytes());
let bytes_err=RVec::from(vec![255]);

assert_eq!( RString::from_utf8(bytes_ok).unwrap(), RString::from("hello") );
assert!( RString::from_utf8(bytes_err).is_err() );

pub fn from_utf16(s: &[u16]) -> Result<Self, FromUtf16Error>[src]

Decodes a utf-16 encoded &[u16] to an RString.

Errors

This will return a Err(::std::string::FromUtf16Error{..}) if vec was not valid utf-8.

Example

use abi_stable::std_types::RString;
 
let str="What the 😈.";
let str_utf16=str.encode_utf16().collect::<Vec<u16>>();

assert_eq!(
    RString::from_utf16(&str_utf16).unwrap(),
    RString::from(str),
);

Important traits for RVec<u8>
pub fn into_bytes(self) -> RVec<u8>[src]

Cheap conversion of this RString to a RVec<u8>

Example

use abi_stable::std_types::{RString,RVec};

let bytes=RVec::from("hello".as_bytes());
let str=RString::from("hello");

assert_eq!(str.into_bytes(),bytes);

pub fn into_string(self) -> String[src]

Converts this RString to a String.

Allocation

If this is invoked outside of the dynamic library/binary that created it, it will allocate a new String and move the data into it.

Example

use abi_stable::std_types::RString;

let std_str=String::from("hello");
let str=RString::from("hello");

assert_eq!(str.into_string(),std_str);

pub fn to_string(&self) -> String[src]

Copies the RString into a String.

Example

use abi_stable::std_types::RString;

assert_eq!(RString::from("world").to_string(), String::from("world"));

pub fn reserve(&mut self, additional: usize)[src]

Reserves àdditional additional capacity for any extra string data. This may reserve more than necessary for the additional capacity.

Example

use abi_stable::std_types::RString;

let mut str=RString::new();

str.reserve(10);
assert!(str.capacity()>=10);

pub fn shrink_to_fit(&mut self)[src]

Shrinks the capacity of the RString to match its length.

Example

use abi_stable::std_types::RString;

let mut str=RString::with_capacity(100);
str.push_str("nope");
str.shrink_to_fit();
assert_eq!(str.capacity(),4);

pub fn reserve_exact(&mut self, additional: usize)[src]

Reserves àdditional additional capacity for any extra string data.

Prefer using reserve for most situations.

Example

use abi_stable::std_types::RString;

let mut str=RString::new();

str.reserve_exact(10);
assert_eq!(str.capacity(),10);

pub fn push(&mut self, ch: char)[src]

Appends the ch char at the end of this RString.

Example

use abi_stable::std_types::RString;

let mut str=RString::new();

str.push('O');
str.push('O');
str.push('P');

assert_eq!(str.as_str(),"OOP");

pub fn push_str(&mut self, s: &str)[src]

Appends the s &str at the end of this RString.

Example

use abi_stable::std_types::RString;

let mut str=RString::new();

str.push_str("green ");
str.push_str("frog");

assert_eq!(str.as_str(),"green frog");

pub fn pop(&mut self) -> Option<char>[src]

Removes the last character, returns Some(_) if this RString is not empty, otherwise returns None.

Example

use abi_stable::std_types::{RString,RVec};

let mut str=RString::from("yep");

assert_eq!(str.pop(),Some('p'));
assert_eq!(str.pop(),Some('e'));
assert_eq!(str.pop(),Some('y'));
assert_eq!(str.pop(),None);

pub fn remove(&mut self, idx: usize) -> char[src]

Removes and returns the character starting at the idx byte position,

Panics

Panics if the index is out of bounds or if it is not on a char boundary.

Example

use abi_stable::std_types::{RString,RVec};

let mut str=RString::from("Galileo");

assert_eq!(str.remove(3),'i');
assert_eq!(str.as_str(),"Galleo");

assert_eq!(str.remove(4),'e');
assert_eq!(str.as_str(),"Gallo");

pub fn insert(&mut self, idx: usize, ch: char)[src]

Insert the ch character at the ìnx byte position.

Panics

Panics if the index is out of bounds or if it is not on a char boundary.

Example

use abi_stable::std_types::{RString,RVec};

let mut str=RString::from("Cap");

str.insert(1,'r');
assert_eq!(str.as_str(),"Crap");

str.insert(4,'p');
assert_eq!(str.as_str(),"Crapp");

str.insert(5,'y');
assert_eq!(str.as_str(),"Crappy");

pub fn insert_str(&mut self, idx: usize, string: &str)[src]

Insert the s string at the ìnx byte position.

Panics

Panics if the index is out of bounds or if it is not on a char boundary.

Example

use abi_stable::std_types::{RString,RVec};

let mut str=RString::from("rust");

str.insert_str(0,"T");
assert_eq!(str.as_str(),"Trust");

str.insert_str(5," the source");
assert_eq!(str.as_str(),"Trust the source");

str.insert_str(5," the types in");
assert_eq!(str.as_str(),"Trust the types in the source");

pub fn retain<F>(&mut self, pred: F) where
    F: FnMut(char) -> bool
[src]

Retains only the characters that satisfy the pred predicate

This means that a character will be removed if pred(that_character) returns false.

Example

use abi_stable::std_types::{RString,RVec};

{
    let mut str=RString::from("There were 10 people.");
    str.retain(|c| !c.is_numeric() );
    assert_eq!(str.as_str(),"There were  people.");
}
{
    let mut str=RString::from("There were 10 people.");
    str.retain(|c| !c.is_whitespace() );
    assert_eq!(str.as_str(),"Therewere10people.");
}
{
    let mut str=RString::from("There were 10 people.");
    str.retain(|c| c.is_numeric() );
    assert_eq!(str.as_str(),"10");
}

pub fn clear(&mut self)[src]

Turns this into an empty RString,keeping the same allocated buffer.

Example

use abi_stable::std_types::{RString,RVec};

let mut str=RString::from("Nurse");

assert_eq!(str.as_str(),"Nurse");
 
str.clear();
 
assert_eq!(str.as_str(),"");

impl RString[src]

Important traits for Drain<'a>
pub fn drain<I>(&mut self, range: I) -> Drain where
    str: Index<I, Output = str>, 
[src]

Creates an iterator that yields the chars in the range, removing the characters in that range in the process.

Panic

Panics if the start or end of the range are not on a on a char boundary, or if it is out of bounds.

Example

use abi_stable::std_types::RString;

let orig="Not a single way";

{
    let mut str=RString::from(orig);
    assert_eq!(
        str.drain(..).collect::<String>(),
        orig,
    );
    assert_eq!(str.as_str(),"");
}
{
    let mut str=RString::from(orig);
    assert_eq!(
        str.drain(..4).collect::<String>(),
        "Not ",
    );
    assert_eq!(str.as_str(),"a single way");
}
{
    let mut str=RString::from(orig);
    assert_eq!(
        str.drain(4..).collect::<String>(),
        "a single way",
    );
    assert_eq!(str.as_str(),"Not ");
}
{
    let mut str=RString::from(orig);
    assert_eq!(
        str.drain(4..13).collect::<String>(),
        "a single ",
    );
    assert_eq!(str.as_str(),"Not way");
}

Trait Implementations

impl IntoReprRust for RString[src]

type ReprRust = String

impl GetStaticEquivalent_ for RString[src]

type StaticEquivalent = _static_RString

impl SharedStableAbi for RString[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

impl AsRef<str> for RString[src]

impl AsRef<[u8]> for RString[src]

impl<'a> Into<RString> for RStr<'a>[src]

impl Into<String> for RString[src]

impl<'a> Into<Cow<'a, str>> for RString[src]

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

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

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

impl From<String> for RString[src]

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

impl IntoIterator for RString[src]

type Item = char

The type of the elements being iterated over.

type IntoIter = IntoIter

Which kind of iterator are we turning this into?

impl Clone for RString[src]

impl Default for RString[src]

Returns an empty RString

impl Eq for RString[src]

impl Ord for RString[src]

impl PartialEq<RString> for RString[src]

impl PartialOrd<RString> for RString[src]

impl Display for RString[src]

impl Debug for RString[src]

impl FromStr for RString[src]

type Err = <String as FromStr>::Err

The associated error which can be returned from parsing.

impl Deref for RString[src]

type Target = str

The resulting type after dereferencing.

impl Hash for RString[src]

impl FromIterator<char> for RString[src]

impl<'a> FromIterator<&'a char> for RString[src]

impl Write for RString[src]

impl Borrow<str> for RString[src]

impl<'de> Deserialize<'de> for RString[src]

impl Serialize for RString[src]

Auto Trait Implementations

impl Send for RString

impl Sync for RString

impl Unpin for RString

impl UnwindSafe for RString

impl RefUnwindSafe for RString

Blanket Implementations

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

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

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

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

type ROwned = T

type RBorrowed = &'a T

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

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

impl<I> IntoIterator for I where
    I: Iterator
[src]

type Item = <I as Iterator>::Item

The type of the elements being iterated over.

type IntoIter = I

Which kind of iterator are we turning this into?

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<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> Borrow<T> for T where
    T: ?Sized
[src]

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

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

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

type Type = T

The same type as Self. Read more

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

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

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> DeserializeOwned for T where
    T: Deserialize<'de>, 
[src]