Skip to content

Commit 8c7428d

Browse files
author
hdlj
committed
finance rules WIP
1 parent a6fd72f commit 8c7428d

File tree

4 files changed

+33
-4
lines changed

4 files changed

+33
-4
lines changed

src/dimension.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,14 @@ impl Default for Precision {
4848
}
4949
}
5050

51-
#[derive(Debug, PartialEq, Copy, Clone)]
51+
#[derive(Debug, PartialEq, Copy, Clone, Default)]
5252
pub struct AmountOfMoneyValue {
5353
pub value: f32,
5454
pub precision: Precision,
5555
pub unit: Option<&'static str>
5656
}
5757

58-
#[derive(Debug, PartialEq, Copy, Clone)]
58+
#[derive(Debug, PartialEq, Copy, Clone, Default)]
5959
pub struct MoneyUnitValue {
6060
pub unit: Option<&'static str>,
6161
}

src/en.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use dimension::Precision::*;
44
use helpers;
55
use examples::*;
66

7-
7+
#[allow(dead_code)]
88
pub fn rules_finance() -> DucklingResult<RuleSet<Dimension>> {
99
Ok(RuleSet(vec![
1010
rule! {
@@ -13,11 +13,29 @@ pub fn rules_finance() -> DucklingResult<RuleSet<Dimension>> {
1313
amount_of_money_check!(),
1414
amount_of_money_check!(|money: &AmountOfMoneyValue| money.unit == Some("cent"))
1515
),
16-
|a, b| Ok(*a.value())
16+
|a, b| helpers::compose_money(a.value(), b.value())
17+
},
18+
rule! {
19+
"intersect (and X cents)",
20+
(
21+
amount_of_money_check!(),
22+
regex!(r#"and"#),
23+
amount_of_money_check!(|money: &AmountOfMoneyValue| money.unit == Some("cent"))
24+
),
25+
|a, _, b| helpers::compose_money(&a.value(), &b.value())
26+
},
27+
rule! {
28+
"intersect",
29+
(
30+
amount_of_money_check!(),
31+
number_check!()
32+
),
33+
|a, b| helpers::compose_money_number(&a.value(), &b.value())
1734
}
1835
]))
1936
}
2037

38+
#[allow(dead_code)]
2139
pub fn rules_temperature() -> DucklingResult<RuleSet<Dimension>> {
2240
Ok(RuleSet(vec![
2341
rule! {

src/fr.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use rustling::*;
22
use dimension::*;
33
use examples;
44

5+
#[allow(dead_code)]
56
pub fn rules_temperature() -> DucklingResult<RuleSet<Dimension>> {
67
Ok(RuleSet(vec![
78
rule! {

src/helpers.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,13 @@ pub fn compose_numbers(a: &NumberValue, b: &NumberValue) -> RuleResult<NumberVal
1414
Err(RuleErrorKind::Invalid.into())
1515
}
1616
}
17+
18+
pub fn compose_money(a: &AmountOfMoneyValue, b: &AmountOfMoneyValue) -> RuleResult<AmountOfMoneyValue> {
19+
let amount = a.value + b.value / 100.0;
20+
Ok(AmountOfMoneyValue { value: amount, unit: a.unit, .. AmountOfMoneyValue::default() })
21+
}
22+
23+
pub fn compose_money_number(a: &AmountOfMoneyValue, b: &NumberValue) -> RuleResult<AmountOfMoneyValue> {
24+
let amount = a.value + b.value() / 100.0;
25+
Ok(AmountOfMoneyValue { value: amount, unit: a.unit, .. AmountOfMoneyValue::default() })
26+
}

0 commit comments

Comments
 (0)