From 890f1337175a0a7797ee9d7597ac5debb22a2610 Mon Sep 17 00:00:00 2001 From: Nugine Date: Sun, 2 Feb 2025 02:11:54 +0800 Subject: [PATCH] refactor(s3s/sig_v2): simplify parser --- crates/s3s/src/sig_v2/authorization_v2.rs | 32 ++++------------------- 1 file changed, 5 insertions(+), 27 deletions(-) diff --git a/crates/s3s/src/sig_v2/authorization_v2.rs b/crates/s3s/src/sig_v2/authorization_v2.rs index 9287d290..6454af0c 100644 --- a/crates/s3s/src/sig_v2/authorization_v2.rs +++ b/crates/s3s/src/sig_v2/authorization_v2.rs @@ -17,36 +17,14 @@ pub struct ParseAuthorizationV2Error { } impl<'a> AuthorizationV2<'a> { - pub fn parse(input: &'a str) -> Result { - match parser::parse_authorization(input) { - Ok(("", ans)) => Ok(ans), - Ok(_) | Err(_) => Err(ParseAuthorizationV2Error { _priv: () }), - } - } -} - -mod parser { - use super::AuthorizationV2; - - use crate::utils::parser::consume; + pub fn parse(mut input: &'a str) -> Result { + let err = || ParseAuthorizationV2Error { _priv: () }; - use nom::bytes::complete::{tag, take, take_till}; - use nom::combinator::rest; - use nom::sequence::terminated; - use nom::IResult; + input = input.strip_prefix("AWS ").ok_or_else(err)?; - pub fn parse_authorization(mut input: &str) -> IResult<&str, AuthorizationV2<'_>> { - let s = &mut input; - - consume(s, tag("AWS "))?; - let access_key = consume(s, until_colon0)?; - let signature = consume(s, rest)?; - - Ok((input, AuthorizationV2 { access_key, signature })) - } + let (access_key, signature) = input.split_once(':').ok_or_else(err)?; - fn until_colon0(input: &str) -> IResult<&str, &str> { - terminated(take_till(|c| c == ':'), take(1_usize))(input) + Ok(Self { access_key, signature }) } }