kagura 0.14.5

component-oriented GUI framework
Documentation
use crate::FutureMsg;
use std::collections::VecDeque;

pub mod basic_component_state;
pub mod msg;

pub use basic_component_state::BasicComponentState;
pub use basic_component_state::BasicNodeMsg;
pub use basic_component_state::SubHandler;
pub use msg::Msg;

pub struct NodeCmd {
    msgs: VecDeque<Msg>,
    scedules: VecDeque<FutureMsg>,
}

pub trait UpdateNode {
    fn update(&mut self, msg: Msg) -> NodeCmd;
}

pub trait RenderNode<T> {
    fn render(&mut self) -> T;
}

impl NodeCmd {
    pub fn new(scedules: VecDeque<FutureMsg>) -> Self {
        Self {
            scedules,
            msgs: VecDeque::new(),
        }
    }

    pub fn append(&mut self, other: &mut Self) {
        self.append_msgs(&mut other.msgs);
        self.append_scedules(&mut other.scedules);
    }

    pub fn into_scedules(self) -> VecDeque<FutureMsg> {
        self.scedules
    }

    pub fn append_scedules(&mut self, scedules: &mut VecDeque<FutureMsg>) {
        self.scedules.append(scedules);
    }

    pub fn into_msgs(self) -> VecDeque<Msg> {
        self.msgs
    }

    pub fn msgs(&self) -> &VecDeque<Msg> {
        &self.msgs
    }

    pub fn msgs_mut(&mut self) -> &mut VecDeque<Msg> {
        &mut self.msgs
    }

    pub fn push_msg(&mut self, msg: Msg) {
        self.msgs.push_back(msg);
    }

    pub fn append_msgs(&mut self, msgs: &mut VecDeque<Msg>) {
        self.msgs.append(msgs);
    }
}

impl std::ops::Deref for NodeCmd {
    type Target = VecDeque<FutureMsg>;
    fn deref(&self) -> &Self::Target {
        &self.scedules
    }
}

impl std::ops::DerefMut for NodeCmd {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.scedules
    }
}