Skip to main content

StrVec

Struct StrVec 

Source
pub struct StrVec(SEXP);
Expand description

Owned handle to an R character vector (STRSXP).

This wrapper provides safe methods for building character vectors element-by-element with proper GC protection.

Tuple Fields§

§0: SEXP

Implementations§

Source§

impl StrVec

Source

pub const unsafe fn from_raw(sexp: SEXP) -> Self

Wrap an existing STRSXP without additional checks.

§Safety

Caller must ensure sexp is a valid character vector (STRSXP) whose lifetime remains managed by R.

Source

pub const fn as_sexp(self) -> SEXP

Get the underlying SEXP.

Source

pub fn len(self) -> isize

Length of the character vector (number of elements).

Source

pub fn is_empty(self) -> bool

Returns true if the vector is empty.

Source

pub fn get_charsxp(self, idx: isize) -> Option<SEXP>

Get the CHARSXP at the given index.

Returns None if out of bounds.

Source

pub fn get_str(self, idx: isize) -> Option<&'static str>

Get the string at the given index (zero-copy).

Returns None if out of bounds or if the element is NA_character_. Panics if the CHARSXP is not valid UTF-8 (should not happen in a UTF-8 locale).

Source

pub fn get_cow(self, idx: isize) -> Option<Cow<'static, str>>

Get the string at the given index as Cow<str> (encoding-safe).

Returns Cow::Borrowed for UTF-8 strings (zero-copy), Cow::Owned for non-UTF-8 strings (translated via Rf_translateCharUTF8). Returns None if out of bounds or NA_character_.

Source

pub fn iter(self) -> StrVecIter

Iterate over elements as Option<&str>.

NA_character_ elements yield None, valid strings yield Some(&str). Zero-copy — each &str borrows directly from R’s CHARSXP.

Source

pub fn iter_cow(self) -> StrVecCowIter

Iterate over elements as Option<Cow<str>> (encoding-safe).

Like iter but handles non-UTF-8 CHARSXPs gracefully.

Source

pub unsafe fn set_charsxp(self, idx: isize, charsxp: SEXP)

Set a CHARSXP at the given index, protecting it during insertion.

This is the safe way to insert a freshly allocated CHARSXP into a string vector.

§Safety
  • Must be called from the R main thread
  • charsxp must be a valid CHARSXP (from Rf_mkChar* or STRING_ELT)
  • self must be a valid, protected STRSXP
§Panics

Panics if idx is out of bounds.

Source

pub unsafe fn set_charsxp_unchecked(self, idx: isize, charsxp: SEXP)

Set a CHARSXP without protecting it.

§Safety

In addition to the safety requirements of set_charsxp:

  • The caller must ensure charsxp is already protected or from the global CHARSXP cache.
Source

pub unsafe fn set_str(self, idx: isize, s: &str)

Set an element from a Rust string.

Creates a CHARSXP from the string and inserts it safely.

§Safety
  • Must be called from the R main thread
  • self must be a valid, protected STRSXP
§Panics

Panics if idx is out of bounds.

Source

pub unsafe fn set_na(self, idx: isize)

Set an element to NA_character_.

§Safety
  • Must be called from the R main thread
  • self must be a valid, protected STRSXP
§Panics

Panics if idx is out of bounds.

Source

pub unsafe fn set_opt_str(self, idx: isize, s: Option<&str>)

Set an element from an optional string.

None becomes NA_character_.

§Safety
  • Must be called from the R main thread
  • self must be a valid, protected STRSXP
§Panics

Panics if idx is out of bounds.

Trait Implementations§

Source§

impl Clone for StrVec

Source§

fn clone(&self) -> StrVec

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for StrVec

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl IntoIterator for StrVec

Source§

type Item = Option<&'static str>

The type of the elements being iterated over.
Source§

type IntoIter = StrVecIter

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more
Source§

impl IntoR for StrVec

Source§

type Error = Infallible

The error type for fallible conversions. Read more
Source§

fn try_into_sexp(self) -> Result<SEXP, Self::Error>

Try to convert this value to an R SEXP. Read more
Source§

unsafe fn try_into_sexp_unchecked(self) -> Result<SEXP, Self::Error>

Try to convert to SEXP without thread safety checks. Read more
Source§

fn into_sexp(self) -> SEXP

Convert this value to an R SEXP, panicking on error. Read more
Source§

unsafe fn into_sexp_unchecked(self) -> SEXP
where Self: Sized,

Convert to SEXP without thread safety checks, panicking on error. Read more
Source§

impl TryFromSexp for StrVec

Source§

type Error = SexpError

The error type returned when conversion fails.
Source§

fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error>

Attempt to convert an R SEXP to this Rust type. Read more
Source§

unsafe fn try_from_sexp_unchecked(sexp: SEXP) -> Result<Self, Self::Error>

Convert from SEXP without thread safety checks. Read more
Source§

impl Copy for StrVec

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> RClone for T
where T: Clone,

Source§

fn clone(&self) -> T

Create a deep copy of this value.
Source§

impl<T> RCopy for T
where T: Copy,

Source§

fn copy(&self) -> T

Create a bitwise copy of this value. Read more
Source§

fn is_copy(&self) -> bool

Check if this type implements Copy. Read more
Source§

impl<T> RDebug for T
where T: Debug,

Source§

fn debug_str(&self) -> String

Get a compact debug string representation.
Source§

fn debug_str_pretty(&self) -> String

Get a pretty-printed debug string with indentation.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.