#[repr(transparent)]pub struct Symbol(_);
Expand description
A type wrapping either a StaticSymbol
or a Value pointer to a RSymbol
struct.
All Value
methods should be available on this type through Deref
,
but some may be missed by this documentation.
Implementations
sourceimpl Symbol
impl Symbol
sourcepub fn from_value(val: Value) -> Option<Self>
pub fn from_value(val: Value) -> Option<Self>
Return Some(Symbol)
if val
is a Symbol
, None
otherwise.
Examples
use magnus::{eval, Symbol};
assert!(Symbol::from_value(eval(":foo").unwrap()).is_some());
assert!(Symbol::from_value(eval(r#""bar".to_sym"#).unwrap()).is_some());
assert!(Symbol::from_value(eval(r#""baz""#).unwrap()).is_none());
sourcepub fn new<T: AsRef<str>>(name: T) -> Self
pub fn new<T: AsRef<str>>(name: T) -> Self
Create a new Symbol
from name
.
Examples
use magnus::{eval, Symbol};
let sym = Symbol::new("example");
let result: bool = eval!(":example == sym", sym).unwrap();
assert!(result);
sourcepub fn is_static(self) -> bool
pub fn is_static(self) -> bool
Returns whether self
is static or not.
Static symbols won’t be garbage collected, so should be safe to store
on the heap. See StaticSymbol
.
Examples
use magnus::{eval, Symbol};
assert!(eval::<Symbol>(":foo").unwrap().is_static());
assert!(!Symbol::new("bar").is_static());
assert!(!eval::<Symbol>(r#""baz".to_sym"#).unwrap().is_static());
sourcepub fn name(self) -> Result<Cow<'static, str>, Error>
pub fn name(self) -> Result<Cow<'static, str>, Error>
Return the symbol as a string. If the symbol is static this will be a
&str
, otherwise an owned String
.
May error if the name is not valid utf-8.
Examples
use magnus::Symbol;
let sym = Symbol::new("example");
assert_eq!(sym.name().unwrap(), "example");
sourcepub fn as_static(self) -> Option<StaticSymbol>
pub fn as_static(self) -> Option<StaticSymbol>
If self
is static, returns self
as a StaticSymbol
, otherwise
returns None
.
Examples
use magnus::{eval, Symbol};
assert!(eval::<Symbol>(":foo").unwrap().as_static().is_some());
assert!(Symbol::new("bar").as_static().is_none());
assert!(eval::<Symbol>(r#""baz".to_sym"#).unwrap().as_static().is_none());
sourcepub fn to_static(self) -> StaticSymbol
pub fn to_static(self) -> StaticSymbol
If self
is already static simply returns self
as a
StaticSymbol
. If self
is not static it will be made so and
returned as a StaticSymbol
.
Be aware that once static a symbol will never be garbage collected.
Examples
use magnus::{eval, Symbol};
let sym = Symbol::new("example");
let static_sym = sym.to_static();
Methods from Deref<Target = Value>
sourcepub unsafe fn to_s(&self) -> Result<Cow<'_, str>, Error>
pub unsafe fn to_s(&self) -> Result<Cow<'_, str>, Error>
Convert self
to a Rust string.
Safety
This may return a direct view of memory owned and managed by Ruby. Ruby may modify or free the memory backing the returned str, the caller must ensure this does not happen.
This can be used safely by immediately calling
into_owned
on the return value.
Examples
use magnus::{eval, QTRUE};
let value = QTRUE;
// safe as we neve give Ruby a chance to free the string.
let s = unsafe { value.to_s() }.unwrap().into_owned();
assert_eq!(s, "true");
sourcepub unsafe fn classname(&self) -> Cow<'_, str>
pub unsafe fn classname(&self) -> Cow<'_, str>
Return the name of self
’s class.
Safety
Ruby may modify or free the memory backing the returned str, the caller must ensure this does not happen.
This can be used safely by immediately calling
into_owned
on the return value.
Examples
use magnus::{eval, RHash};
let value = RHash::new();
// safe as we neve give Ruby a chance to free the string.
let s = unsafe { value.classname() }.into_owned();
assert_eq!(s, "Hash");
sourcepub fn try_convert<T>(&self) -> Result<T, Error> where
T: TryConvert,
pub fn try_convert<T>(&self) -> Result<T, Error> where
T: TryConvert,
Convert self
to the Rust type T
.
See the types that TryConvert
is implemented on for what this
method can convert to.
Examples
use magnus::{eval, Value};
assert_eq!(eval::<Value>("42").unwrap().try_convert::<i64>().unwrap(), 42);
assert_eq!(eval::<Value>("1.23").unwrap().try_convert::<i64>().unwrap(), 1);
assert_eq!(eval::<Value>("1").unwrap().try_convert::<f64>().unwrap(), 1.0);
assert_eq!(eval::<Value>("nil").unwrap().try_convert::<Option<i64>>().unwrap(), None);
assert_eq!(eval::<Value>("42").unwrap().try_convert::<Option<i64>>().unwrap(), Some(42));
Trait Implementations
sourceimpl From<StaticSymbol> for Symbol
impl From<StaticSymbol> for Symbol
sourcefn from(s: StaticSymbol) -> Self
fn from(s: StaticSymbol) -> Self
Converts to this type from the input type.
sourceimpl TryConvert for Symbol
impl TryConvert for Symbol
sourcefn try_convert(val: &Value) -> Result<Self, Error>
fn try_convert(val: &Value) -> Result<Self, Error>
Convert val
into Self
.
impl Copy for Symbol
Auto Trait Implementations
impl RefUnwindSafe for Symbol
impl Send for Symbol
impl Sync for Symbol
impl Unpin for Symbol
impl UnwindSafe for Symbol
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more