Open Boscop opened 1 year ago
https://github.com/gluon-lang/gluon/blob/master/examples/marshalling.rs contains several examples though none exactly matches what you want.
You should be able to achieve it by using OpaqueValue<_, Hole>
as the type on the rust side which will not put any type constraints on the gluon side. Then you can dereference that to a Value
which you can extract via from_value
or via pattern matching.
let (value, typ) = thread.run_expr::<OpaqueValue<RootedThread, Hole>()?;
// or match on `value`, whatever works for your typechecking into the 5 types you want to support
match typ {
}
In my use case, after evaluating a script, the final value can be one of several types that I want to support. E.g. I want to support 5 different custom types that the script can produce. The final value of the script should not be an enum though! So after evaluating a script, how can I check which gluon type the final value is, before I try to convert it to the equivalent Rust type? :) Or can I evaluate a script and then try converting the final value to a Rust type, to check if it succeeds?