Use parse_display instead of strum and heck

This commit is contained in:
Vladimir Borisov 2021-08-05 17:53:22 +03:00
parent 4de3b463a7
commit 4d05ec1a5d
3 changed files with 99 additions and 47 deletions

103
Cargo.lock generated
View file

@ -2,6 +2,15 @@
# It is not intended for manual editing. # It is not intended for manual editing.
version = 3 version = 3
[[package]]
name = "aho-corasick"
version = "0.7.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
dependencies = [
"memchr",
]
[[package]] [[package]]
name = "ansi_term" name = "ansi_term"
version = "0.11.0" version = "0.11.0"
@ -193,6 +202,12 @@ dependencies = [
"cfg-if", "cfg-if",
] ]
[[package]]
name = "memchr"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc"
[[package]] [[package]]
name = "mpv" name = "mpv"
version = "0.2.3" version = "0.2.3"
@ -341,6 +356,32 @@ dependencies = [
"winapi", "winapi",
] ]
[[package]]
name = "parse-display"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f17011e14e6b831ed3aeab847a62fd338aee88539fcc99f23ce5ba98feba328"
dependencies = [
"once_cell",
"parse-display-derive",
"regex",
]
[[package]]
name = "parse-display-derive"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad30302271e65d661910580baf25e874cd92c4595ddbed74d1ec9b2fdfaae64b"
dependencies = [
"once_cell",
"proc-macro2",
"quote",
"regex",
"regex-syntax",
"structmeta",
"syn",
]
[[package]] [[package]]
name = "pathdiff" name = "pathdiff"
version = "0.2.0" version = "0.2.0"
@ -453,6 +494,23 @@ dependencies = [
"rand_core 0.3.1", "rand_core 0.3.1",
] ]
[[package]]
name = "regex"
version = "1.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
]
[[package]]
name = "regex-syntax"
version = "0.6.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
[[package]] [[package]]
name = "rustc-serialize" name = "rustc-serialize"
version = "0.3.24" version = "0.3.24"
@ -511,18 +569,16 @@ version = "0.1.0"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"embed-resource", "embed-resource",
"heck",
"mpv", "mpv",
"native-windows-derive", "native-windows-derive",
"native-windows-gui", "native-windows-gui",
"once_cell", "once_cell",
"open", "open",
"parse-display",
"serde", "serde",
"serde_json", "serde_json",
"serde_test", "serde_test",
"structopt", "structopt",
"strum",
"strum_macros",
"urlencoding", "urlencoding",
"webview2", "webview2",
"webview2-sys", "webview2-sys",
@ -546,6 +602,29 @@ version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
[[package]]
name = "structmeta"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b55b4052fd036e3d1fe74ea978426a3f87997ba803e7a8e69ff0cf99f35a720a"
dependencies = [
"proc-macro2",
"quote",
"structmeta-derive",
"syn",
]
[[package]]
name = "structmeta-derive"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f55502dda4b5fd26b33f6810d7493b4f5d7859bca604bd07ff22a523cd257ee"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "structopt" name = "structopt"
version = "0.3.22" version = "0.3.22"
@ -570,24 +649,6 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "strum"
version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aaf86bbcfd1fa9670b7a129f64fc0c9fcbbfe4f1bc4210e9e98fe71ffc12cde2"
[[package]]
name = "strum_macros"
version = "0.21.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec"
dependencies = [
"heck",
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.73" version = "1.0.73"

View file

@ -19,10 +19,9 @@ structopt = "0.3"
open = "1" open = "1"
urlencoding = "2.1.0" urlencoding = "2.1.0"
bitflags = "1.2.1" bitflags = "1.2.1"
strum = "0.21"
strum_macros = "0.21"
heck = "0.3"
win32job = "1" win32job = "1"
parse-display = "0.5.1"
[build-dependencies] [build-dependencies]
embed-resource = "1.3" embed-resource = "1.3"
[dev-dependencies] [dev-dependencies]

View file

@ -1,9 +1,7 @@
use core::convert::TryFrom; use core::convert::TryFrom;
use heck::KebabCase; use parse_display::{Display, FromStr};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::fmt; use std::fmt;
use std::str::FromStr;
use strum_macros::EnumString;
// Responses // Responses
const JSON_RESPONSES: [&str; 3] = ["track-list", "video-params", "metadata"]; const JSON_RESPONSES: [&str; 3] = ["track-list", "video-params", "metadata"];
@ -105,40 +103,34 @@ have any arguments. For example this are the commands we support:
*/ */
macro_rules! stringable { macro_rules! stringable {
($t:ident) => { ($t:ident) => {
impl fmt::Display for $t {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", format!("{:?}", self).to_kebab_case())
}
}
impl From<$t> for String { impl From<$t> for String {
fn from(s: $t) -> Self { fn from(s: $t) -> Self {
s.to_string() s.to_string()
} }
} }
impl TryFrom<String> for $t { impl TryFrom<String> for $t {
type Error = strum::ParseError; type Error = parse_display::ParseError;
fn try_from(s: String) -> Result<Self, Self::Error> { fn try_from(s: String) -> Result<Self, Self::Error> {
Self::from_str(s.as_str()) s.parse()
} }
} }
}; };
} }
#[allow(clippy::enum_variant_names)] #[allow(clippy::enum_variant_names)]
#[derive(Serialize, Deserialize, Debug, Clone, EnumString, PartialEq)] #[derive(Display, FromStr, Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(try_from = "String", into = "String")] #[serde(try_from = "String", into = "String")]
#[strum(serialize_all = "kebab-case")] #[display(style = "kebab-case")]
pub enum InMsgFn { pub enum InMsgFn {
MpvSetProp, MpvSetProp,
MpvCommand, MpvCommand,
MpvObserveProp, MpvObserveProp,
} }
stringable!(InMsgFn); stringable!(InMsgFn);
// Bool // Bool
#[derive(Serialize, Deserialize, Debug, Clone, EnumString, PartialEq)] #[derive(Display, FromStr, Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(try_from = "String", into = "String")] #[serde(try_from = "String", into = "String")]
#[strum(serialize_all = "kebab-case")] #[display(style = "kebab-case")]
pub enum BoolProp { pub enum BoolProp {
Pause, Pause,
PausedForCache, PausedForCache,
@ -147,9 +139,9 @@ pub enum BoolProp {
} }
stringable!(BoolProp); stringable!(BoolProp);
// Int // Int
#[derive(Serialize, Deserialize, Debug, Clone, EnumString, PartialEq)] #[derive(Display, FromStr, Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(try_from = "String", into = "String")] #[serde(try_from = "String", into = "String")]
#[strum(serialize_all = "kebab-case")] #[display(style = "kebab-case")]
pub enum IntProp { pub enum IntProp {
Aid, Aid,
Vid, Vid,
@ -157,9 +149,9 @@ pub enum IntProp {
} }
stringable!(IntProp); stringable!(IntProp);
// Fp // Fp
#[derive(Serialize, Deserialize, Debug, Clone, EnumString, PartialEq)] #[derive(Display, FromStr, Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(try_from = "String", into = "String")] #[serde(try_from = "String", into = "String")]
#[strum(serialize_all = "kebab-case")] #[display(style = "kebab-case")]
pub enum FpProp { pub enum FpProp {
TimePos, TimePos,
Volume, Volume,
@ -171,9 +163,9 @@ pub enum FpProp {
} }
stringable!(FpProp); stringable!(FpProp);
// Str // Str
#[derive(Serialize, Deserialize, Debug, Clone, EnumString, PartialEq)] #[derive(Display, FromStr, Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(try_from = "String", into = "String")] #[serde(try_from = "String", into = "String")]
#[strum(serialize_all = "kebab-case")] #[display(style = "kebab-case")]
pub enum StrProp { pub enum StrProp {
FfmpegVersion, FfmpegVersion,
Hwdec, Hwdec,
@ -221,9 +213,9 @@ pub enum PropVal {
Num(f64), Num(f64),
} }
#[derive(Serialize, Deserialize, Debug, Clone, EnumString, PartialEq)] #[derive(Display, FromStr, Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(try_from = "String", into = "String")] #[serde(try_from = "String", into = "String")]
#[strum(serialize_all = "kebab-case")] #[display(style = "kebab-case")]
#[serde(untagged)] #[serde(untagged)]
pub enum MpvCmd { pub enum MpvCmd {
Loadfile, Loadfile,