librespot_protocol/impl_trait/
player.rs1use 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}