aboutsummaryrefslogtreecommitdiffstats
path: root/src/listing.rs
diff options
context:
space:
mode:
authorboasting-squirrel <boasting.squirrel@gmail.com>2019-04-07 11:15:48 +0000
committerboasting-squirrel <boasting.squirrel@gmail.com>2019-04-07 11:15:48 +0000
commit2d717e4d0e78bd2132886a3339804f05f816f67a (patch)
tree35565ca622bfc87e72b69ed62a0f4dc914a697ba /src/listing.rs
parentUse strum_macros::EnumIter instead of manually listing Enum variants (diff)
downloadminiserve-2d717e4d0e78bd2132886a3339804f05f816f67a.tar.gz
miniserve-2d717e4d0e78bd2132886a3339804f05f816f67a.zip
Use strum on Enums to reduce boilerplate
Diffstat (limited to 'src/listing.rs')
-rw-r--r--src/listing.rs33
1 files changed, 9 insertions, 24 deletions
diff --git a/src/listing.rs b/src/listing.rs
index b7070f3..5096c73 100644
--- a/src/listing.rs
+++ b/src/listing.rs
@@ -7,6 +7,7 @@ use serde::Deserialize;
use std::io;
use std::path::Path;
use std::time::SystemTime;
+use strum_macros::{Display, EnumString};
use crate::archive;
use crate::errors;
@@ -14,7 +15,7 @@ use crate::renderer;
use crate::themes;
/// Query parameters
-#[derive(Debug, Deserialize)]
+#[derive(Deserialize)]
struct QueryParameters {
sort: Option<SortingMethod>,
order: Option<SortingOrder>,
@@ -23,52 +24,36 @@ struct QueryParameters {
}
/// Available sorting methods
-#[derive(Debug, Deserialize, Clone)]
+#[derive(Deserialize, Clone, EnumString, Display)]
#[serde(rename_all = "lowercase")]
pub enum SortingMethod {
/// Sort by name
+ #[strum(serialize = "name")]
Name,
/// Sort by size
+ #[strum(serialize = "size")]
Size,
/// Sort by last modification date (natural sort: follows alphanumerical order)
+ #[strum(serialize = "date")]
Date,
}
-impl SortingMethod {
- pub fn to_string(&self) -> String {
- match &self {
- SortingMethod::Name => "name",
- SortingMethod::Size => "size",
- SortingMethod::Date => "date",
- }
- .to_string()
- }
-}
-
/// Available sorting orders
-#[derive(Debug, Deserialize, Clone)]
+#[derive(Deserialize, Clone, EnumString, Display)]
pub enum SortingOrder {
/// Ascending order
#[serde(alias = "asc")]
+ #[strum(serialize = "asc")]
Ascending,
/// Descending order
#[serde(alias = "desc")]
+ #[strum(serialize = "desc")]
Descending,
}
-impl SortingOrder {
- pub fn to_string(&self) -> String {
- match &self {
- SortingOrder::Ascending => "asc",
- SortingOrder::Descending => "desc",
- }
- .to_string()
- }
-}
-
#[derive(PartialEq)]
/// Possible entry types
pub enum EntryType {