Sha256: 3c9485b4899402f3bb142a5df7157a8652a73543d0443a84a3650b0fd8e8fe44
Contents?: true
Size: 1.9 KB
Versions: 3
Compression:
Stored size: 1.9 KB
Contents
use std::{fmt, ops::Deref}; use rb_sys::ruby_value_type; use crate::{ error::Error, exception, object::Object, try_convert::TryConvert, value::{private, NonZeroValue, ReprValue, Value}, }; /// A Value pointer to a RFile struct, Ruby's internal representation of files. /// /// All [`Value`] methods should be available on this type through [`Deref`], /// but some may be missed by this documentation. #[derive(Clone, Copy)] #[repr(transparent)] pub struct RFile(NonZeroValue); impl RFile { /// Return `Some(RFile)` if `val` is a `RFile`, `None` otherwise. #[inline] pub fn from_value(val: Value) -> Option<Self> { unsafe { (val.rb_type() == ruby_value_type::RUBY_T_FILE) .then(|| Self(NonZeroValue::new_unchecked(val))) } } } impl Deref for RFile { type Target = Value; fn deref(&self) -> &Self::Target { self.0.get_ref() } } impl fmt::Display for RFile { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{}", unsafe { self.to_s_infallible() }) } } impl fmt::Debug for RFile { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{}", self.inspect()) } } impl From<RFile> for Value { fn from(val: RFile) -> Self { *val } } impl Object for RFile {} unsafe impl private::ReprValue for RFile { fn to_value(self) -> Value { *self } unsafe fn from_value_unchecked(val: Value) -> Self { Self(NonZeroValue::new_unchecked(val)) } } impl ReprValue for RFile {} impl TryConvert for RFile { fn try_convert(val: Value) -> Result<Self, Error> { Self::from_value(val).ok_or_else(|| { Error::new( exception::type_error(), format!("no implicit conversion of {} into File", unsafe { val.classname() },), ) }) } }
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
wasmtime-5.0.0 | ./ext/cargo-vendor/magnus-0.4.4/src/r_file.rs |
wasmtime-0.4.1 | ./ext/cargo-vendor/magnus-0.4.4/src/r_file.rs |
wasmtime-0.4.0 | ./ext/cargo-vendor/magnus-0.4.3/src/r_file.rs |