#[repr(C)]pub struct FfiSafeStr { /* private fields */ }
Expand description
A helper struct for passing rust strings over the ABI boundary.
This type can only be constructed from a valid rust string, so it’s not
necessary to validate the utf8 encoding when converting back to &str
.
Implementations§
Source§impl FfiSafeStr
impl FfiSafeStr
pub fn len(self) -> usize
pub fn is_empty(self) -> bool
Sourcepub unsafe fn from_raw_parts(pointer: NonNull<u8>, len: usize) -> Self
pub unsafe fn from_raw_parts(pointer: NonNull<u8>, len: usize) -> Self
§Safety
pointer
and len
must be correct pointer and length
Sourcepub unsafe fn from_utf8_unchecked(bytes: &[u8]) -> Self
pub unsafe fn from_utf8_unchecked(bytes: &[u8]) -> Self
§Safety
bytes
must represent a valid utf8 string.
pub fn into_raw_parts(self) -> (*mut u8, usize)
Sourcepub unsafe fn as_str<'a>(self) -> &'a str
pub unsafe fn as_str<'a>(self) -> &'a str
Converts self
back to a borrowed string &str
.
§Safety
FfiSafeStr
can only be constructed from a valid rust str
,
so you only need to make sure that the origial str
outlives the lifetime 'a
.
This should generally be true when borrowing strings owned by the current
function and calling a function via FFI, but borrowing global data or
data stored within a Rc
for example is probably unsafe.
Sourcepub unsafe fn as_bytes<'a>(self) -> &'a [u8] ⓘ
pub unsafe fn as_bytes<'a>(self) -> &'a [u8] ⓘ
Converts self
back to a borrowed string &[u8]
.
§Safety
FfiSafeStr
can only be constructed from a valid rust byte slice,
so you only need to make sure that the original &[u8]
outlives the lifetime 'a
.
This should generally be true when borrowing strings owned by the current
function and calling a function via FFI, but borrowing global data or
data stored within a Rc
for example is probably unsafe.
Trait Implementations§
Source§impl Clone for FfiSafeStr
impl Clone for FfiSafeStr
Source§fn clone(&self) -> FfiSafeStr
fn clone(&self) -> FfiSafeStr
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for FfiSafeStr
impl Debug for FfiSafeStr
Source§impl Default for FfiSafeStr
impl Default for FfiSafeStr
Source§impl<'a> From<&'a str> for FfiSafeStr
impl<'a> From<&'a str> for FfiSafeStr
Source§impl GetStaticEquivalent_ for FfiSafeStr
impl GetStaticEquivalent_ for FfiSafeStr
Source§type StaticEquivalent = _static_FfiSafeStr
type StaticEquivalent = _static_FfiSafeStr
'static
equivalent of Self
Source§impl StableAbi for FfiSafeStr
impl StableAbi for FfiSafeStr
Source§const LAYOUT: &'static TypeLayout
const LAYOUT: &'static TypeLayout
Source§type IsNonZeroType = False
type IsNonZeroType = False
Source§const ABI_CONSTS: AbiConsts = _
const ABI_CONSTS: AbiConsts = _
const
-equivalents of the associated types.impl Copy for FfiSafeStr
Auto Trait Implementations§
impl Freeze for FfiSafeStr
impl RefUnwindSafe for FfiSafeStr
impl !Send for FfiSafeStr
impl !Sync for FfiSafeStr
impl Unpin for FfiSafeStr
impl UnwindSafe for FfiSafeStr
Blanket Implementations§
Source§impl<T> AlignerFor<1> for T
impl<T> AlignerFor<1> for T
Source§impl<T> AlignerFor<1024> for T
impl<T> AlignerFor<1024> for T
Source§type Aligner = AlignTo1024<T>
type Aligner = AlignTo1024<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<128> for T
impl<T> AlignerFor<128> for T
Source§type Aligner = AlignTo128<T>
type Aligner = AlignTo128<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<16> for T
impl<T> AlignerFor<16> for T
Source§impl<T> AlignerFor<16384> for T
impl<T> AlignerFor<16384> for T
Source§type Aligner = AlignTo16384<T>
type Aligner = AlignTo16384<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<2> for T
impl<T> AlignerFor<2> for T
Source§impl<T> AlignerFor<2048> for T
impl<T> AlignerFor<2048> for T
Source§type Aligner = AlignTo2048<T>
type Aligner = AlignTo2048<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<256> for T
impl<T> AlignerFor<256> for T
Source§type Aligner = AlignTo256<T>
type Aligner = AlignTo256<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<32> for T
impl<T> AlignerFor<32> for T
Source§impl<T> AlignerFor<32768> for T
impl<T> AlignerFor<32768> for T
Source§type Aligner = AlignTo32768<T>
type Aligner = AlignTo32768<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<4> for T
impl<T> AlignerFor<4> for T
Source§impl<T> AlignerFor<4096> for T
impl<T> AlignerFor<4096> for T
Source§type Aligner = AlignTo4096<T>
type Aligner = AlignTo4096<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<512> for T
impl<T> AlignerFor<512> for T
Source§type Aligner = AlignTo512<T>
type Aligner = AlignTo512<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> AlignerFor<64> for T
impl<T> AlignerFor<64> for T
Source§impl<T> AlignerFor<8> for T
impl<T> AlignerFor<8> for T
Source§impl<T> AlignerFor<8192> for T
impl<T> AlignerFor<8192> for T
Source§type Aligner = AlignTo8192<T>
type Aligner = AlignTo8192<T>
AlignTo*
type which aligns Self
to ALIGNMENT
.Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoClones<(T,)> for Twhere
T: Clone,
impl<T> IntoClones<(T,)> for Twhere
T: Clone,
fn into_clones(self) -> (T,)
Source§impl<T> IntoClones<(T, T)> for Twhere
T: Clone,
impl<T> IntoClones<(T, T)> for Twhere
T: Clone,
fn into_clones(self) -> (T, T)
Source§impl<T> IntoClones<(T, T, T)> for Twhere
T: Clone,
impl<T> IntoClones<(T, T, T)> for Twhere
T: Clone,
fn into_clones(self) -> (T, T, T)
Source§impl<T> IntoClones<(T, T, T, T)> for Twhere
T: Clone,
impl<T> IntoClones<(T, T, T, T)> for Twhere
T: Clone,
fn into_clones(self) -> (T, T, T, T)
Source§impl<T> IntoClones<(T, T, T, T, T)> for Twhere
T: Clone,
impl<T> IntoClones<(T, T, T, T, T)> for Twhere
T: Clone,
fn into_clones(self) -> (T, T, T, T, T)
Source§impl<T> IntoClones<(T, T, T, T, T, T)> for Twhere
T: Clone,
impl<T> IntoClones<(T, T, T, T, T, T)> for Twhere
T: Clone,
fn into_clones(self) -> (T, T, T, T, T, T)
Source§impl<T> IntoClones<(T, T, T, T, T, T, T)> for Twhere
T: Clone,
impl<T> IntoClones<(T, T, T, T, T, T, T)> for Twhere
T: Clone,
fn into_clones(self) -> (T, T, T, T, T, T, T)
Source§impl<T> IntoClones<(T, T, T, T, T, T, T, T)> for Twhere
T: Clone,
impl<T> IntoClones<(T, T, T, T, T, T, T, T)> for Twhere
T: Clone,
fn into_clones(self) -> (T, T, T, T, T, T, T, T)
Source§impl<T> IntoClones<(T, T, T, T, T, T, T, T, T)> for Twhere
T: Clone,
impl<T> IntoClones<(T, T, T, T, T, T, T, T, T)> for Twhere
T: Clone,
fn into_clones(self) -> (T, T, T, T, T, T, T, T, T)
Source§impl<T> IntoClones<(T, T, T, T, T, T, T, T, T, T)> for Twhere
T: Clone,
impl<T> IntoClones<(T, T, T, T, T, T, T, T, T, T)> for Twhere
T: Clone,
fn into_clones(self) -> (T, T, T, T, T, T, T, T, T, T)
Source§impl<T> IntoClones<(T, T, T, T, T, T, T, T, T, T, T)> for Twhere
T: Clone,
impl<T> IntoClones<(T, T, T, T, T, T, T, T, T, T, T)> for Twhere
T: Clone,
fn into_clones(self) -> (T, T, T, T, T, T, T, T, T, T, T)
Source§impl<'a, T> RCowCompatibleRef<'a> for Twhere
T: Clone + 'a,
impl<'a, T> RCowCompatibleRef<'a> for Twhere
T: Clone + 'a,
Source§fn as_c_ref(from: &'a T) -> <T as RCowCompatibleRef<'a>>::RefC
fn as_c_ref(from: &'a T) -> <T as RCowCompatibleRef<'a>>::RefC
Source§fn as_rust_ref(from: <T as RCowCompatibleRef<'a>>::RefC) -> &'a T
fn as_rust_ref(from: <T as RCowCompatibleRef<'a>>::RefC) -> &'a T
Source§impl<S> ROExtAcc for S
impl<S> ROExtAcc for S
Source§fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
offset
. Read moreSource§fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
offset
. Read moreSource§fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
offset
. Read moreSource§fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
offset
. Read moreSource§impl<S> ROExtOps<Aligned> for S
impl<S> ROExtOps<Aligned> for S
Source§fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F
fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F
offset
) with value
,
returning the previous value of the field. Read moreSource§fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere
F: Copy,
fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere
F: Copy,
Source§impl<S> ROExtOps<Unaligned> for S
impl<S> ROExtOps<Unaligned> for S
Source§fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F
fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F
offset
) with value
,
returning the previous value of the field. Read moreSource§fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere
F: Copy,
fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere
F: Copy,
Source§impl<T> SelfOps for Twhere
T: ?Sized,
impl<T> SelfOps for Twhere
T: ?Sized,
Source§fn piped<F, U>(self, f: F) -> U
fn piped<F, U>(self, f: F) -> U
Source§fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
piped
except that the function takes &Self
Useful for functions that take &Self
instead of Self
. Read moreSource§fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
piped
, except that the function takes &mut Self
.
Useful for functions that take &mut Self
instead of Self
.Source§fn mutated<F>(self, f: F) -> Self
fn mutated<F>(self, f: F) -> Self
Source§fn observe<F>(self, f: F) -> Self
fn observe<F>(self, f: F) -> Self
Source§fn as_ref_<T>(&self) -> &T
fn as_ref_<T>(&self) -> &T
AsRef
,
using the turbofish .as_ref_::<_>()
syntax. Read more