Skip to content

Commit 14cb26a

Browse files
committed
🐛 Fix no-serve-expired and response-mode not parsed
1 parent dd05e8d commit 14cb26a

File tree

2 files changed

+30
-20
lines changed

2 files changed

+30
-20
lines changed

src/config/parser/domain_rule.rs

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
use super::*;
22
use crate::log;
3+
use options::{self, parse_flag, parse_value, unkown_options};
34

45
impl NomParser for DomainRule {
56
fn parse(input: &str) -> IResult<&str, Self> {
67
let mut rule = DomainRule::default();
78

89
let one = alt((
910
map(
10-
options::parse_value(
11+
parse_value(
1112
alt((tag("speed-check-mode"), tag("c"))),
1213
SpeedCheckModeList::parse,
1314
),
@@ -18,52 +19,61 @@ impl NomParser for DomainRule {
1819
},
1920
),
2021
map(
21-
options::parse_value(alt((tag_no_case("address"), tag("a"))), NomParser::parse),
22+
parse_value(alt((tag_no_case("address"), tag("a"))), NomParser::parse),
2223
|v| {
2324
rule.address = Some(v);
2425
},
2526
),
2627
map(
27-
options::parse_value(alt((tag_no_case("nameserver"), tag("n"))), alphanumeric1),
28+
parse_value(alt((tag_no_case("nameserver"), tag("n"))), alphanumeric1),
2829
|v| {
2930
rule.nameserver = Some(v.to_string());
3031
},
3132
),
3233
map(
33-
options::parse_no_value(alt((tag_no_case("dualstack-ip-selection"), tag("d")))),
34+
parse_flag(alt((tag_no_case("dualstack-ip-selection"), tag("d")))),
3435
|v| {
3536
rule.dualstack_ip_selection = Some(v);
3637
},
3738
),
39+
map(parse_value(tag_no_case("cname"), NomParser::parse), |v| {
40+
rule.cname = Some(v);
41+
}),
42+
map(parse_value(tag_no_case("subnet"), NomParser::parse), |v| {
43+
rule.subnet = Some(From::<IpNet>::from(v));
44+
}),
45+
map(parse_flag(tag_no_case("no-cache")), |v| {
46+
rule.no_cache = Some(v);
47+
}),
48+
map(parse_flag(tag_no_case("no-serve-expired")), |v| {
49+
rule.no_serve_expired = Some(v);
50+
}),
3851
map(
39-
options::parse_value(tag_no_case("cname"), NomParser::parse),
40-
|v| {
41-
rule.cname = Some(v);
42-
},
43-
),
44-
map(
45-
options::parse_value(tag_no_case("subnet"), NomParser::parse),
52+
parse_value(
53+
alt((tag_no_case("response-mode"), tag("r"))),
54+
NomParser::parse,
55+
),
4656
|v| {
47-
rule.subnet = Some(From::<IpNet>::from(v));
57+
rule.response_mode = Some(v);
4858
},
4959
),
50-
map(options::parse_no_value(tag_no_case("no-cache")), |v| {
51-
rule.no_cache = Some(v);
52-
}),
5360
map(
54-
options::parse_value(tag_no_case("rr-ttl-min"), NomParser::parse),
61+
parse_value(tag_no_case("rr-ttl-min"), NomParser::parse),
5562
|v| {
5663
rule.rr_ttl_min = Some(v);
5764
},
5865
),
5966
map(
60-
options::parse_value(tag_no_case("rr-ttl-max"), NomParser::parse),
67+
parse_value(tag_no_case("rr-ttl-max"), NomParser::parse),
6168
|v| {
6269
rule.rr_ttl_max = Some(v);
6370
},
6471
),
65-
map(options::unkown_options, |(n, v)| {
66-
log::warn!("domain rule: unkown options {}={:?}", n, v)
72+
map(parse_value(tag_no_case("rr-ttl"), NomParser::parse), |v| {
73+
rule.rr_ttl = Some(v);
74+
}),
75+
map(unkown_options, |(n, v)| {
76+
log::warn!("domain rule: unkown options {}={:?}", n, v);
6777
}),
6878
));
6979

src/config/parser/options.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ pub fn parse_value<
3434
)
3535
}
3636

37-
pub fn parse_no_value<'a, O, E: nom::error::ParseError<&'a str>, N: nom::Parser<&'a str, O, E>>(
37+
pub fn parse_flag<'a, O, E: nom::error::ParseError<&'a str>, N: nom::Parser<&'a str, O, E>>(
3838
name: N,
3939
) -> impl FnMut(&'a str) -> IResult<&'a str, bool, E> {
4040
value(true, preceded(take_while_m_n(1, 2, |c| c == '-'), name))

0 commit comments

Comments
 (0)