130 lines
3.2 KiB
Rust
130 lines
3.2 KiB
Rust
use crate::{Class, ContextRef, Error, Value, ValueRef, ValueResult};
|
|
|
|
pub trait TryIntoValue {
|
|
fn try_into_value(self, ctx: &ContextRef) -> ValueResult;
|
|
}
|
|
|
|
impl TryIntoValue for u8 {
|
|
#[inline]
|
|
fn try_into_value(self, ctx: &ContextRef) -> ValueResult {
|
|
ctx.new_u64(self)
|
|
}
|
|
}
|
|
|
|
impl TryIntoValue for u16 {
|
|
#[inline]
|
|
fn try_into_value(self, ctx: &ContextRef) -> ValueResult {
|
|
ctx.new_u64(self)
|
|
}
|
|
}
|
|
|
|
impl TryIntoValue for u32 {
|
|
#[inline]
|
|
fn try_into_value(self, ctx: &ContextRef) -> ValueResult {
|
|
ctx.new_u64(self)
|
|
}
|
|
}
|
|
|
|
impl TryIntoValue for u64 {
|
|
#[inline]
|
|
fn try_into_value(self, ctx: &ContextRef) -> ValueResult {
|
|
ctx.new_u64(self)
|
|
}
|
|
}
|
|
|
|
impl TryIntoValue for i8 {
|
|
#[inline]
|
|
fn try_into_value(self, ctx: &ContextRef) -> ValueResult {
|
|
ctx.new_i32(self)
|
|
}
|
|
}
|
|
|
|
impl TryIntoValue for i16 {
|
|
#[inline]
|
|
fn try_into_value(self, ctx: &ContextRef) -> ValueResult {
|
|
ctx.new_i32(self)
|
|
}
|
|
}
|
|
|
|
impl TryIntoValue for i32 {
|
|
#[inline]
|
|
fn try_into_value(self, ctx: &ContextRef) -> ValueResult {
|
|
ctx.new_i32(self)
|
|
}
|
|
}
|
|
|
|
impl TryIntoValue for i64 {
|
|
#[inline]
|
|
fn try_into_value(self, ctx: &ContextRef) -> ValueResult {
|
|
ctx.new_i64(self)
|
|
}
|
|
}
|
|
|
|
impl TryIntoValue for f32 {
|
|
#[inline]
|
|
fn try_into_value(self, ctx: &ContextRef) -> ValueResult {
|
|
ctx.new_f64(self)
|
|
}
|
|
}
|
|
|
|
impl TryIntoValue for f64 {
|
|
#[inline]
|
|
fn try_into_value(self, ctx: &ContextRef) -> ValueResult {
|
|
ctx.new_f64(self)
|
|
}
|
|
}
|
|
|
|
impl TryIntoValue for bool {
|
|
#[inline]
|
|
fn try_into_value(self, ctx: &ContextRef) -> ValueResult {
|
|
ctx.new_bool(self)
|
|
}
|
|
}
|
|
|
|
impl TryIntoValue for &str {
|
|
#[inline]
|
|
fn try_into_value(self, ctx: &ContextRef) -> ValueResult {
|
|
ctx.new_string(self)
|
|
}
|
|
}
|
|
|
|
impl TryIntoValue for &ValueRef {
|
|
#[inline]
|
|
fn try_into_value(self, ctx: &ContextRef) -> ValueResult {
|
|
Ok(self.dup(ctx))
|
|
}
|
|
}
|
|
|
|
impl TryIntoValue for Value {
|
|
#[inline]
|
|
fn try_into_value(self, ctx: &ContextRef) -> ValueResult {
|
|
Ok(self.dup(ctx))
|
|
}
|
|
}
|
|
|
|
impl TryIntoValue for Error {
|
|
#[inline]
|
|
fn try_into_value(self, ctx: &ContextRef) -> ValueResult {
|
|
match self {
|
|
Error::TooManyClasses => Err(Error::TooManyClasses),
|
|
Error::WrongClass(c) => Err(Error::WrongClass(c)),
|
|
Error::UnexpectedNul => Err(Error::UnexpectedNul),
|
|
Error::DifferentRuntime => Err(Error::DifferentRuntime),
|
|
Error::InvalidType { expected, found } => Err(Error::InvalidType { expected, found }),
|
|
Error::ArgumentCountMismatch { expected, received } => {
|
|
Err(Error::ArgumentCountMismatch { expected, received })
|
|
}
|
|
Error::ConversionError(e) => Err(Error::ConversionError(e)),
|
|
Error::RustFunctionError(e) => Err(Error::RustFunctionError(e)),
|
|
Error::Exception(v, d) => Err(Error::Exception(v.dup(ctx), d)),
|
|
Error::OutOfMemory => Err(Error::OutOfMemory),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl<T: Class> TryIntoValue for T {
|
|
#[inline]
|
|
fn try_into_value(self, ctx: &ContextRef) -> ValueResult {
|
|
self.into_value(ctx)
|
|
}
|
|
}
|