1- use std:: { fmt , path:: PathBuf , str :: FromStr } ;
1+ use std:: path:: PathBuf ;
22
3+ use clap:: ValueEnum ;
34use librespot_protocol:: devices:: DeviceType as ProtoDeviceType ;
5+ use serde:: { Deserialize , Serialize } ;
46use url:: Url ;
57
68pub ( crate ) const KEYMASTER_CLIENT_ID : & str = "65b708073fc0480ea92a077233ca87bd" ;
@@ -31,15 +33,21 @@ pub struct SessionConfig {
3133 pub autoplay : Option < bool > ,
3234}
3335
36+ impl Default for SessionConfig {
37+ fn default ( ) -> Self {
38+ Self :: default_for_os ( OS )
39+ }
40+ }
41+
3442impl SessionConfig {
3543 pub ( crate ) fn default_for_os ( os : & str ) -> Self {
36- let device_id = uuid:: Uuid :: new_v4 ( ) . as_hyphenated ( ) . to_string ( ) ;
3744 let client_id = match os {
3845 "android" => ANDROID_CLIENT_ID ,
3946 "ios" => IOS_CLIENT_ID ,
4047 _ => KEYMASTER_CLIENT_ID ,
4148 }
4249 . to_owned ( ) ;
50+ let device_id = uuid:: Uuid :: new_v4 ( ) . as_hyphenated ( ) . to_string ( ) ;
4351
4452 Self {
4553 client_id,
@@ -52,13 +60,21 @@ impl SessionConfig {
5260 }
5361}
5462
55- impl Default for SessionConfig {
56- fn default ( ) -> Self {
57- Self :: default_for_os ( OS )
58- }
59- }
60-
61- #[ derive( Clone , Copy , Debug , Hash , PartialOrd , Ord , PartialEq , Eq , Default ) ]
63+ #[ derive(
64+ Clone ,
65+ Copy ,
66+ Debug ,
67+ Hash ,
68+ PartialOrd ,
69+ Ord ,
70+ PartialEq ,
71+ Eq ,
72+ Default ,
73+ ValueEnum ,
74+ Serialize ,
75+ Deserialize ,
76+ ) ]
77+ #[ clap( rename_all = "lower" ) ]
6278pub enum DeviceType {
6379 Unknown = 0 ,
6480 Computer = 1 ,
@@ -81,67 +97,9 @@ pub enum DeviceType {
8197 Observer = 102 ,
8298}
8399
84- impl FromStr for DeviceType {
85- type Err = ( ) ;
86- fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
87- use self :: DeviceType :: * ;
88- match s. to_lowercase ( ) . as_ref ( ) {
89- "computer" => Ok ( Computer ) ,
90- "tablet" => Ok ( Tablet ) ,
91- "smartphone" => Ok ( Smartphone ) ,
92- "speaker" => Ok ( Speaker ) ,
93- "tv" => Ok ( Tv ) ,
94- "avr" => Ok ( Avr ) ,
95- "stb" => Ok ( Stb ) ,
96- "audiodongle" => Ok ( AudioDongle ) ,
97- "gameconsole" => Ok ( GameConsole ) ,
98- "castaudio" => Ok ( CastAudio ) ,
99- "castvideo" => Ok ( CastVideo ) ,
100- "automobile" => Ok ( Automobile ) ,
101- "smartwatch" => Ok ( Smartwatch ) ,
102- "chromebook" => Ok ( Chromebook ) ,
103- "carthing" => Ok ( CarThing ) ,
104- _ => Err ( ( ) ) ,
105- }
106- }
107- }
108-
109- impl From < & DeviceType > for & str {
110- fn from ( d : & DeviceType ) -> & ' static str {
111- use self :: DeviceType :: * ;
112- match d {
113- Unknown => "Unknown" ,
114- Computer => "Computer" ,
115- Tablet => "Tablet" ,
116- Smartphone => "Smartphone" ,
117- Speaker => "Speaker" ,
118- Tv => "TV" ,
119- Avr => "AVR" ,
120- Stb => "STB" ,
121- AudioDongle => "AudioDongle" ,
122- GameConsole => "GameConsole" ,
123- CastAudio => "CastAudio" ,
124- CastVideo => "CastVideo" ,
125- Automobile => "Automobile" ,
126- Smartwatch => "Smartwatch" ,
127- Chromebook => "Chromebook" ,
128- UnknownSpotify => "UnknownSpotify" ,
129- CarThing => "CarThing" ,
130- Observer => "Observer" ,
131- }
132- }
133- }
134-
135- impl From < DeviceType > for & str {
136- fn from ( d : DeviceType ) -> & ' static str {
137- ( & d) . into ( )
138- }
139- }
140-
141- impl fmt:: Display for DeviceType {
142- fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
143- let str: & str = self . into ( ) ;
144- f. write_str ( str)
100+ impl From < DeviceType > for String {
101+ fn from ( value : DeviceType ) -> Self {
102+ format ! ( "{value:?}" )
145103 }
146104}
147105
0 commit comments