neutralts/bif/
parse_bif_sum.rs1#![doc = include_str!("../../doc/bif-sum.md")]
2
3use crate::{bif::constants::*, bif::Bif, bif::BifError};
4
5impl<'a> Bif<'a> {
6 pub(crate) fn parse_bif_sum(&mut self) -> Result<(), BifError> {
10 if self.mod_filter || self.mod_negate || self.mod_scope {
11 return Err(self.bif_error(BIF_ERROR_MODIFIER_NOT_ALLOWED));
12 }
13
14 self.params = self.src.clone();
15
16 if self.params.contains("{:flg;") {
17 return Err(self.bif_error(BIF_ERROR_FLAGS_NOT_ALLOWED));
18 }
19
20 let args = self.extract_args();
21
22 let param1_str = args
23 .get(1)
24 .cloned()
25 .ok_or_else(|| self.bif_error(BIF_ERROR_ARGUMENTS_NOT_FOUND))?;
26
27 let param2_str = args
28 .get(2)
29 .cloned()
30 .ok_or_else(|| self.bif_error(BIF_ERROR_ARGUMENTS_NOT_FOUND))?;
31
32 let param1: f64 = param1_str
33 .parse()
34 .map_err(|_| self.bif_error(BIF_ERROR_INVALID_ARGUMENT_1))?;
35
36 let param2: f64 = param2_str
37 .parse()
38 .map_err(|_| self.bif_error(BIF_ERROR_INVALID_ARGUMENT_2))?;
39
40 self.out = (param1 + param2).to_string();
41
42 Ok(())
43 }
44}
45
46#[cfg(test)]
47#[path = "parse_bif_sum_tests.rs"]
48mod tests;