Expand description
Enables support for the either
crate,
to allow accepting and returning Either<L, R>
values if both L
and R
are convertible to/from Robj
.
either
crate support is currently available in the dev version of extendr-api
and requires enabling either
feature:
[dependencies]
extendr-api = { git = "https://github.com/extendr/extendr" , features = ["either"] }
use extendr_api::prelude::*;
#[extendr]
fn accept_numeric(input : Either<Integers, Doubles>) {}
Here is an example of either
usage – a type-aware sum:
use extendr_api::prelude::*;
#[extendr]
fn type_aware_sum(input : Either<Integers, Doubles>) -> Either<Rint, Rfloat> {
match input {
Left(ints) => Left(ints.iter().sum::<Rint>()),
Right(dbls) => Right(dbls.iter().sum::<Rfloat>()),
}
}