nativeshell 0.1.16

NativeShell Rust package
Documentation
use crate::shell::BinaryMessengerReply;

use super::{
    error::PlatformResult,
    flutter::{self, BinaryMessengerExt},
};

pub struct PlatformBinaryMessenger {
    messenger: flutter::BinaryMessenger,
}

#[allow(unused_variables)]
impl PlatformBinaryMessenger {
    pub fn new(messenger: flutter::BinaryMessenger) -> Self {
        Self { messenger }
    }

    pub fn register_channel_handler<F>(&self, channel: &str, callback: F)
    where
        F: Fn(&[u8], BinaryMessengerReply) + 'static,
    {
        self.messenger.set_message_handler_on_channel(
            channel,
            move |bytes, channel, messenger, response| {
                let reply = BinaryMessengerReply::new(move |data| {
                    messenger.send_response(response, data.into());
                });
                callback(&bytes, reply);
            },
        );
    }

    pub fn unregister_channel_handler(&self, channel: &str) {
        self.messenger.remove_message_handler_on_channel(channel);
    }

    pub fn send_message<F>(&self, channel: &str, message: &[u8], reply: F) -> PlatformResult<()>
    where
        F: FnOnce(&[u8]) + 'static,
    {
        self.messenger
            .send_message(channel, message.into(), move |data| {
                reply(&data);
            });
        Ok(())
    }

    pub fn post_message(&self, channel: &str, message: &[u8]) -> PlatformResult<()> {
        self.messenger.post_message(channel, message.into());
        Ok(())
    }
}