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.
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]]
name = "ansi_term"
version = "0.11.0"
@ -193,6 +202,12 @@ dependencies = [
"cfg-if",
]
[[package]]
name = "memchr"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc"
[[package]]
name = "mpv"
version = "0.2.3"
@ -341,6 +356,32 @@ dependencies = [
"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]]
name = "pathdiff"
version = "0.2.0"
@ -453,6 +494,23 @@ dependencies = [
"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]]
name = "rustc-serialize"
version = "0.3.24"
@ -511,18 +569,16 @@ version = "0.1.0"
dependencies = [
"bitflags",
"embed-resource",
"heck",
"mpv",
"native-windows-derive",
"native-windows-gui",
"once_cell",
"open",
"parse-display",
"serde",
"serde_json",
"serde_test",
"structopt",
"strum",
"strum_macros",
"urlencoding",
"webview2",
"webview2-sys",
@ -546,6 +602,29 @@ version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
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]]
name = "structopt"
version = "0.3.22"
@ -570,24 +649,6 @@ dependencies = [
"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]]
name = "syn"
version = "1.0.73"

View file

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

View file

@ -1,9 +1,7 @@
use core::convert::TryFrom;
use heck::KebabCase;
use parse_display::{Display, FromStr};
use serde::{Deserialize, Serialize};
use std::fmt;
use std::str::FromStr;
use strum_macros::EnumString;
// Responses
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 {
($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 {
fn from(s: $t) -> Self {
s.to_string()
}
}
impl TryFrom<String> for $t {
type Error = strum::ParseError;
type Error = parse_display::ParseError;
fn try_from(s: String) -> Result<Self, Self::Error> {
Self::from_str(s.as_str())
s.parse()
}
}
};
}
#[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")]
#[strum(serialize_all = "kebab-case")]
#[display(style = "kebab-case")]
pub enum InMsgFn {
MpvSetProp,
MpvCommand,
MpvObserveProp,
}
stringable!(InMsgFn);
// Bool
#[derive(Serialize, Deserialize, Debug, Clone, EnumString, PartialEq)]
#[derive(Display, FromStr, Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(try_from = "String", into = "String")]
#[strum(serialize_all = "kebab-case")]
#[display(style = "kebab-case")]
pub enum BoolProp {
Pause,
PausedForCache,
@ -147,9 +139,9 @@ pub enum BoolProp {
}
stringable!(BoolProp);
// Int
#[derive(Serialize, Deserialize, Debug, Clone, EnumString, PartialEq)]
#[derive(Display, FromStr, Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(try_from = "String", into = "String")]
#[strum(serialize_all = "kebab-case")]
#[display(style = "kebab-case")]
pub enum IntProp {
Aid,
Vid,
@ -157,9 +149,9 @@ pub enum IntProp {
}
stringable!(IntProp);
// Fp
#[derive(Serialize, Deserialize, Debug, Clone, EnumString, PartialEq)]
#[derive(Display, FromStr, Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(try_from = "String", into = "String")]
#[strum(serialize_all = "kebab-case")]
#[display(style = "kebab-case")]
pub enum FpProp {
TimePos,
Volume,
@ -171,9 +163,9 @@ pub enum FpProp {
}
stringable!(FpProp);
// Str
#[derive(Serialize, Deserialize, Debug, Clone, EnumString, PartialEq)]
#[derive(Display, FromStr, Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(try_from = "String", into = "String")]
#[strum(serialize_all = "kebab-case")]
#[display(style = "kebab-case")]
pub enum StrProp {
FfmpegVersion,
Hwdec,
@ -221,9 +213,9 @@ pub enum PropVal {
Num(f64),
}
#[derive(Serialize, Deserialize, Debug, Clone, EnumString, PartialEq)]
#[derive(Display, FromStr, Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(try_from = "String", into = "String")]
#[strum(serialize_all = "kebab-case")]
#[display(style = "kebab-case")]
#[serde(untagged)]
pub enum MpvCmd {
Loadfile,