#![no_std]

use futures::future;
use libtock::buttons::ButtonState;
use libtock::result::TockResult;

#[libtock::main]
async fn main() -> TockResult<()> {
    let mut drivers = libtock::retrieve_drivers()?;

    let buttons_driver = drivers.buttons.init_driver()?;
    let leds_driver = drivers.leds.init_driver()?;

    let mut callback = |button_num, state| {
        if let (ButtonState::Pressed, Ok(led)) = (state, leds_driver.get(button_num)) {
            led.toggle().ok().unwrap();
        }
    };

    let _subscription = buttons_driver.subscribe(&mut callback)?;
    for button in buttons_driver.buttons() {
        button.enable_interrupt()?;
    }

    future::pending().await
}
