mpdclient 0.2.0

Rust interface to MPD using libmpdclient
Documentation
use mpdclient::{Connection, connection::idle::IdleReturn};

use crate::common::setup_mpd;

mod common;

// TODO: new setup
#[tokio::test(flavor = "multi_thread")]
#[ignore = "new setup"]
async fn idle() -> eyre::Result<()> {
    let th = tokio::spawn(async move {
        let connection = Connection::new().unwrap();
        let idle = connection.idle().idle().unwrap();
        assert_eq!(idle, vec![IdleReturn::Mixer]);
    });
    std::thread::sleep(std::time::Duration::from_millis(10));
    let connection2 = Connection::new().unwrap();
    connection2.mixer().set_volume(100).unwrap();
    th.await?;
    Ok(())
}

// TODO: new setup
#[tokio::test(flavor = "multi_thread")]
#[ignore = "new setup"]
async fn idle_mask() -> eyre::Result<()> {
    let th = tokio::spawn(async move {
        let connection = Connection::new().unwrap();
        let idle = connection.idle().idle_mask(&[IdleReturn::Player]).unwrap();
        assert_eq!(idle, vec![IdleReturn::Player]);
    });
    std::thread::sleep(std::time::Duration::from_millis(10));
    let connection2 = Connection::new()?;
    connection2.mixer().set_volume(100)?;
    connection2.player().play()?;
    connection2.player().pause(true)?;
    th.await?;
    Ok(())
}

#[test]
fn idle_set() -> eyre::Result<()> {
    setup_mpd(
        |_| Ok(()),
        |conn| {
            let conn2 = Connection::connect(conn.settings()?.host().as_deref(), 0, 0)?;
            conn.idle().set()?;
            std::thread::sleep(std::time::Duration::from_millis(10));
            conn2.mixer().set_volume(100)?;
            assert_eq!(conn.idle().unset()?, vec![IdleReturn::Mixer]);
            Ok(())
        },
    )
}