@@ -8,6 +8,7 @@ use url::Url;
8
8
use winnow:: {
9
9
ascii:: { line_ending, space1} ,
10
10
combinator:: { delimited, preceded, repeat, rest, separated, terminated} ,
11
+ error:: ParserError ,
11
12
seq,
12
13
token:: take_till,
13
14
PResult , Parser ,
@@ -286,11 +287,7 @@ fn parse_readme(input: &mut &str) -> PResult<Readme> {
286
287
}
287
288
288
289
fn badge ( input : & mut & str ) -> PResult < Badge > {
289
- let ( image, url) = (
290
- delimited ( '[' , image, ']' ) ,
291
- delimited ( '(' , take_till ( 1 .., ')' ) , ')' ) ,
292
- )
293
- . parse_next ( input) ?;
290
+ let ( image, url) = ( delimited ( '[' , image, ']' ) , bracketed1 ( '(' , ')' ) ) . parse_next ( input) ?;
294
291
Ok ( Badge {
295
292
url : image. url ,
296
293
alt : image. alt ,
@@ -310,17 +307,20 @@ fn image(input: &mut &str) -> PResult<Image> {
310
307
fn link ( input : & mut & str ) -> PResult < Link > {
311
308
seq ! {
312
309
Link {
313
- _: '[' ,
314
- text: take_till( 1 .., ']' ) . map( String :: from) ,
315
- _: ']' ,
316
- _: '(' ,
317
- url: take_till( 1 .., ')' ) . map( String :: from) ,
318
- _: ')' ,
310
+ text: bracketed1( '[' , ']' ) . map( String :: from) ,
311
+ url: bracketed1( '(' , ')' ) . map( String :: from) ,
319
312
}
320
313
}
321
314
. parse_next ( input)
322
315
}
323
316
317
+ fn bracketed1 < ' a , E : ParserError < & ' a str > > (
318
+ open : char ,
319
+ close : char ,
320
+ ) -> impl Parser < & ' a str , & ' a str , E > {
321
+ delimited ( open, take_till ( 1 .., close) , close)
322
+ }
323
+
324
324
#[ cfg( test) ]
325
325
mod tests {
326
326
use super :: * ;
0 commit comments