neutralts/bif/
parse_bif_sum.rs

1#![doc = include_str!("../../doc/bif-sum.md")]
2
3use crate::{bif::constants::*, bif::Bif, bif::BifError};
4
5impl<'a> Bif<'a> {
6    /*
7       {:sum; /a/b/ :}
8    */
9    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;