use cu29::prelude::*;
pub struct IntegerSrcTask {
pub value: i32,
}
impl Freezable for IntegerSrcTask {}
impl CuSrcTask for IntegerSrcTask {
type Output<'m> = output_msg!(i32);
fn new(_config: Option<&ComponentConfig>) -> CuResult<Self> {
Ok(Self { value: 42 })
}
fn process(&mut self, _clock: &RobotClock, output: &mut Self::Output<'_>) -> CuResult<()> {
self.value += 1;
output.set_payload(self.value);
Ok(())
}
}
pub struct FloatSrcTask {
pub value: f32,
}
impl Freezable for FloatSrcTask {}
impl CuSrcTask for FloatSrcTask {
type Output<'m> = output_msg!(f32);
fn new(_config: Option<&ComponentConfig>) -> CuResult<Self> {
Ok(Self { value: 24.0 })
}
fn process(&mut self, _clock: &RobotClock, output: &mut Self::Output<'_>) -> CuResult<()> {
self.value += 1.0;
output.set_payload(self.value);
Ok(())
}
}
pub struct MergingSinkTask {}
impl Freezable for MergingSinkTask {}
impl CuSinkTask for MergingSinkTask {
type Input<'m> = input_msg!('m, i32, f32);
fn new(_config: Option<&ComponentConfig>) -> CuResult<Self> {
Ok(Self {})
}
fn process(&mut self, _clock: &RobotClock, input: &Self::Input<'_>) -> CuResult<()> {
let (i, f) = input;
println!(
"SinkTask1 received: {}, {}",
i.payload().unwrap(),
f.payload().unwrap()
);
Ok(())
}
}
pub struct MergerTask {}
impl Freezable for MergerTask {}
impl CuTask for MergerTask {
type Input<'m> = input_msg!('m, i32, f32);
type Output<'m> = output_msg!((i32, f32));
fn new(_config: Option<&ComponentConfig>) -> CuResult<Self> {
Ok(Self {})
}
fn process(
&mut self,
_clock: &RobotClock,
input: &Self::Input<'_>,
output: &mut Self::Output<'_>,
) -> CuResult<()> {
let (i, f): (&CuMsg<i32>, &CuMsg<f32>) = *input;
let (i, f) = (i.payload().unwrap(), f.payload().unwrap());
output.set_payload((*i, *f)); Ok(())
}
}
pub struct MergedSinkTask {}
impl Freezable for MergedSinkTask {}
impl CuSinkTask for MergedSinkTask {
type Input<'m> = input_msg!((i32, f32));
fn new(_config: Option<&ComponentConfig>) -> CuResult<Self> {
Ok(Self {})
}
fn process(&mut self, _clock: &RobotClock, input: &Self::Input<'_>) -> CuResult<()> {
println!("SinkTask2 received: {:?}", input.payload().unwrap());
Ok(())
}
}