//!

use {
    super::message::Message,
    crossbeam_queue::{ArrayQueue, SegQueue},
};

enum BufferTypes {
    Unbound(SegQueue<Message>),
    Bound(ArrayQueue<Message>),
}
/// Interproccess buffer
pub struct IpcBuffer {
    protocol: Protocol,
    buffer:   BufferTypes,
}

impl IpcBuffer {
    /// Validate a message to match the `IPC.protocol`
    pub fn validate_messages(&mut self) -> Result<(), IpcError> {
        Ok(())
    }
}
/// Interprocess Communication Errors
pub enum IpcError {
    /// An invalid message error returned to the sender
    InvalidMessage,
}

/// TODO: define this, possibly as the binary form of the IDL
/// DEPEND: This depends on an IDL
pub struct Protocol {
    // TODO: add in settings
    // like `invalid_message_handler` with some options similar to
    //          `Deny` Drops the message
    //          `Allow` Allows invalid messages (This disables validators IPC side and relies on programs to handle invalid messages)
    //          `CustomFunct` a callback
    // and `report_invalid_messages_to_sender`
    //          `True`
    //          `False`
    // settings: PSettings,
}