helix/coercions/
float.rs

1use sys::{self, VALUE, T_FLOAT, T_FIXNUM, T_BIGNUM};
2use super::{FromRuby, CheckResult, CheckedValue, ToRuby, ToRubyResult};
3
4impl FromRuby for f64 {
5    type Checked = CheckedValue<f64>;
6
7    fn from_ruby(value: VALUE) -> CheckResult<CheckedValue<f64>> {
8        if unsafe { sys::RB_TYPE_P(value, T_FLOAT) || sys::RB_TYPE_P(value, T_FIXNUM) || sys::RB_TYPE_P(value, T_BIGNUM) } {
9            Ok(unsafe { CheckedValue::new(value) })
10        } else {
11            type_error!(value, "a 64-bit float")
12        }
13    }
14
15    fn from_checked(checked: CheckedValue<f64>) -> f64 {
16        unsafe { sys::NUM2F64(checked.to_value()) }
17    }
18}
19
20impl ToRuby for f64 {
21    fn to_ruby(self) -> ToRubyResult {
22        Ok(unsafe { sys::F642NUM(self) })
23    }
24}