1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
//! Coerce Ruby values to native numerics. use crate::value::Value; /// Coerce Ruby values to native numerics (floats and integers). pub trait CoerceToNumeric { /// Concrete type of boxed Ruby value as inputs to coerce functions. type Value: Value; /// Concrete float type to coerce values into, e.g. [`f64`]. type Float; /// Concrete error type for errors encountered when coercing values. type Error; /// Coerce the given Ruby value to a `Float`. /// /// This coercion mechanism is used by Ruby to handle mixed-type numeric /// operations: it is intended to find a compatible common type between the two /// operands of the operator. /// /// See [`Numeric#coerce`]. /// /// # Errors /// /// If a Ruby `nil` is given, an error is returned. /// /// If the given value does not subclass [`Numeric`], an error is returned. /// /// If the [`Numeric` class] is not defined, an error is returned. /// /// If the underlying interpreter returns an error when calling `#to_f` or /// [`Numeric#coerce`], the error is returned. /// /// [`Numeric`]: https://ruby-doc.org/core-2.6.3/Numeric.html /// [`Numeric` class]: https://ruby-doc.org/core-2.6.3/Numeric.html /// [`Numeric#coerce`]: https://ruby-doc.org/core-2.6.3/Numeric.html#method-i-coerce fn coerce_to_float(&mut self, value: Self::Value) -> Result<Self::Float, Self::Error>; }