runestick/modules/
int.rs

1//! The `std::int` module.
2
3use crate::{ContextError, Module};
4use std::num::ParseIntError;
5
6/// Construct the `std::int` module.
7pub fn module() -> Result<Module, ContextError> {
8    let mut module = Module::with_crate_item("std", &["int"]);
9
10    module.ty::<ParseIntError>()?;
11
12    module.function(&["parse"], parse)?;
13    module.function(&["max"], i64::max)?;
14    module.function(&["min"], i64::min)?;
15    module.function(&["abs"], i64::abs)?;
16
17    module.inst_fn("to_float", to_float)?;
18
19    module.inst_fn("abs", i64::abs)?;
20    module.inst_fn("checked_add", i64::checked_add)?;
21    module.inst_fn("checked_sub", i64::checked_sub)?;
22    module.inst_fn("checked_div", i64::checked_div)?;
23    module.inst_fn("checked_mul", i64::checked_mul)?;
24    module.inst_fn("checked_rem", i64::checked_rem)?;
25
26    module.inst_fn("wrapping_add", i64::wrapping_add)?;
27    module.inst_fn("wrapping_sub", i64::wrapping_sub)?;
28    module.inst_fn("wrapping_div", i64::wrapping_div)?;
29    module.inst_fn("wrapping_mul", i64::wrapping_mul)?;
30    module.inst_fn("wrapping_rem", i64::wrapping_rem)?;
31
32    module.inst_fn("saturating_add", i64::saturating_add)?;
33    module.inst_fn("saturating_sub", i64::saturating_sub)?;
34    module.inst_fn("saturating_mul", i64::saturating_mul)?;
35    module.inst_fn("saturating_abs", i64::saturating_abs)?;
36    module.inst_fn("saturating_pow", i64::saturating_pow)?;
37
38    module.inst_fn("pow", i64::pow)?;
39    Ok(module)
40}
41
42/// Parse an integer.
43fn parse(s: &str) -> Result<i64, ParseIntError> {
44    Ok(str::parse::<i64>(s)?)
45}
46
47/// Convert a whole number to float.
48fn to_float(value: i64) -> f64 {
49    value as f64
50}
51
52crate::__internal_impl_any!(ParseIntError);