am-api 1.1.0

A library for interfacing with the Apple Music API
Documentation
use am_api::error::Error;
use am_api::primitive::AudioVariant;
use am_api::resource::catalog::song::{Song, SongAttributesExtension};

use am_api::utils::year_or_date::YearOrDate;
use time::{Date, Month};

mod common;

#[tokio::test]
async fn fetch_song() -> Result<(), Error> {
    let client = common::create_client();

    let song = Song::get()
        .extend(SongAttributesExtension::ArtistUrl)
        .extend(SongAttributesExtension::AudioVariants)
        .one(&client, "1416240728")
        .await?
        .expect("song fetch returned none");

    let attributes = song
        .attributes
        .expect("song fetch returned a song without attributes");

    assert_eq!(
        attributes.release_date,
        Some(YearOrDate::Date(
            Date::from_calendar_date(2018, Month::October, 12).unwrap()
        ))
    );
    assert_eq!(attributes.name, "So Strange (feat. Cuco)");
    assert_eq!(
        attributes.artist_url,
        Some(String::from(
            "https://music.apple.com/us/artist/polyphia/640294344"
        ))
    );

    assert!(attributes.audio_variants.is_some());
    assert!(attributes
        .audio_variants
        .as_ref()
        .unwrap()
        .contains(&AudioVariant::LossyStereo));
    assert!(attributes
        .audio_variants
        .as_ref()
        .unwrap()
        .contains(&AudioVariant::Lossless));

    Ok(())
}