librespot_protocol/impl_trait/
player.rs

1use crate::{
2    context_player_options::ContextPlayerOptions,
3    play_origin::PlayOrigin,
4    player::{
5        ContextPlayerOptions as PlayerContextPlayerOptions,
6        ModeRestrictions as PlayerModeRestrictions, PlayOrigin as PlayerPlayOrigin,
7        RestrictionReasons as PlayerRestrictionReasons, Restrictions as PlayerRestrictions,
8        Suppressions as PlayerSuppressions,
9    },
10    restrictions::{ModeRestrictions, RestrictionReasons, Restrictions},
11    suppressions::Suppressions,
12};
13use std::collections::HashMap;
14
15fn hashmap_into<T: Into<V>, V>(map: HashMap<String, T>) -> HashMap<String, V> {
16    map.into_iter().map(|(k, v)| (k, v.into())).collect()
17}
18
19impl From<ContextPlayerOptions> for PlayerContextPlayerOptions {
20    fn from(value: ContextPlayerOptions) -> Self {
21        PlayerContextPlayerOptions {
22            shuffling_context: value.shuffling_context.unwrap_or_default(),
23            repeating_context: value.repeating_context.unwrap_or_default(),
24            repeating_track: value.repeating_track.unwrap_or_default(),
25            modes: value.modes,
26            playback_speed: value.playback_speed,
27            special_fields: value.special_fields,
28        }
29    }
30}
31
32impl From<PlayerRestrictions> for Restrictions {
33    fn from(value: PlayerRestrictions) -> Self {
34        Restrictions {
35            disallow_pausing_reasons: value.disallow_pausing_reasons,
36            disallow_resuming_reasons: value.disallow_resuming_reasons,
37            disallow_seeking_reasons: value.disallow_seeking_reasons,
38            disallow_peeking_prev_reasons: value.disallow_peeking_prev_reasons,
39            disallow_peeking_next_reasons: value.disallow_peeking_next_reasons,
40            disallow_skipping_prev_reasons: value.disallow_skipping_prev_reasons,
41            disallow_skipping_next_reasons: value.disallow_skipping_next_reasons,
42            disallow_toggling_repeat_context_reasons: value
43                .disallow_toggling_repeat_context_reasons,
44            disallow_toggling_repeat_track_reasons: value.disallow_toggling_repeat_track_reasons,
45            disallow_toggling_shuffle_reasons: value.disallow_toggling_shuffle_reasons,
46            disallow_set_queue_reasons: value.disallow_set_queue_reasons,
47            disallow_interrupting_playback_reasons: value.disallow_interrupting_playback_reasons,
48            disallow_transferring_playback_reasons: value.disallow_transferring_playback_reasons,
49            disallow_remote_control_reasons: value.disallow_remote_control_reasons,
50            disallow_inserting_into_next_tracks_reasons: value
51                .disallow_inserting_into_next_tracks_reasons,
52            disallow_inserting_into_context_tracks_reasons: value
53                .disallow_inserting_into_context_tracks_reasons,
54            disallow_reordering_in_next_tracks_reasons: value
55                .disallow_reordering_in_next_tracks_reasons,
56            disallow_reordering_in_context_tracks_reasons: value
57                .disallow_reordering_in_context_tracks_reasons,
58            disallow_removing_from_next_tracks_reasons: value
59                .disallow_removing_from_next_tracks_reasons,
60            disallow_removing_from_context_tracks_reasons: value
61                .disallow_removing_from_context_tracks_reasons,
62            disallow_updating_context_reasons: value.disallow_updating_context_reasons,
63            disallow_add_to_queue_reasons: value.disallow_add_to_queue_reasons,
64            disallow_setting_playback_speed: value.disallow_setting_playback_speed_reasons,
65            disallow_setting_modes: hashmap_into(value.disallow_setting_modes),
66            disallow_signals: hashmap_into(value.disallow_signals),
67            special_fields: value.special_fields,
68        }
69    }
70}
71
72impl From<Restrictions> for PlayerRestrictions {
73    fn from(value: Restrictions) -> Self {
74        PlayerRestrictions {
75            disallow_pausing_reasons: value.disallow_pausing_reasons,
76            disallow_resuming_reasons: value.disallow_resuming_reasons,
77            disallow_seeking_reasons: value.disallow_seeking_reasons,
78            disallow_peeking_prev_reasons: value.disallow_peeking_prev_reasons,
79            disallow_peeking_next_reasons: value.disallow_peeking_next_reasons,
80            disallow_skipping_prev_reasons: value.disallow_skipping_prev_reasons,
81            disallow_skipping_next_reasons: value.disallow_skipping_next_reasons,
82            disallow_toggling_repeat_context_reasons: value
83                .disallow_toggling_repeat_context_reasons,
84            disallow_toggling_repeat_track_reasons: value.disallow_toggling_repeat_track_reasons,
85            disallow_toggling_shuffle_reasons: value.disallow_toggling_shuffle_reasons,
86            disallow_set_queue_reasons: value.disallow_set_queue_reasons,
87            disallow_interrupting_playback_reasons: value.disallow_interrupting_playback_reasons,
88            disallow_transferring_playback_reasons: value.disallow_transferring_playback_reasons,
89            disallow_remote_control_reasons: value.disallow_remote_control_reasons,
90            disallow_inserting_into_next_tracks_reasons: value
91                .disallow_inserting_into_next_tracks_reasons,
92            disallow_inserting_into_context_tracks_reasons: value
93                .disallow_inserting_into_context_tracks_reasons,
94            disallow_reordering_in_next_tracks_reasons: value
95                .disallow_reordering_in_next_tracks_reasons,
96            disallow_reordering_in_context_tracks_reasons: value
97                .disallow_reordering_in_context_tracks_reasons,
98            disallow_removing_from_next_tracks_reasons: value
99                .disallow_removing_from_next_tracks_reasons,
100            disallow_removing_from_context_tracks_reasons: value
101                .disallow_removing_from_context_tracks_reasons,
102            disallow_updating_context_reasons: value.disallow_updating_context_reasons,
103            disallow_add_to_queue_reasons: value.disallow_add_to_queue_reasons,
104            disallow_setting_playback_speed_reasons: value.disallow_setting_playback_speed,
105            disallow_setting_modes: hashmap_into(value.disallow_setting_modes),
106            disallow_signals: hashmap_into(value.disallow_signals),
107            disallow_playing_reasons: vec![],
108            disallow_stopping_reasons: vec![],
109            special_fields: value.special_fields,
110        }
111    }
112}
113
114impl From<PlayerModeRestrictions> for ModeRestrictions {
115    fn from(value: PlayerModeRestrictions) -> Self {
116        ModeRestrictions {
117            values: hashmap_into(value.values),
118            special_fields: value.special_fields,
119        }
120    }
121}
122
123impl From<ModeRestrictions> for PlayerModeRestrictions {
124    fn from(value: ModeRestrictions) -> Self {
125        PlayerModeRestrictions {
126            values: hashmap_into(value.values),
127            special_fields: value.special_fields,
128        }
129    }
130}
131
132impl From<PlayerRestrictionReasons> for RestrictionReasons {
133    fn from(value: PlayerRestrictionReasons) -> Self {
134        RestrictionReasons {
135            reasons: value.reasons,
136            special_fields: value.special_fields,
137        }
138    }
139}
140
141impl From<RestrictionReasons> for PlayerRestrictionReasons {
142    fn from(value: RestrictionReasons) -> Self {
143        PlayerRestrictionReasons {
144            reasons: value.reasons,
145            special_fields: value.special_fields,
146        }
147    }
148}
149
150impl From<PlayOrigin> for PlayerPlayOrigin {
151    fn from(value: PlayOrigin) -> Self {
152        PlayerPlayOrigin {
153            feature_identifier: value.feature_identifier.unwrap_or_default(),
154            feature_version: value.feature_version.unwrap_or_default(),
155            view_uri: value.view_uri.unwrap_or_default(),
156            external_referrer: value.external_referrer.unwrap_or_default(),
157            referrer_identifier: value.referrer_identifier.unwrap_or_default(),
158            device_identifier: value.device_identifier.unwrap_or_default(),
159            feature_classes: value.feature_classes,
160            restriction_identifier: value.restriction_identifier.unwrap_or_default(),
161            special_fields: value.special_fields,
162        }
163    }
164}
165
166impl From<Suppressions> for PlayerSuppressions {
167    fn from(value: Suppressions) -> Self {
168        PlayerSuppressions {
169            providers: value.providers,
170            special_fields: value.special_fields,
171        }
172    }
173}