Skip to main content

lastfm_client/
lib.rs

1//! Async Rust client for the Last.fm API.
2//!
3//! Provides typed access to user listening data including recent tracks,
4//! loved tracks, top tracks, top artists, and top albums.
5
6/// API client modules for each Last.fm resource type
7pub mod api;
8/// HTTP client infrastructure (trait, retry, rate limiting)
9pub mod client;
10/// Configuration types and builder
11pub mod config;
12/// Error types and result alias
13pub mod error;
14/// Data types for Last.fm API responses
15pub mod types;
16
17/// Track analysis and statistics
18#[path = "analytics.rs"]
19pub mod analytics;
20
21/// Flat CSV layouts for nested Last.fm types (internal)
22mod csv_export;
23
24/// File I/O for saving and loading track data
25#[path = "file_handler.rs"]
26pub mod file_handler;
27
28/// URL construction utilities
29#[path = "url_builder.rs"]
30pub mod url_builder;
31
32/// SQLite export support (requires `sqlite` feature)
33#[cfg(feature = "sqlite")]
34#[path = "sqlite.rs"]
35pub mod sqlite;
36
37// Public API re-exports
38pub use client::LastFmClient;
39pub use config::{Config, ConfigBuilder, RateLimit};
40pub use error::{LastFmError, Result};
41pub use types::{Period, TrackLimit, TrackList};
42
43// Re-export extension traits
44pub use api::{Analyze, FetchAndSave, FetchAndUpdate, LimitBuilder};
45
46/// Convenience re-exports for the most common traits and types.
47///
48/// Import with `use lastfm_client::prelude::*;` to bring all extension traits
49/// into scope without listing them individually.
50///
51/// # Example
52/// ```no_run
53/// use lastfm_client::{LastFmClient, prelude::*};
54///
55/// # async fn example(client: LastFmClient) -> Result<(), Box<dyn std::error::Error>> {
56/// let tracks = client.recent_tracks("username").limit(100).fetch().await?;
57/// # Ok(())
58/// # }
59/// ```
60pub mod prelude {
61    pub use crate::api::{Analyze, FetchAndSave, FetchAndUpdate, LimitBuilder};
62}
63
64// Re-export API clients
65pub use api::{
66    FriendsRequestBuilder, LovedTracksRequestBuilder, PersonalTagsRequestBuilder, ProgressCallback,
67    RecentTracksRequestBuilder, TopAlbumsRequestBuilder, TopArtistsRequestBuilder,
68    TopTagsRequestBuilder, TopTracksRequestBuilder, UserInfoRequestBuilder,
69    WeeklyAlbumChartRequestBuilder, WeeklyArtistChartRequestBuilder, WeeklyChartListRequestBuilder,
70    WeeklyTrackChartRequestBuilder,
71};
72pub use types::{
73    FriendProfile, FriendsPage, PersonalTaggedAlbum, PersonalTaggedAlbumsPage,
74    PersonalTaggedArtist, PersonalTaggedArtistsPage, PersonalTaggedTrack, PersonalTaggedTracksPage,
75    UserInfo, UserTopTag, WeeklyAlbum, WeeklyArtist, WeeklyChartRange, WeeklyTrack,
76};
77
78// Re-export SQLite traits when feature is enabled
79#[cfg(feature = "sqlite")]
80pub use sqlite::{SqliteExportable, SqliteLoadable};
81
82// Re-export commonly used types
83pub use types::{
84    LovedTrack, RecentTrack, RecentTrackExtended, ScoredAlbum, ScoredArtist, ScoredTrack, TopTrack,
85    UserLovedTracks, UserRecentTracks, UserRecentTracksExtended, UserTopAlbums, UserTopArtists,
86    UserTopTracks,
87};