//! Stub Shodan mailbox driver capsule.

use kernel::{AppId, AppSlice, Callback, Driver, Grant, ReturnCode, Shared};

#[derive(Default)]
pub struct AppData {
    pub buffer: Option<AppSlice<Shared, u8>>,
}

pub struct MailboxCapsule {
    pub app_data_grant: Grant<AppData>,
}

impl Driver for MailboxCapsule {
    fn subscribe(&self, _: usize, _: Option<Callback>, _: AppId) -> ReturnCode {
        ReturnCode::EINVAL
    }

    fn command(&self, _minor_num: usize, _r2: usize, _r3: usize, _app_id: AppId) -> ReturnCode {
        return ReturnCode::EINVAL;
    }

    fn allow(&self, app_id: AppId, _: usize, slice: Option<AppSlice<Shared, u8>>) -> ReturnCode {
        let _ = self.app_data_grant.enter(app_id, |app_data, _| {
            app_data.buffer = slice;
        });
        return ReturnCode::SUCCESS;
    }
}
