2 Commits
1.3.2 ... 1.3.4

Author SHA1 Message Date
f40c87aa8e Changed router visibility to pub 2024-07-06 13:27:24 +02:00
284ee73ffd Changed parsers to FnMut 2024-07-02 13:24:37 +02:00
5 changed files with 21 additions and 10 deletions

2
Cargo.lock generated
View File

@ -294,7 +294,7 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]] [[package]]
name = "lib" name = "lib"
version = "1.3.2" version = "1.3.4"
dependencies = [ dependencies = [
"axum", "axum",
"derive", "derive",

View File

@ -1,6 +1,6 @@
[package] [package]
name = "lib" name = "lib"
version = "1.3.2" version = "1.3.4"
edition = "2021" edition = "2021"
authors = ["Martin Berg Alstad"] authors = ["Martin Berg Alstad"]
homepage = "emberal.github.io" homepage = "emberal.github.io"

View File

@ -286,7 +286,7 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]] [[package]]
name = "lib" name = "lib"
version = "1.3.2" version = "1.3.4"
dependencies = [ dependencies = [
"axum", "axum",
"thiserror", "thiserror",

View File

@ -20,12 +20,12 @@
#[macro_export] #[macro_export]
macro_rules! router { macro_rules! router {
($body:expr) => { ($body:expr) => {
pub(crate) fn router() -> axum::Router { pub fn router() -> axum::Router {
$body $body
} }
}; };
($body:expr; $state:ty) => { ($body:expr; $state:ty) => {
pub(crate) fn router() -> axum::Router<$state> { pub fn router() -> axum::Router<$state> {
$body $body
} }
}; };

View File

@ -17,7 +17,7 @@ use {
/// - Returns: A parser that trims leading and trailing whitespace from the input and then runs the value from the inner parser /// - Returns: A parser that trims leading and trailing whitespace from the input and then runs the value from the inner parser
pub fn trim<'a, Parser, R>(inner: Parser) -> impl FnMut(&'a str) -> IResult<&'a str, R> pub fn trim<'a, Parser, R>(inner: Parser) -> impl FnMut(&'a str) -> IResult<&'a str, R>
where where
Parser: Fn(&'a str) -> IResult<&'a str, R>, Parser: FnMut(&'a str) -> IResult<&'a str, R>,
{ {
delimited(multispace0, inner, multispace0) delimited(multispace0, inner, multispace0)
} }
@ -29,7 +29,7 @@ where
/// - Returns: A parser that parses a parenthesized expression /// - Returns: A parser that parses a parenthesized expression
pub fn parenthesized<'a, Parser, R>(inner: Parser) -> impl FnMut(&'a str) -> IResult<&'a str, R> pub fn parenthesized<'a, Parser, R>(inner: Parser) -> impl FnMut(&'a str) -> IResult<&'a str, R>
where where
Parser: Fn(&'a str) -> IResult<&'a str, R>, Parser: FnMut(&'a str) -> IResult<&'a str, R>,
{ {
delimited(char('('), trim(inner), char(')')) delimited(char('('), trim(inner), char(')'))
} }
@ -49,16 +49,15 @@ where
pub fn exhausted<'a, Parser, R>(inner: Parser) -> impl FnMut(&'a str) -> IResult<&'a str, R> pub fn exhausted<'a, Parser, R>(inner: Parser) -> impl FnMut(&'a str) -> IResult<&'a str, R>
where where
Parser: Fn(&'a str) -> IResult<&'a str, R>, Parser: FnMut(&'a str) -> IResult<&'a str, R>,
{ {
terminated(inner, eof) terminated(inner, eof)
} }
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use nom::bytes::streaming::take_while;
use super::*; use super::*;
use nom::{bytes::complete::take_while, sequence::tuple};
#[test] #[test]
fn test_trim_both_sides() { fn test_trim_both_sides() {
@ -154,4 +153,16 @@ mod tests {
let input = "test "; let input = "test ";
assert!(exhausted(take_where(4, |c: char| c.is_ascii_alphabetic()))(input).is_err()); assert!(exhausted(take_where(4, |c: char| c.is_ascii_alphabetic()))(input).is_err());
} }
#[test]
fn test_exhausted_tuple() {
let input = "test";
let (remaining, result) = exhausted(tuple((
take_where(3, |c: char| c.is_ascii_alphabetic()),
take_while(|c: char| c.is_ascii_alphabetic()),
)))(input)
.unwrap();
assert_eq!(remaining, "");
assert_eq!(result, ("tes", "t"));
}
} }