[−][src]Struct gluon_vm::api::ser::Ser
Pushable
wrapper which pushes T
by serializing it.
Struct
use serde::Serialize; use gluon_vm::{field_decl, record_type}; use gluon::{ Thread, ThreadExt, new_vm_async, base::types::ArcType, vm::api::{ser::Ser, FunctionRef, VmType}, }; #[derive(Serialize)] struct Vec2 { x: i32, y: i32, } impl VmType for Vec2 { type Type = Self; fn make_type(thread: &Thread) -> ArcType { field_decl!{ x, y } type T = record_type! { x => i32, y => i32 }; T::make_type(thread) } } let thread = new_vm_async().await; let (mut f, _): (FunctionRef<fn (Ser<Vec2>) -> i32>, _) = thread .run_expr_async("", r#"let f v: _ -> Int = v.x + v.y in f"#) .await .unwrap_or_else(|err| panic!("{}", err)); let vec = Vec2 { x: 3, y: 10 }; let result = f.call_async(Ser(vec)).await.unwrap_or_else(|err| panic!("{}", err)); assert_eq!(result, 13);
Enum
#[macro_use] extern crate serde_derive; #[macro_use] extern crate gluon_vm; use gluon::{Thread, ThreadExt, new_vm}; use gluon::base::types::ArcType; use gluon::vm::api::{FunctionRef, VmType}; use gluon::vm::api::ser::Ser; #[derive(Serialize)] enum Enum { A(i32), B(String, i32), C { foo: f64, bar: i32 }, } impl VmType for Enum { type Type = Self; fn make_type(thread: &Thread) -> ArcType { // Use the enum type declared in gluon thread.find_type_info("test.Enum").unwrap().into_type() } } let thread = new_vm(); let expr = r#" type Enum = | A Int | B String Int | C { foo : Float, bar : Int } let extract_bar r : { bar : Int | r } -> Int = r.bar let f e = match e with | A a -> a | B b c -> c | C c -> extract_bar c { Enum, f } "#; thread .load_script("test", expr) .unwrap_or_else(|err| panic!("{}", err)); let mut f: FunctionRef<fn (Ser<Enum>) -> i32> = thread .get_global("test.f") .unwrap_or_else(|err| panic!("{}", err)); let result1 = f.call(Ser(Enum::B("".to_string(), 4))) .unwrap_or_else(|err| panic!("{}", err)); assert_eq!(result1, 4); let result2 = f.call(Ser(Enum::C { foo: 3.14, bar: 10 })) .unwrap_or_else(|err| panic!("{}", err)); assert_eq!(result2, 10);
Trait Implementations
impl<'vm, T> Pushable<'vm> for Ser<T> where
T: Serialize,
[src]
T: Serialize,
fn vm_push(self, context: &mut ActiveThread<'vm>) -> Result<()>
[src]
fn status_push(self, context: &mut ActiveThread<'vm>) -> Status where
Self: Sized,
[src]
Self: Sized,
unsafe fn marshal_unrooted(self, vm: &'vm Thread) -> Result<Value> where
Self: Sized,
[src]
Self: Sized,
fn marshal<T>(self, vm: &'vm Thread) -> Result<RootedValue<T>> where
Self: Sized,
T: VmRoot<'vm>,
[src]
Self: Sized,
T: VmRoot<'vm>,
impl<T> VmType for Ser<T> where
T: VmType,
[src]
T: VmType,
Auto Trait Implementations
impl<T> RefUnwindSafe for Ser<T> where
T: RefUnwindSafe,
T: RefUnwindSafe,
impl<T> Send for Ser<T> where
T: Send,
T: Send,
impl<T> Sync for Ser<T> where
T: Sync,
T: Sync,
impl<T> Unpin for Ser<T> where
T: Unpin,
T: Unpin,
impl<T> UnwindSafe for Ser<T> where
T: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Any for T where
T: Any,
T: Any,
impl<Id> AsId<Id> for Id where
Id: ?Sized,
[src]
Id: ?Sized,
impl<'vm, T> AsyncPushable<'vm> for T where
T: Pushable<'vm>,
[src]
T: Pushable<'vm>,
pub fn async_push(
Self,
&mut ActiveThread<'vm>,
Lock,
u32
) -> Poll<Result<(), Error>>
[src]
Self,
&mut ActiveThread<'vm>,
Lock,
u32
) -> Poll<Result<(), Error>>
fn async_status_push(
self,
context: &mut ActiveThread<'vm>,
lock: Lock,
frame_index: VmIndex
) -> Status where
Self: Sized,
[src]
self,
context: &mut ActiveThread<'vm>,
lock: Lock,
frame_index: VmIndex
) -> Status where
Self: Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<'_, T> Captures<'_> for T
[src]
impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
[src]
type Remainder = Choices
pub fn subset(
self
) -> Result<CNil, <Choices as CoproductSubsetter<CNil, HNil>>::Remainder>
[src]
self
) -> Result<CNil, <Choices as CoproductSubsetter<CNil, HNil>>::Remainder>
impl<T> Downcast for T where
T: Any,
[src]
T: Any,
pub fn into_any(self: Box<T>) -> Box<dyn Any + 'static>
[src]
pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
[src]
pub fn as_any(&self) -> &(dyn Any + 'static)
[src]
pub fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
[src]
impl<T> DowncastArc for T where
T: Downcast + Send + Sync,
[src]
T: Downcast + Send + Sync,
impl<T> DowncastSync for T where
T: Send + Sync + Any,
[src]
T: Send + Sync + Any,
impl<T> From<T> for T
[src]
impl<D, T> FromPtr<D> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U, I> LiftInto<U, I> for T where
U: LiftFrom<T, I>,
[src]
U: LiftFrom<T, I>,
impl<'vm, T> Pushable<'vm> for T where
T: Userdata,
[src]
T: Userdata,
pub fn vm_push(Self, &mut ActiveThread<'vm>) -> Result<(), Error>
[src]
fn status_push(self, context: &mut ActiveThread<'vm>) -> Status where
Self: Sized,
[src]
Self: Sized,
unsafe fn marshal_unrooted(self, vm: &'vm Thread) -> Result<Value> where
Self: Sized,
[src]
Self: Sized,
fn marshal<T>(self, vm: &'vm Thread) -> Result<RootedValue<T>> where
Self: Sized,
T: VmRoot<'vm>,
[src]
Self: Sized,
T: VmRoot<'vm>,
impl<Source> Sculptor<HNil, HNil> for Source
[src]
type Remainder = Source
pub fn sculpt(self) -> (HNil, <Source as Sculptor<HNil, HNil>>::Remainder)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,