11use super :: * ;
22use crate :: log;
3+ use options:: { self , parse_flag, parse_value, unkown_options} ;
34
45impl 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
0 commit comments