From db3b883a788f04b3bf766efbe3fdffbb564afa68 Mon Sep 17 00:00:00 2001 From: Vladimir Borisov Date: Thu, 5 Aug 2021 17:53:22 +0300 Subject: [PATCH] Use parse_display instead of strum and heck --- Cargo.lock | 103 ++++++++++++++---- Cargo.toml | 5 +- .../stremio_player/communication.rs | 38 +++---- 3 files changed, 99 insertions(+), 47 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2b87d90..5a8e5b0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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" diff --git a/Cargo.toml b/Cargo.toml index 226fa24..7552ff7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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] diff --git a/src/stremio_app/stremio_player/communication.rs b/src/stremio_app/stremio_player/communication.rs index 565daf7..106fb1d 100644 --- a/src/stremio_app/stremio_player/communication.rs +++ b/src/stremio_app/stremio_player/communication.rs @@ -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 for $t { - type Error = strum::ParseError; + type Error = parse_display::ParseError; fn try_from(s: String) -> Result { - 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,