From ab95485d921aa2e6bb015f293b243f92014a1f72 Mon Sep 17 00:00:00 2001 From: _ <> Date: Sun, 29 Nov 2020 22:41:48 +0000 Subject: [PATCH] :recycle: Fix clippy issues --- crates/ptth_server/src/file_server/mod.rs | 18 ++--- crates/ptth_server/src/file_server/range.rs | 76 +++++++++++++++++---- crates/ptth_server/src/file_server/tests.rs | 56 +-------------- 3 files changed, 74 insertions(+), 76 deletions(-) diff --git a/crates/ptth_server/src/file_server/mod.rs b/crates/ptth_server/src/file_server/mod.rs index be681ac..fe2c497 100644 --- a/crates/ptth_server/src/file_server/mod.rs +++ b/crates/ptth_server/src/file_server/mod.rs @@ -55,11 +55,6 @@ use errors::{ FileServerError, MarkdownError, }; -use range::{ - check_range, - ParsedRange, - ValidParsedRange, -}; mod emoji { pub const VIDEO: &str = "\u{1f39e}\u{fe0f}"; @@ -228,7 +223,7 @@ async fn serve_dir ( async fn serve_file ( mut f: File, should_send_body: bool, - range: ValidParsedRange + range: range::ValidParsed ) -> Result { @@ -375,7 +370,7 @@ struct ServeDirParams { #[derive (Debug, PartialEq)] struct ServeFileParams { send_body: bool, - range: ValidParsedRange, + range: range::ValidParsed, file: AlwaysEqual , } @@ -445,15 +440,16 @@ async fn internal_serve_file ( let range_header = headers.get ("range").and_then (|v| std::str::from_utf8 (v).ok ()); - Ok (match check_range (range_header, file_len) { - ParsedRange::RangeNotSatisfiable (file_len) => InternalResponse::RangeNotSatisfiable (file_len), - ParsedRange::Valid (range) => { + Ok (match range::check (range_header, file_len) { + range::Parsed::NotSatisfiable (file_len) => InternalResponse::RangeNotSatisfiable (file_len), + range::Parsed::Valid (range) => { if uri.query () == Some ("as_markdown") { + const MAX_BUF_SIZE: u32 = 1_000_000; + if range.range_requested { return Ok (InternalResponse::InvalidQuery); } - const MAX_BUF_SIZE: u32 = 1_000_000; if file_len > MAX_BUF_SIZE.into () { InternalResponse::MarkdownErr (MarkdownError::TooBig) } diff --git a/crates/ptth_server/src/file_server/range.rs b/crates/ptth_server/src/file_server/range.rs index 2fe7fad..675ccd7 100644 --- a/crates/ptth_server/src/file_server/range.rs +++ b/crates/ptth_server/src/file_server/range.rs @@ -2,7 +2,8 @@ use std::ops::Range; use regex::Regex; -pub fn parse_range_header (range_str: &str) -> (Option , Option ) { +fn parse (range_str: &str) -> (Option , Option ) +{ use lazy_static::lazy_static; lazy_static! { @@ -27,33 +28,32 @@ pub fn parse_range_header (range_str: &str) -> (Option , Option ) { } #[derive (Debug, PartialEq)] -pub struct ValidParsedRange { +pub struct ValidParsed { pub range: Range , pub range_requested: bool, } #[derive (Debug, PartialEq)] -pub enum ParsedRange { - Valid (ValidParsedRange), - RangeNotSatisfiable (u64), +pub enum Parsed { + Valid (ValidParsed), + NotSatisfiable (u64), } -pub fn check_range (range_str: Option <&str>, file_len: u64) - -> ParsedRange +pub fn check (range_str: Option <&str>, file_len: u64) -> Parsed { - use ParsedRange::*; + use Parsed::*; - let not_satisfiable = RangeNotSatisfiable (file_len); + let not_satisfiable = NotSatisfiable (file_len); let range_str = match range_str { - None => return Valid (ValidParsedRange { + None => return Valid (ValidParsed { range: 0..file_len, range_requested: false, }), Some (x) => x, }; - let (start, end) = parse_range_header (range_str); + let (start, end) = parse (range_str); let start = start.unwrap_or (0); if start >= file_len { @@ -68,8 +68,60 @@ pub fn check_range (range_str: Option <&str>, file_len: u64) return not_satisfiable; } - Valid (ValidParsedRange { + Valid (ValidParsed { range: start..end, range_requested: true, }) } + +#[cfg (test)] +mod tests { + #[test] + fn test_byte_ranges () { + use super::*; + + for (input, expected) in vec! [ + ("", (None, None)), + ("bytes=0-", (Some (0), None)), + ("bytes=0-999", (Some (0), Some (1000))), + ("bytes=111-999", (Some (111), Some (1000))), + ].into_iter () { + let actual = parse (input); + assert_eq! (actual, expected); + } + + let ok_range = |range| Parsed::Valid (ValidParsed { + range, + range_requested: false, + }); + + let partial_content = |range| Parsed::Valid (ValidParsed { + range, + range_requested: true, + }); + + let not_satisfiable = |file_len| Parsed::NotSatisfiable (file_len); + + for (header, file_len, expected) in vec! [ + (None, 0, ok_range (0..0)), + (None, 1024, ok_range (0..1024)), + + (Some (""), 0, not_satisfiable (0)), + (Some (""), 1024, partial_content (0..1024)), + + (Some ("bytes=0-"), 1024, partial_content (0..1024)), + (Some ("bytes=0-999"), 1024, partial_content (0..1000)), + (Some ("bytes=0-1023"), 1024, partial_content (0..1024)), + (Some ("bytes=111-999"), 1024, partial_content (111..1000)), + (Some ("bytes=111-1023"), 1024, partial_content (111..1024)), + (Some ("bytes=200-100"), 1024, not_satisfiable (1024)), + + (Some ("bytes=0-"), 512, partial_content (0..512)), + (Some ("bytes=0-1023"), 512, not_satisfiable (512)), + (Some ("bytes=1000-1023"), 512, not_satisfiable (512)), + ].into_iter () { + let actual = check (header, file_len); + assert_eq! (actual, expected); + } + } +} diff --git a/crates/ptth_server/src/file_server/tests.rs b/crates/ptth_server/src/file_server/tests.rs index 3970c8b..0ada930 100644 --- a/crates/ptth_server/src/file_server/tests.rs +++ b/crates/ptth_server/src/file_server/tests.rs @@ -32,56 +32,6 @@ fn icons () { } } -#[test] -fn parse_range_header () { - use super::range::{ - *, - ParsedRange::*, - }; - - for (input, expected) in vec! [ - ("", (None, None)), - ("bytes=0-", (Some (0), None)), - ("bytes=0-999", (Some (0), Some (1000))), - ("bytes=111-999", (Some (111), Some (1000))), - ].into_iter () { - let actual = parse_range_header (input); - assert_eq! (actual, expected); - } - - let ok_range = |range| Valid (ValidParsedRange { - range, - range_requested: false, - }); - - let partial_content = |range| Valid (ValidParsedRange { - range, - range_requested: true, - }); - - for (header, file_len, expected) in vec! [ - (None, 0, ok_range (0..0)), - (None, 1024, ok_range (0..1024)), - - (Some (""), 0, RangeNotSatisfiable (0)), - (Some (""), 1024, partial_content (0..1024)), - - (Some ("bytes=0-"), 1024, partial_content (0..1024)), - (Some ("bytes=0-999"), 1024, partial_content (0..1000)), - (Some ("bytes=0-1023"), 1024, partial_content (0..1024)), - (Some ("bytes=111-999"), 1024, partial_content (111..1000)), - (Some ("bytes=111-1023"), 1024, partial_content (111..1024)), - (Some ("bytes=200-100"), 1024, RangeNotSatisfiable (1024)), - - (Some ("bytes=0-"), 512, partial_content (0..512)), - (Some ("bytes=0-1023"), 512, RangeNotSatisfiable (512)), - (Some ("bytes=1000-1023"), 512, RangeNotSatisfiable (512)), - ].into_iter () { - let actual = super::check_range (header, file_len); - assert_eq! (actual, expected); - } -} - #[test] fn pretty_print_bytes () { for (input_after, expected_before, expected_after) in vec! [ @@ -152,7 +102,7 @@ fn file_server () { ("/files/src/?", InvalidQuery), (bad_passwords_path, ServeFile (ServeFileParams { send_body: true, - range: ValidParsedRange { + range: range::ValidParsed { range: 0..1_048_576, range_requested: false, }, @@ -160,7 +110,7 @@ fn file_server () { })), ("/files/test/test.md", ServeFile (ServeFileParams { send_body: true, - range: ValidParsedRange { + range: range::ValidParsed { range: 0..144, range_requested: false, }, @@ -217,7 +167,7 @@ fn file_server () { assert_eq! (resp.expect ("Should be Ok (_)"), ServeFile (ServeFileParams { send_body: false, - range: ValidParsedRange { + range: range::ValidParsed { range: 0..1_048_576, range_requested: false, },