pub mod bound_value;
pub mod in_;
pub mod in_out;
pub mod out_;
mod sequence_number;
use crate::{
PortCommons,
any_port_value::AnyPortValue,
bind::bound_value::{BoundValuePtr, BoundValueReadGuard, BoundValueWriteGuard},
error::Error,
};
pub trait BindCommons: PortCommons {
fn use_from_bound(&mut self, bound: &dyn BindCommons) -> Result<(), Error>;
fn sequence_number(&self) -> u32;
fn value(&self) -> BoundValuePtr;
}
pub trait BindIn<T: AnyPortValue>: BindCommons {
fn get(&self) -> Result<Option<T>, Error>
where
T: Clone;
fn read(&self) -> Result<BoundValueReadGuard<T>, Error>;
fn try_read(&self) -> Result<BoundValueReadGuard<T>, Error>;
}
pub trait BindInOut<T: AnyPortValue>: BindIn<T> + BindOut<T> {
fn replace(&mut self, value: T) -> Result<Option<T>, Error>;
fn take(&mut self) -> Result<Option<T>, Error>;
}
pub trait BindOut<T: AnyPortValue>: BindCommons {
fn set(&mut self, value: T) -> Result<(), Error>;
fn write(&mut self) -> Result<BoundValueWriteGuard<T>, Error>;
fn try_write(&mut self) -> Result<BoundValueWriteGuard<T>, Error>;
}