Struct rspotify_s::AuthCodeSpotify
source · pub struct AuthCodeSpotify {
pub creds: Credentials,
pub oauth: OAuth,
pub config: Config,
pub token: Arc<Mutex<Option<Token>>>,
/* private fields */
}
Expand description
The Authorization Code Flow client for the Spotify API.
This includes user authorization, and thus has access to endpoints related
to user private data, unlike the Client Credentials
Flow client. See BaseClient
and
OAuthClient
for the available endpoints.
If you’re developing a CLI application, you might be interested in the cli
feature. This brings the prompt_for_token
method to automatically follow
the flow steps via user interaction.
Otherwise, these are the steps to be followed to authenticate your app:
-
Generate a request URL with
Self::get_authorize_url
. -
The user logs in with the request URL. They will be redirected to the given redirect URI, including a code in the URL parameters. This happens on your side.
-
The code obtained in the previous step is parsed with
Self::parse_response_code
. -
The code is sent to Spotify in order to obtain an access token with
Self::request_token
. -
Finally, this access token can be used internally for the requests. It may expire relatively soon, so it can be refreshed with the refresh token (obtained in the previous step as well) using
Self::refresh_token
. Otherwise, a new access token may be generated from scratch by repeating these steps, but the advantage of refreshing it is that this doesn’t require the user to log in, and that it’s a simpler procedure.See this related example to learn more about refreshing tokens.
There’s a webapp example for more details on how you can implement it for something like a web server, or this one for a CLI use case.
An example of the CLI authentication:
Note: even if your script does not have an accessible URL, you will have to
specify a redirect URI. It doesn’t need to work, you can use
http://localhost:8888/callback
for example, which will also have the code
appended like so: http://localhost/?code=...
.
Fields§
§creds: Credentials
§oauth: OAuth
§config: Config
§token: Arc<Mutex<Option<Token>>>
Implementations§
source§impl AuthCodeSpotify
impl AuthCodeSpotify
sourcepub fn new(creds: Credentials, oauth: OAuth) -> Self
pub fn new(creds: Credentials, oauth: OAuth) -> Self
Builds a new AuthCodeSpotify
given a pair of client credentials and
OAuth information.
sourcepub fn from_token(token: Token) -> Self
pub fn from_token(token: Token) -> Self
Build a new AuthCodeSpotify
from an already generated token. Note
that once the token expires this will fail to make requests, as the
client credentials aren’t known.
sourcepub fn with_config(creds: Credentials, oauth: OAuth, config: Config) -> Self
pub fn with_config(creds: Credentials, oauth: OAuth, config: Config) -> Self
Same as Self::new
but with an extra parameter to configure the
client.
sourcepub fn from_token_with_config(
token: Token,
creds: Credentials,
oauth: OAuth,
config: Config
) -> Self
pub fn from_token_with_config( token: Token, creds: Credentials, oauth: OAuth, config: Config ) -> Self
Build a new AuthCodeSpotify
from an already generated token and
config. Use this to be able to refresh a token.
Returns the URL needed to authorize the current client as the first step in the authorization flow.
Trait Implementations§
source§impl BaseClient for AuthCodeSpotify
impl BaseClient for AuthCodeSpotify
This client has access to the base methods.
source§fn refetch_token(&self) -> ClientResult<Option<Token>>
fn refetch_token(&self) -> ClientResult<Option<Token>>
Refetch the current access token given a refresh token. May return
None
if there’s no access/refresh token.
fn get_http(&self) -> &HttpClient
source§fn get_token(&self) -> Arc<Mutex<Option<Token>>>
fn get_token(&self) -> Arc<Mutex<Option<Token>>>
Mutex
in order to allow interior
mutability. This is required so that the entire client doesn’t have to
be mutable (the token is accessed to from every endpoint).fn get_creds(&self) -> &Credentials
fn get_config(&self) -> &Config
source§fn auth_url(&self, url: &str) -> String
fn auth_url(&self, url: &str) -> String
source§fn auto_reauth(&self) -> ClientResult<()>
fn auto_reauth(&self) -> ClientResult<()>
source§fn refresh_token(&self) -> ClientResult<()>
fn refresh_token(&self) -> ClientResult<()>
source§fn write_token_cache(&self) -> ClientResult<()>
fn write_token_cache(&self) -> ClientResult<()>
source§fn fetch_access_token(
&self,
payload: &Form<'_>,
headers: Option<&Headers>
) -> ClientResult<Token>
fn fetch_access_token( &self, payload: &Form<'_>, headers: Option<&Headers> ) -> ClientResult<Token>
source§fn track(
&self,
track_id: TrackId<'_>,
market: Option<Market>
) -> ClientResult<FullTrack>
fn track( &self, track_id: TrackId<'_>, market: Option<Market> ) -> ClientResult<FullTrack>
source§fn tracks<'a>(
&self,
track_ids: impl IntoIterator<Item = TrackId<'a>> + Send + 'a,
market: Option<Market>
) -> ClientResult<Vec<FullTrack>>
fn tracks<'a>( &self, track_ids: impl IntoIterator<Item = TrackId<'a>> + Send + 'a, market: Option<Market> ) -> ClientResult<Vec<FullTrack>>
source§fn artist(&self, artist_id: ArtistId<'_>) -> ClientResult<FullArtist>
fn artist(&self, artist_id: ArtistId<'_>) -> ClientResult<FullArtist>
source§fn artists<'a>(
&self,
artist_ids: impl IntoIterator<Item = ArtistId<'a>> + Send + 'a
) -> ClientResult<Vec<FullArtist>>
fn artists<'a>( &self, artist_ids: impl IntoIterator<Item = ArtistId<'a>> + Send + 'a ) -> ClientResult<Vec<FullArtist>>
source§fn artist_albums<'a>(
&'a self,
artist_id: ArtistId<'a>,
include_groups: impl IntoIterator<Item = AlbumType> + Send + Copy + 'a,
market: Option<Market>
) -> Paginator<'_, ClientResult<SimplifiedAlbum>>
fn artist_albums<'a>( &'a self, artist_id: ArtistId<'a>, include_groups: impl IntoIterator<Item = AlbumType> + Send + Copy + 'a, market: Option<Market> ) -> Paginator<'_, ClientResult<SimplifiedAlbum>>
source§fn artist_albums_manual<'a>(
&self,
artist_id: ArtistId<'_>,
include_groups: impl IntoIterator<Item = AlbumType> + Send + 'a,
market: Option<Market>,
limit: Option<u32>,
offset: Option<u32>
) -> ClientResult<Page<SimplifiedAlbum>>
fn artist_albums_manual<'a>( &self, artist_id: ArtistId<'_>, include_groups: impl IntoIterator<Item = AlbumType> + Send + 'a, market: Option<Market>, limit: Option<u32>, offset: Option<u32> ) -> ClientResult<Page<SimplifiedAlbum>>
Self::artist_albums
.source§fn artist_top_tracks(
&self,
artist_id: ArtistId<'_>,
market: Option<Market>
) -> ClientResult<Vec<FullTrack>>
fn artist_top_tracks( &self, artist_id: ArtistId<'_>, market: Option<Market> ) -> ClientResult<Vec<FullTrack>>
source§fn album(
&self,
album_id: AlbumId<'_>,
market: Option<Market>
) -> ClientResult<FullAlbum>
fn album( &self, album_id: AlbumId<'_>, market: Option<Market> ) -> ClientResult<FullAlbum>
source§fn albums<'a>(
&self,
album_ids: impl IntoIterator<Item = AlbumId<'a>> + Send + 'a,
market: Option<Market>
) -> ClientResult<Vec<FullAlbum>>
fn albums<'a>( &self, album_ids: impl IntoIterator<Item = AlbumId<'a>> + Send + 'a, market: Option<Market> ) -> ClientResult<Vec<FullAlbum>>
source§fn search(
&self,
q: &str,
_type: SearchType,
market: Option<Market>,
include_external: Option<IncludeExternal>,
limit: Option<u32>,
offset: Option<u32>
) -> ClientResult<SearchResult>
fn search( &self, q: &str, _type: SearchType, market: Option<Market>, include_external: Option<IncludeExternal>, limit: Option<u32>, offset: Option<u32> ) -> ClientResult<SearchResult>
source§fn album_track<'a>(
&'a self,
album_id: AlbumId<'a>,
market: Option<Market>
) -> Paginator<'_, ClientResult<SimplifiedTrack>>
fn album_track<'a>( &'a self, album_id: AlbumId<'a>, market: Option<Market> ) -> Paginator<'_, ClientResult<SimplifiedTrack>>
source§fn album_track_manual(
&self,
album_id: AlbumId<'_>,
market: Option<Market>,
limit: Option<u32>,
offset: Option<u32>
) -> ClientResult<Page<SimplifiedTrack>>
fn album_track_manual( &self, album_id: AlbumId<'_>, market: Option<Market>, limit: Option<u32>, offset: Option<u32> ) -> ClientResult<Page<SimplifiedTrack>>
Self::album_track
.source§fn user(&self, user_id: UserId<'_>) -> ClientResult<PublicUser>
fn user(&self, user_id: UserId<'_>) -> ClientResult<PublicUser>
source§fn playlist(
&self,
playlist_id: PlaylistId<'_>,
fields: Option<&str>,
market: Option<Market>
) -> ClientResult<FullPlaylist>
fn playlist( &self, playlist_id: PlaylistId<'_>, fields: Option<&str>, market: Option<Market> ) -> ClientResult<FullPlaylist>
source§fn user_playlist(
&self,
user_id: UserId<'_>,
playlist_id: Option<PlaylistId<'_>>,
fields: Option<&str>
) -> ClientResult<FullPlaylist>
fn user_playlist( &self, user_id: UserId<'_>, playlist_id: Option<PlaylistId<'_>>, fields: Option<&str> ) -> ClientResult<FullPlaylist>
source§fn playlist_check_follow(
&self,
playlist_id: PlaylistId<'_>,
user_ids: &[UserId<'_>]
) -> ClientResult<Vec<bool>>
fn playlist_check_follow( &self, playlist_id: PlaylistId<'_>, user_ids: &[UserId<'_>] ) -> ClientResult<Vec<bool>>
source§fn get_a_show(
&self,
id: ShowId<'_>,
market: Option<Market>
) -> ClientResult<FullShow>
fn get_a_show( &self, id: ShowId<'_>, market: Option<Market> ) -> ClientResult<FullShow>
source§fn get_several_shows<'a>(
&self,
ids: impl IntoIterator<Item = ShowId<'a>> + Send + 'a,
market: Option<Market>
) -> ClientResult<Vec<SimplifiedShow>>
fn get_several_shows<'a>( &self, ids: impl IntoIterator<Item = ShowId<'a>> + Send + 'a, market: Option<Market> ) -> ClientResult<Vec<SimplifiedShow>>
source§fn get_shows_episodes<'a>(
&'a self,
id: ShowId<'a>,
market: Option<Market>
) -> Paginator<'_, ClientResult<SimplifiedEpisode>>
fn get_shows_episodes<'a>( &'a self, id: ShowId<'a>, market: Option<Market> ) -> Paginator<'_, ClientResult<SimplifiedEpisode>>
source§fn get_shows_episodes_manual(
&self,
id: ShowId<'_>,
market: Option<Market>,
limit: Option<u32>,
offset: Option<u32>
) -> ClientResult<Page<SimplifiedEpisode>>
fn get_shows_episodes_manual( &self, id: ShowId<'_>, market: Option<Market>, limit: Option<u32>, offset: Option<u32> ) -> ClientResult<Page<SimplifiedEpisode>>
Self::get_shows_episodes
.source§fn get_an_episode(
&self,
id: EpisodeId<'_>,
market: Option<Market>
) -> ClientResult<FullEpisode>
fn get_an_episode( &self, id: EpisodeId<'_>, market: Option<Market> ) -> ClientResult<FullEpisode>
source§fn get_several_episodes<'a>(
&self,
ids: impl IntoIterator<Item = EpisodeId<'a>> + Send + 'a,
market: Option<Market>
) -> ClientResult<Vec<FullEpisode>>
fn get_several_episodes<'a>( &self, ids: impl IntoIterator<Item = EpisodeId<'a>> + Send + 'a, market: Option<Market> ) -> ClientResult<Vec<FullEpisode>>
source§fn track_features(&self, track_id: TrackId<'_>) -> ClientResult<AudioFeatures>
fn track_features(&self, track_id: TrackId<'_>) -> ClientResult<AudioFeatures>
source§fn tracks_features<'a>(
&self,
track_ids: impl IntoIterator<Item = TrackId<'a>> + Send + 'a
) -> ClientResult<Option<Vec<AudioFeatures>>>
fn tracks_features<'a>( &self, track_ids: impl IntoIterator<Item = TrackId<'a>> + Send + 'a ) -> ClientResult<Option<Vec<AudioFeatures>>>
source§fn track_analysis(&self, track_id: TrackId<'_>) -> ClientResult<AudioAnalysis>
fn track_analysis(&self, track_id: TrackId<'_>) -> ClientResult<AudioAnalysis>
source§fn categories<'a>(
&'a self,
locale: Option<&'a str>,
country: Option<Market>
) -> Paginator<'_, ClientResult<Category>>
fn categories<'a>( &'a self, locale: Option<&'a str>, country: Option<Market> ) -> Paginator<'_, ClientResult<Category>>
source§fn categories_manual(
&self,
locale: Option<&str>,
country: Option<Market>,
limit: Option<u32>,
offset: Option<u32>
) -> ClientResult<Page<Category>>
fn categories_manual( &self, locale: Option<&str>, country: Option<Market>, limit: Option<u32>, offset: Option<u32> ) -> ClientResult<Page<Category>>
Self::categories
.source§fn category_playlists<'a>(
&'a self,
category_id: &'a str,
country: Option<Market>
) -> Paginator<'_, ClientResult<SimplifiedPlaylist>>
fn category_playlists<'a>( &'a self, category_id: &'a str, country: Option<Market> ) -> Paginator<'_, ClientResult<SimplifiedPlaylist>>
source§fn category_playlists_manual(
&self,
category_id: &str,
country: Option<Market>,
limit: Option<u32>,
offset: Option<u32>
) -> ClientResult<Page<SimplifiedPlaylist>>
fn category_playlists_manual( &self, category_id: &str, country: Option<Market>, limit: Option<u32>, offset: Option<u32> ) -> ClientResult<Page<SimplifiedPlaylist>>
Self::category_playlists
.source§fn featured_playlists(
&self,
locale: Option<&str>,
country: Option<Market>,
timestamp: Option<DateTime<Utc>>,
limit: Option<u32>,
offset: Option<u32>
) -> ClientResult<FeaturedPlaylists>
fn featured_playlists( &self, locale: Option<&str>, country: Option<Market>, timestamp: Option<DateTime<Utc>>, limit: Option<u32>, offset: Option<u32> ) -> ClientResult<FeaturedPlaylists>
source§fn new_releases(
&self,
country: Option<Market>
) -> Paginator<'_, ClientResult<SimplifiedAlbum>>
fn new_releases( &self, country: Option<Market> ) -> Paginator<'_, ClientResult<SimplifiedAlbum>>
source§fn new_releases_manual(
&self,
country: Option<Market>,
limit: Option<u32>,
offset: Option<u32>
) -> ClientResult<Page<SimplifiedAlbum>>
fn new_releases_manual( &self, country: Option<Market>, limit: Option<u32>, offset: Option<u32> ) -> ClientResult<Page<SimplifiedAlbum>>
Self::new_releases
.source§fn recommendations<'a>(
&self,
attributes: impl IntoIterator<Item = RecommendationsAttribute> + Send + 'a,
seed_artists: Option<impl IntoIterator<Item = ArtistId<'a>> + Send + 'a>,
seed_genres: Option<impl IntoIterator<Item = &'a str> + Send + 'a>,
seed_tracks: Option<impl IntoIterator<Item = TrackId<'a>> + Send + 'a>,
market: Option<Market>,
limit: Option<u32>
) -> ClientResult<Recommendations>
fn recommendations<'a>( &self, attributes: impl IntoIterator<Item = RecommendationsAttribute> + Send + 'a, seed_artists: Option<impl IntoIterator<Item = ArtistId<'a>> + Send + 'a>, seed_genres: Option<impl IntoIterator<Item = &'a str> + Send + 'a>, seed_tracks: Option<impl IntoIterator<Item = TrackId<'a>> + Send + 'a>, market: Option<Market>, limit: Option<u32> ) -> ClientResult<Recommendations>
source§fn playlist_items<'a>(
&'a self,
playlist_id: PlaylistId<'a>,
fields: Option<&'a str>,
market: Option<Market>
) -> Paginator<'_, ClientResult<PlaylistItem>>
fn playlist_items<'a>( &'a self, playlist_id: PlaylistId<'a>, fields: Option<&'a str>, market: Option<Market> ) -> Paginator<'_, ClientResult<PlaylistItem>>
source§fn playlist_items_manual(
&self,
playlist_id: PlaylistId<'_>,
fields: Option<&str>,
market: Option<Market>,
limit: Option<u32>,
offset: Option<u32>
) -> ClientResult<Page<PlaylistItem>>
fn playlist_items_manual( &self, playlist_id: PlaylistId<'_>, fields: Option<&str>, market: Option<Market>, limit: Option<u32>, offset: Option<u32> ) -> ClientResult<Page<PlaylistItem>>
Self::playlist_items
.source§fn user_playlists<'a>(
&'a self,
user_id: UserId<'a>
) -> Paginator<'_, ClientResult<SimplifiedPlaylist>>
fn user_playlists<'a>( &'a self, user_id: UserId<'a> ) -> Paginator<'_, ClientResult<SimplifiedPlaylist>>
source§fn user_playlists_manual(
&self,
user_id: UserId<'_>,
limit: Option<u32>,
offset: Option<u32>
) -> ClientResult<Page<SimplifiedPlaylist>>
fn user_playlists_manual( &self, user_id: UserId<'_>, limit: Option<u32>, offset: Option<u32> ) -> ClientResult<Page<SimplifiedPlaylist>>
Self::user_playlists
.source§impl Clone for AuthCodeSpotify
impl Clone for AuthCodeSpotify
source§fn clone(&self) -> AuthCodeSpotify
fn clone(&self) -> AuthCodeSpotify
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for AuthCodeSpotify
impl Debug for AuthCodeSpotify
source§impl Default for AuthCodeSpotify
impl Default for AuthCodeSpotify
source§fn default() -> AuthCodeSpotify
fn default() -> AuthCodeSpotify
source§impl OAuthClient for AuthCodeSpotify
impl OAuthClient for AuthCodeSpotify
This client includes user authorization, so it has access to the user
private endpoints in OAuthClient
.
source§fn request_token(&self, code: &str) -> ClientResult<()>
fn request_token(&self, code: &str) -> ClientResult<()>
Obtains a user access token given a code, as part of the OAuth authentication. The access token will be saved internally.
fn get_oauth(&self) -> &OAuth
source§fn read_token_cache(&self, allow_expired: bool) -> ClientResult<Option<Token>>
fn read_token_cache(&self, allow_expired: bool) -> ClientResult<Option<Token>>
source§fn parse_response_code(&self, url: &str) -> Option<String>
fn parse_response_code(&self, url: &str) -> Option<String>
code
parameter is not present, this will return None
.source§fn get_code_from_user(&self, url: &str) -> ClientResult<String>
fn get_code_from_user(&self, url: &str) -> ClientResult<String>
source§fn prompt_for_token(&self, url: &str) -> ClientResult<()>
fn prompt_for_token(&self, url: &str) -> ClientResult<()>
source§fn current_user_playlists(
&self
) -> Paginator<'_, ClientResult<SimplifiedPlaylist>>
fn current_user_playlists( &self ) -> Paginator<'_, ClientResult<SimplifiedPlaylist>>
source§fn current_user_playlists_manual(
&self,
limit: Option<u32>,
offset: Option<u32>
) -> ClientResult<Page<SimplifiedPlaylist>>
fn current_user_playlists_manual( &self, limit: Option<u32>, offset: Option<u32> ) -> ClientResult<Page<SimplifiedPlaylist>>
Self::current_user_playlists
.source§fn user_playlist_create(
&self,
user_id: UserId<'_>,
name: &str,
public: Option<bool>,
collaborative: Option<bool>,
description: Option<&str>
) -> ClientResult<FullPlaylist>
fn user_playlist_create( &self, user_id: UserId<'_>, name: &str, public: Option<bool>, collaborative: Option<bool>, description: Option<&str> ) -> ClientResult<FullPlaylist>
source§fn playlist_change_detail(
&self,
playlist_id: PlaylistId<'_>,
name: Option<&str>,
public: Option<bool>,
description: Option<&str>,
collaborative: Option<bool>
) -> ClientResult<String>
fn playlist_change_detail( &self, playlist_id: PlaylistId<'_>, name: Option<&str>, public: Option<bool>, description: Option<&str>, collaborative: Option<bool> ) -> ClientResult<String>
source§fn playlist_unfollow(&self, playlist_id: PlaylistId<'_>) -> ClientResult<()>
fn playlist_unfollow(&self, playlist_id: PlaylistId<'_>) -> ClientResult<()>
source§fn playlist_add_items<'a>(
&self,
playlist_id: PlaylistId<'_>,
items: impl IntoIterator<Item = PlayableId<'a>> + Send + 'a,
position: Option<u32>
) -> ClientResult<PlaylistResult>
fn playlist_add_items<'a>( &self, playlist_id: PlaylistId<'_>, items: impl IntoIterator<Item = PlayableId<'a>> + Send + 'a, position: Option<u32> ) -> ClientResult<PlaylistResult>
source§fn playlist_replace_items<'a>(
&self,
playlist_id: PlaylistId<'_>,
items: impl IntoIterator<Item = PlayableId<'a>> + Send + 'a
) -> ClientResult<()>
fn playlist_replace_items<'a>( &self, playlist_id: PlaylistId<'_>, items: impl IntoIterator<Item = PlayableId<'a>> + Send + 'a ) -> ClientResult<()>
source§fn playlist_reorder_items(
&self,
playlist_id: PlaylistId<'_>,
range_start: Option<i32>,
insert_before: Option<i32>,
range_length: Option<u32>,
snapshot_id: Option<&str>
) -> ClientResult<PlaylistResult>
fn playlist_reorder_items( &self, playlist_id: PlaylistId<'_>, range_start: Option<i32>, insert_before: Option<i32>, range_length: Option<u32>, snapshot_id: Option<&str> ) -> ClientResult<PlaylistResult>
source§fn playlist_remove_all_occurrences_of_items<'a>(
&self,
playlist_id: PlaylistId<'_>,
track_ids: impl IntoIterator<Item = PlayableId<'a>> + Send + 'a,
snapshot_id: Option<&str>
) -> ClientResult<PlaylistResult>
fn playlist_remove_all_occurrences_of_items<'a>( &self, playlist_id: PlaylistId<'_>, track_ids: impl IntoIterator<Item = PlayableId<'a>> + Send + 'a, snapshot_id: Option<&str> ) -> ClientResult<PlaylistResult>
source§fn playlist_remove_specific_occurrences_of_items<'a>(
&self,
playlist_id: PlaylistId<'_>,
items: impl IntoIterator<Item = ItemPositions<'a>> + Send + 'a,
snapshot_id: Option<&str>
) -> ClientResult<PlaylistResult>
fn playlist_remove_specific_occurrences_of_items<'a>( &self, playlist_id: PlaylistId<'_>, items: impl IntoIterator<Item = ItemPositions<'a>> + Send + 'a, snapshot_id: Option<&str> ) -> ClientResult<PlaylistResult>
source§fn playlist_follow(
&self,
playlist_id: PlaylistId<'_>,
public: Option<bool>
) -> ClientResult<()>
fn playlist_follow( &self, playlist_id: PlaylistId<'_>, public: Option<bool> ) -> ClientResult<()>
source§fn me(&self) -> ClientResult<PrivateUser>
fn me(&self) -> ClientResult<PrivateUser>
source§fn current_user(&self) -> ClientResult<PrivateUser>
fn current_user(&self) -> ClientResult<PrivateUser>
source§fn current_user_playing_item(
&self
) -> ClientResult<Option<CurrentlyPlayingContext>>
fn current_user_playing_item( &self ) -> ClientResult<Option<CurrentlyPlayingContext>>
source§fn current_user_saved_albums(
&self,
market: Option<Market>
) -> Paginator<'_, ClientResult<SavedAlbum>>
fn current_user_saved_albums( &self, market: Option<Market> ) -> Paginator<'_, ClientResult<SavedAlbum>>
source§fn current_user_saved_albums_manual(
&self,
market: Option<Market>,
limit: Option<u32>,
offset: Option<u32>
) -> ClientResult<Page<SavedAlbum>>
fn current_user_saved_albums_manual( &self, market: Option<Market>, limit: Option<u32>, offset: Option<u32> ) -> ClientResult<Page<SavedAlbum>>
Self::current_user_saved_albums
.source§fn current_user_saved_tracks(
&self,
market: Option<Market>
) -> Paginator<'_, ClientResult<SavedTrack>>
fn current_user_saved_tracks( &self, market: Option<Market> ) -> Paginator<'_, ClientResult<SavedTrack>>
source§fn current_user_saved_tracks_manual(
&self,
market: Option<Market>,
limit: Option<u32>,
offset: Option<u32>
) -> ClientResult<Page<SavedTrack>>
fn current_user_saved_tracks_manual( &self, market: Option<Market>, limit: Option<u32>, offset: Option<u32> ) -> ClientResult<Page<SavedTrack>>
Self::current_user_saved_tracks
.source§fn current_user_followed_artists(
&self,
after: Option<&str>,
limit: Option<u32>
) -> ClientResult<CursorBasedPage<FullArtist>>
fn current_user_followed_artists( &self, after: Option<&str>, limit: Option<u32> ) -> ClientResult<CursorBasedPage<FullArtist>>
source§fn current_user_saved_tracks_delete<'a>(
&self,
track_ids: impl IntoIterator<Item = TrackId<'a>> + Send + 'a
) -> ClientResult<()>
fn current_user_saved_tracks_delete<'a>( &self, track_ids: impl IntoIterator<Item = TrackId<'a>> + Send + 'a ) -> ClientResult<()>
source§fn current_user_saved_tracks_contains<'a>(
&self,
track_ids: impl IntoIterator<Item = TrackId<'a>> + Send + 'a
) -> ClientResult<Vec<bool>>
fn current_user_saved_tracks_contains<'a>( &self, track_ids: impl IntoIterator<Item = TrackId<'a>> + Send + 'a ) -> ClientResult<Vec<bool>>
source§fn current_user_saved_tracks_add<'a>(
&self,
track_ids: impl IntoIterator<Item = TrackId<'a>> + Send + 'a
) -> ClientResult<()>
fn current_user_saved_tracks_add<'a>( &self, track_ids: impl IntoIterator<Item = TrackId<'a>> + Send + 'a ) -> ClientResult<()>
source§fn current_user_top_artists(
&self,
time_range: Option<TimeRange>
) -> Paginator<'_, ClientResult<FullArtist>>
fn current_user_top_artists( &self, time_range: Option<TimeRange> ) -> Paginator<'_, ClientResult<FullArtist>>
source§fn current_user_top_artists_manual(
&self,
time_range: Option<TimeRange>,
limit: Option<u32>,
offset: Option<u32>
) -> ClientResult<Page<FullArtist>>
fn current_user_top_artists_manual( &self, time_range: Option<TimeRange>, limit: Option<u32>, offset: Option<u32> ) -> ClientResult<Page<FullArtist>>
Self::current_user_top_artists
.source§fn current_user_top_tracks(
&self,
time_range: Option<TimeRange>
) -> Paginator<'_, ClientResult<FullTrack>>
fn current_user_top_tracks( &self, time_range: Option<TimeRange> ) -> Paginator<'_, ClientResult<FullTrack>>
source§fn current_user_top_tracks_manual(
&self,
time_range: Option<TimeRange>,
limit: Option<u32>,
offset: Option<u32>
) -> ClientResult<Page<FullTrack>>
fn current_user_top_tracks_manual( &self, time_range: Option<TimeRange>, limit: Option<u32>, offset: Option<u32> ) -> ClientResult<Page<FullTrack>>
Self::current_user_top_tracks
.source§fn current_user_recently_played(
&self,
limit: Option<u32>,
time_limit: Option<TimeLimits>
) -> ClientResult<CursorBasedPage<PlayHistory>>
fn current_user_recently_played( &self, limit: Option<u32>, time_limit: Option<TimeLimits> ) -> ClientResult<CursorBasedPage<PlayHistory>>
source§fn current_user_saved_albums_add<'a>(
&self,
album_ids: impl IntoIterator<Item = AlbumId<'a>> + Send + 'a
) -> ClientResult<()>
fn current_user_saved_albums_add<'a>( &self, album_ids: impl IntoIterator<Item = AlbumId<'a>> + Send + 'a ) -> ClientResult<()>
source§fn current_user_saved_albums_delete<'a>(
&self,
album_ids: impl IntoIterator<Item = AlbumId<'a>> + Send + 'a
) -> ClientResult<()>
fn current_user_saved_albums_delete<'a>( &self, album_ids: impl IntoIterator<Item = AlbumId<'a>> + Send + 'a ) -> ClientResult<()>
source§fn current_user_saved_albums_contains<'a>(
&self,
album_ids: impl IntoIterator<Item = AlbumId<'a>> + Send + 'a
) -> ClientResult<Vec<bool>>
fn current_user_saved_albums_contains<'a>( &self, album_ids: impl IntoIterator<Item = AlbumId<'a>> + Send + 'a ) -> ClientResult<Vec<bool>>
source§fn user_follow_artists<'a>(
&self,
artist_ids: impl IntoIterator<Item = ArtistId<'a>> + Send + 'a
) -> ClientResult<()>
fn user_follow_artists<'a>( &self, artist_ids: impl IntoIterator<Item = ArtistId<'a>> + Send + 'a ) -> ClientResult<()>
source§fn user_unfollow_artists<'a>(
&self,
artist_ids: impl IntoIterator<Item = ArtistId<'a>> + Send + 'a
) -> ClientResult<()>
fn user_unfollow_artists<'a>( &self, artist_ids: impl IntoIterator<Item = ArtistId<'a>> + Send + 'a ) -> ClientResult<()>
source§fn user_artist_check_follow<'a>(
&self,
artist_ids: impl IntoIterator<Item = ArtistId<'a>> + Send + 'a
) -> ClientResult<Vec<bool>>
fn user_artist_check_follow<'a>( &self, artist_ids: impl IntoIterator<Item = ArtistId<'a>> + Send + 'a ) -> ClientResult<Vec<bool>>
source§fn user_follow_users<'a>(
&self,
user_ids: impl IntoIterator<Item = UserId<'a>> + Send + 'a
) -> ClientResult<()>
fn user_follow_users<'a>( &self, user_ids: impl IntoIterator<Item = UserId<'a>> + Send + 'a ) -> ClientResult<()>
source§fn user_unfollow_users<'a>(
&self,
user_ids: impl IntoIterator<Item = UserId<'a>> + Send + 'a
) -> ClientResult<()>
fn user_unfollow_users<'a>( &self, user_ids: impl IntoIterator<Item = UserId<'a>> + Send + 'a ) -> ClientResult<()>
source§fn current_playback<'a>(
&self,
country: Option<Market>,
additional_types: Option<impl IntoIterator<Item = &'a AdditionalType> + Send + 'a>
) -> ClientResult<Option<CurrentPlaybackContext>>
fn current_playback<'a>( &self, country: Option<Market>, additional_types: Option<impl IntoIterator<Item = &'a AdditionalType> + Send + 'a> ) -> ClientResult<Option<CurrentPlaybackContext>>
source§fn current_playing<'a>(
&'a self,
market: Option<Market>,
additional_types: Option<impl IntoIterator<Item = &'a AdditionalType> + Send + 'a>
) -> ClientResult<Option<CurrentlyPlayingContext>>
fn current_playing<'a>( &'a self, market: Option<Market>, additional_types: Option<impl IntoIterator<Item = &'a AdditionalType> + Send + 'a> ) -> ClientResult<Option<CurrentlyPlayingContext>>
source§fn current_user_queue(&self) -> ClientResult<CurrentUserQueue>
fn current_user_queue(&self) -> ClientResult<CurrentUserQueue>
source§fn transfer_playback(
&self,
device_id: &str,
play: Option<bool>
) -> ClientResult<()>
fn transfer_playback( &self, device_id: &str, play: Option<bool> ) -> ClientResult<()>
source§fn start_context_playback(
&self,
context_uri: PlayContextId<'_>,
device_id: Option<&str>,
offset: Option<Offset>,
position: Option<Duration>
) -> ClientResult<()>
fn start_context_playback( &self, context_uri: PlayContextId<'_>, device_id: Option<&str>, offset: Option<Offset>, position: Option<Duration> ) -> ClientResult<()>
source§fn start_uris_playback<'a>(
&self,
uris: impl IntoIterator<Item = PlayableId<'a>> + Send + 'a,
device_id: Option<&str>,
offset: Option<Offset>,
position: Option<Duration>
) -> ClientResult<()>
fn start_uris_playback<'a>( &self, uris: impl IntoIterator<Item = PlayableId<'a>> + Send + 'a, device_id: Option<&str>, offset: Option<Offset>, position: Option<Duration> ) -> ClientResult<()>
source§fn pause_playback(&self, device_id: Option<&str>) -> ClientResult<()>
fn pause_playback(&self, device_id: Option<&str>) -> ClientResult<()>
source§fn resume_playback(
&self,
device_id: Option<&str>,
position: Option<Duration>
) -> ClientResult<()>
fn resume_playback( &self, device_id: Option<&str>, position: Option<Duration> ) -> ClientResult<()>
source§fn next_track(&self, device_id: Option<&str>) -> ClientResult<()>
fn next_track(&self, device_id: Option<&str>) -> ClientResult<()>
source§fn previous_track(&self, device_id: Option<&str>) -> ClientResult<()>
fn previous_track(&self, device_id: Option<&str>) -> ClientResult<()>
source§fn seek_track(
&self,
position: Duration,
device_id: Option<&str>
) -> ClientResult<()>
fn seek_track( &self, position: Duration, device_id: Option<&str> ) -> ClientResult<()>
source§fn repeat(
&self,
state: RepeatState,
device_id: Option<&str>
) -> ClientResult<()>
fn repeat( &self, state: RepeatState, device_id: Option<&str> ) -> ClientResult<()>
source§fn volume(
&self,
volume_percent: u8,
device_id: Option<&str>
) -> ClientResult<()>
fn volume( &self, volume_percent: u8, device_id: Option<&str> ) -> ClientResult<()>
source§fn shuffle(&self, state: bool, device_id: Option<&str>) -> ClientResult<()>
fn shuffle(&self, state: bool, device_id: Option<&str>) -> ClientResult<()>
source§fn add_item_to_queue(
&self,
item: PlayableId<'_>,
device_id: Option<&str>
) -> ClientResult<()>
fn add_item_to_queue( &self, item: PlayableId<'_>, device_id: Option<&str> ) -> ClientResult<()>
source§fn save_shows<'a>(
&self,
show_ids: impl IntoIterator<Item = ShowId<'a>> + Send + 'a
) -> ClientResult<()>
fn save_shows<'a>( &self, show_ids: impl IntoIterator<Item = ShowId<'a>> + Send + 'a ) -> ClientResult<()>
source§fn get_saved_show(&self) -> Paginator<'_, ClientResult<Show>>
fn get_saved_show(&self) -> Paginator<'_, ClientResult<Show>>
source§fn get_saved_show_manual(
&self,
limit: Option<u32>,
offset: Option<u32>
) -> ClientResult<Page<Show>>
fn get_saved_show_manual( &self, limit: Option<u32>, offset: Option<u32> ) -> ClientResult<Page<Show>>
Self::get_saved_show
.