use extism_pdk::*;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
struct ArtworkGetArtistUrlRequest {
id: String,
size: i32,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
struct ArtworkGetArtistUrlResponse {
#[serde(default)]
url: String,
#[serde(default)]
error: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
struct ArtworkGetAlbumUrlRequest {
id: String,
size: i32,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
struct ArtworkGetAlbumUrlResponse {
#[serde(default)]
url: String,
#[serde(default)]
error: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
struct ArtworkGetTrackUrlRequest {
id: String,
size: i32,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
struct ArtworkGetTrackUrlResponse {
#[serde(default)]
url: String,
#[serde(default)]
error: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
struct ArtworkGetPlaylistUrlRequest {
id: String,
size: i32,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
struct ArtworkGetPlaylistUrlResponse {
#[serde(default)]
url: String,
#[serde(default)]
error: Option<String>,
}
#[host_fn]
extern "ExtismHost" {
fn artwork_getartisturl(input: Json<ArtworkGetArtistUrlRequest>) -> Json<ArtworkGetArtistUrlResponse>;
fn artwork_getalbumurl(input: Json<ArtworkGetAlbumUrlRequest>) -> Json<ArtworkGetAlbumUrlResponse>;
fn artwork_gettrackurl(input: Json<ArtworkGetTrackUrlRequest>) -> Json<ArtworkGetTrackUrlResponse>;
fn artwork_getplaylisturl(input: Json<ArtworkGetPlaylistUrlRequest>) -> Json<ArtworkGetPlaylistUrlResponse>;
}
pub fn get_artist_url(id: &str, size: i32) -> Result<String, Error> {
let response = unsafe {
artwork_getartisturl(Json(ArtworkGetArtistUrlRequest {
id: id.to_owned(),
size: size,
}))?
};
if let Some(err) = response.0.error {
return Err(Error::msg(err));
}
Ok(response.0.url)
}
pub fn get_album_url(id: &str, size: i32) -> Result<String, Error> {
let response = unsafe {
artwork_getalbumurl(Json(ArtworkGetAlbumUrlRequest {
id: id.to_owned(),
size: size,
}))?
};
if let Some(err) = response.0.error {
return Err(Error::msg(err));
}
Ok(response.0.url)
}
pub fn get_track_url(id: &str, size: i32) -> Result<String, Error> {
let response = unsafe {
artwork_gettrackurl(Json(ArtworkGetTrackUrlRequest {
id: id.to_owned(),
size: size,
}))?
};
if let Some(err) = response.0.error {
return Err(Error::msg(err));
}
Ok(response.0.url)
}
pub fn get_playlist_url(id: &str, size: i32) -> Result<String, Error> {
let response = unsafe {
artwork_getplaylisturl(Json(ArtworkGetPlaylistUrlRequest {
id: id.to_owned(),
size: size,
}))?
};
if let Some(err) = response.0.error {
return Err(Error::msg(err));
}
Ok(response.0.url)
}