#[derive(TryFromRobj)]
Expand description
Derives an implementation of TryFrom<Robj> for Struct
and TryFrom<&Robj> for Struct
on this struct.
This allows any R object supporting the $
operator (generally a list or an
environment) to be converted into that struct, as long as the corresponding fields on the R object are
of a compatible type to those on the Rust struct.
§Examples
In the below example, foo_from_list
is an instance of the Foo
struct, that has been converted
from an R list:
ⓘ
use extendr_api::prelude::*;
use extendr_macros::TryFromRobj;
#[derive(TryFromRobj, PartialEq, Debug)]
struct Foo {
a: u64,
b: String
}
let native_foo = Foo { a: 5, b: "bar".into() };
let foo_from_list: Foo = R!("list(a = 5, b = 'bar')")?.try_into()?;
assert_eq!(native_foo, foo_from_list);
See IntoRobj
for converting arbitrary Rust types into R type by using
R’s list / List
.