blob: 23a8aea8462734d1fe9bbbea54d6ba3c7faf7ee3 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
use rustler::Encoder;
rustler::atoms! {
ok,
error,
inf,
ninf,
nan,
}
#[rustler::nif]
pub fn eval<'a>(env: rustler::Env<'a>, args: String) -> Result<rustler::Term<'a>, String> {
thulani_calc::Calc::eval(&args)
.map(|x| match x {
x if x.is_infinite() && x.is_sign_positive() => inf().encode(env),
x if x.is_infinite() && x.is_sign_negative() => ninf().encode(env),
x if x.is_nan() => nan().encode(env),
x => x.encode(env),
})
.map_err(|e| e.to_string())
}
rustler::init!("Elixir.Thulani.Calc");
|