pub struct De<T>(pub T);
Expand description
Getable
wrapper which extracts T
by deserializing it into a rust value.
Struct
#[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::VmType;
use gluon::vm::api::de::De;
#[derive(Debug, PartialEq, Deserialize)]
struct Vec2 {
x: f64,
y: f64
}
impl VmType for Vec2 {
type Type = Self;
fn make_type(thread: &Thread) -> ArcType {
field_decl!{ x, y }
type T = record_type! {
x => f64,
y => f64
};
T::make_type(thread)
}
}
let thread = new_vm();
let (De(vec), _) = thread
.run_expr::<De<Vec2>>("test", "{ x = 1.0, y = 2.0 }")
.unwrap_or_else(|err| panic!("{}", err));
assert_eq!(vec, Vec2 {
x: 1.0,
y: 2.0
});
Enum
#[macro_use]
extern crate serde_derive;
use gluon::{Thread, ThreadExt, new_vm};
use gluon::base::types::ArcType;
use gluon::vm::api::VmType;
use gluon::vm::api::de::De;
#[derive(Debug, PartialEq, Deserialize)]
enum Enum {
A(i32),
B { string: String, test: f64 },
}
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();
thread
.load_script(
"test",
r#" type Enum = | A Int | B { string : String, test : Float } in { Enum } "#,
)
.unwrap_or_else(|err| panic!("{}", err));
let (De(enum_), _) = thread
.run_expr::<De<Enum>>(
"test",
r#" let { Enum } = import! "test" in A 123 "#,
)
.unwrap_or_else(|err| panic!("{}", err));
assert_eq!(enum_, Enum::A(123));
// The field names of record variants are ignored so make sure the fields are declared correctly
let (De(enum_), _) = thread
.run_expr::<De<Enum>>(
"test",
r#" let { Enum } = import! "test" in B { string = "abc", test = 3.14 } "#,
)
.unwrap_or_else(|err| panic!("{}", err));
assert_eq!(
enum_,
Enum::B {
string: "abc".to_string(),
test: 3.14,
}
);
Tuple Fields§
§0: T
Trait Implementations§
source§impl<T> VmType for De<T>where
T: VmType,
impl<T> VmType for De<T>where
T: VmType,
§type Type = <T as VmType>::Type
type Type = <T as VmType>::Type
A version of
Self
which implements Any
allowing a TypeId
to be retrievedfn make_forall_type(vm: &Thread) -> ArcType
source§const EXTRA_ARGS: VmIndex = 0u32
const EXTRA_ARGS: VmIndex = 0u32
How many extra arguments a function returning this type requires.
Used for abstract types which when used in return position should act like they still need
more arguments before they are called
Auto Trait Implementations§
impl<T> RefUnwindSafe for De<T>where
T: RefUnwindSafe,
impl<T> Send for De<T>where
T: Send,
impl<T> Sync for De<T>where
T: Sync,
impl<T> Unpin for De<T>where
T: Unpin,
impl<T> UnwindSafe for De<T>where
T: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.