aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSven-Hendrik Haase <svenstaro@gmail.com>2024-01-13 05:11:59 +0000
committerSven-Hendrik Haase <svenstaro@gmail.com>2024-01-13 05:11:59 +0000
commit562b62a0b638d2ca0731f83476a2e5f74757962a (patch)
tree2073b8249218f86e95d57b7734310495cb7db109 /src
parentFix formatting (diff)
downloadminiserve-562b62a0b638d2ca0731f83476a2e5f74757962a.tar.gz
miniserve-562b62a0b638d2ca0731f83476a2e5f74757962a.zip
Clean up default order function
I removed the stringly typing as we already have enums for this that we can make use of.
Diffstat (limited to 'src')
-rw-r--r--src/args.rs9
-rw-r--r--src/config.rs26
-rw-r--r--src/listing.rs25
3 files changed, 19 insertions, 41 deletions
diff --git a/src/args.rs b/src/args.rs
index e400c8a..cc8b0f1 100644
--- a/src/args.rs
+++ b/src/args.rs
@@ -6,6 +6,7 @@ use http::header::{HeaderMap, HeaderName, HeaderValue};
use crate::auth;
use crate::errors::ContextualError;
+use crate::listing::{SortingMethod, SortingOrder};
use crate::renderer::ThemeSlug;
#[derive(ValueEnum, Clone)]
@@ -117,21 +118,21 @@ pub struct CliArgs {
#[arg(
short = 'S',
long = "default-sorting-method",
- default_value = "",
+ default_value = "name",
ignore_case = true,
env = "MINISERVE_DEFAULT_SORTING_METHOD"
)]
- pub default_sorting_method: String,
+ pub default_sorting_method: SortingMethod,
/// Default sorting order for file list
#[arg(
short = 'O',
long = "default-sorting-order",
- default_value = "",
+ default_value = "desc",
ignore_case = true,
env = "MINISERVE_DEFAULT_SORTING_ORDER"
)]
- pub default_sorting_order: String,
+ pub default_sorting_order: SortingOrder,
/// Default color scheme
#[arg(
diff --git a/src/config.rs b/src/config.rs
index 491ac40..bfe916b 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -52,10 +52,10 @@ pub struct MiniserveConfig {
pub show_hidden: bool,
/// Default sorting method
- pub default_sorting_method: Option<SortingMethod>,
+ pub default_sorting_method: SortingMethod,
/// Default sorting order
- pub default_sorting_order: Option<SortingOrder>,
+ pub default_sorting_order: SortingOrder,
/// Route prefix; Either empty or prefixed with slash
pub route_prefix: String,
@@ -272,24 +272,6 @@ impl MiniserveConfig {
.transpose()?
.unwrap_or_default();
- let default_sorting_method: Option<SortingMethod> = match args
- .default_sorting_method
- .to_owned()
- .parse::<SortingMethod>()
- {
- Ok(value) => Some(value),
- Err(_) => None,
- };
-
- let default_sorting_order: Option<SortingOrder> = match args
- .default_sorting_order
- .to_owned()
- .parse::<SortingOrder>()
- {
- Ok(value) => Some(value),
- Err(_) => None,
- };
-
Ok(MiniserveConfig {
verbose: args.verbose,
path: args.path.unwrap_or_else(|| PathBuf::from(".")),
@@ -299,8 +281,8 @@ impl MiniserveConfig {
path_explicitly_chosen,
no_symlinks: args.no_symlinks,
show_hidden: args.hidden,
- default_sorting_method,
- default_sorting_order,
+ default_sorting_method: args.default_sorting_method,
+ default_sorting_order: args.default_sorting_order,
route_prefix,
favicon_route,
css_route,
diff --git a/src/listing.rs b/src/listing.rs
index 40c5a77..3cd131e 100644
--- a/src/listing.rs
+++ b/src/listing.rs
@@ -5,6 +5,7 @@ use std::time::SystemTime;
use actix_web::{dev::ServiceResponse, web::Query, HttpMessage, HttpRequest, HttpResponse};
use bytesize::ByteSize;
+use clap::ValueEnum;
use comrak::{markdown_to_html, ComrakOptions};
use percent_encoding::{percent_decode_str, utf8_percent_encode};
use regex::Regex;
@@ -39,10 +40,11 @@ pub struct ListingQueryParameters {
}
/// Available sorting methods
-#[derive(Deserialize, Clone, EnumString, Display, Copy)]
+#[derive(Deserialize, Default, Clone, EnumString, Display, Copy, ValueEnum)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum SortingMethod {
+ #[default]
/// Sort by name
Name,
@@ -54,17 +56,18 @@ pub enum SortingMethod {
}
/// Available sorting orders
-#[derive(Deserialize, Clone, EnumString, Display, Copy)]
+#[derive(Deserialize, Default, Clone, EnumString, Display, Copy, ValueEnum)]
pub enum SortingOrder {
/// Ascending order
#[serde(alias = "asc")]
#[strum(serialize = "asc")]
- Ascending,
+ Asc,
/// Descending order
+ #[default]
#[serde(alias = "desc")]
#[strum(serialize = "desc")]
- Descending,
+ Desc,
}
#[derive(PartialEq, Eq)]
@@ -223,7 +226,7 @@ pub fn directory_listing(
res
};
- let mut query_params = extract_query_parameters(req);
+ let query_params = extract_query_parameters(req);
let mut entries: Vec<Entry> = Vec::new();
let mut readme: Option<(String, String)> = None;
@@ -299,15 +302,7 @@ pub fn directory_listing(
}
}
- if query_params.sort.is_none() {
- query_params.sort = conf.default_sorting_method
- }
-
- if query_params.order.is_none() {
- query_params.order = conf.default_sorting_order
- }
-
- match query_params.sort.unwrap_or(SortingMethod::Name) {
+ match query_params.sort.unwrap_or(conf.default_sorting_method) {
SortingMethod::Name => entries.sort_by(|e1, e2| {
alphanumeric_sort::compare_str(e1.name.to_lowercase(), e2.name.to_lowercase())
}),
@@ -327,7 +322,7 @@ pub fn directory_listing(
}),
};
- if let Some(SortingOrder::Ascending) = query_params.order {
+ if let SortingOrder::Asc = query_params.order.unwrap_or(conf.default_sorting_order) {
entries.reverse()
}