lastfm_rust/models/
mod.rs

1mod album_get_info_response;
2mod album_get_tags;
3mod album_get_top_tags;
4mod auth_get_token;
5
6use std::fmt;
7
8pub use album_get_info_response::AlbumGetInfoResponse;
9pub use album_get_tags::AlbumGetTagsResponse;
10pub use auth_get_token::AuthGetTokenResponse;
11pub use album_get_top_tags::AlbumGetTopTagsResponse;
12use serde_json::{to_string_pretty, Value};
13
14use crate::ApiError;
15use serde::{Deserialize, Serialize};
16
17#[derive(Debug, Clone, Serialize, Deserialize)]
18pub enum APIResponse<T> {
19    Success(T),
20    Error(ApiError),
21}
22
23impl fmt::Display for APIResponse<Value> {
24    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
25        match self {
26            APIResponse::Success(value) => {
27                let pretty_value =
28                    to_string_pretty(value).unwrap_or_else(|_| "Invalid JSON".to_string());
29                write!(f, "{}", pretty_value)
30            }
31            APIResponse::Error(api_error) => {
32                write!(f, "Error: {} - {}", api_error.error, api_error.message)
33            }
34        }
35    }
36}