1
0
Fork 0
forked from AbleOS/ableos
ableOS_v1Change/ableos/src/channels.rs
2022-07-28 03:39:20 -05:00

52 lines
1 KiB
Rust

use core::fmt::Display;
use alloc::collections::VecDeque;
use kernel::proccess::PID;
use crate::{arch::generate_process_pass, handle::Handle};
#[derive(Debug)]
pub struct ChannelPermission {
pub owner: bool,
pub producer: bool,
pub consumer: bool,
/// Whether or not the process can be destructive about reading
pub distructive_consumer: bool,
}
#[derive(Debug)]
pub struct Channel {
inner: VecDeque<u8>,
// TODO(able): change this to a hashmap i think
permission_list: Vec<(PID, ChannelPermission)>,
}
impl Channel {
pub fn new() -> Self {
let deq = VecDeque::from([]);
Self {
inner: deq,
permission_list: vec![],
}
}
pub fn read(&mut self) -> Result<u8, ChannelError> {
if let Some(abc) = self.inner.pop_front() {
return Ok(abc);
}
return Err(ChannelError::EmptyBuffer);
}
pub fn send(&mut self, data: u8) {
self.inner.push_back(data);
}
}
pub enum ChannelError {
EmptyBuffer,
InvalidPermissions,
}