cog_task/action/core/
fixation.rs

1use crate::action::image::Image;
2use crate::action::{Action, StatefulAction};
3use crate::comm::QWriter;
4use crate::resource::{Color, IoManager, ResourceManager};
5use crate::server::{AsyncSignal, Config, SyncSignal};
6use eyre::Result;
7use serde::{Deserialize, Serialize};
8use std::path::PathBuf;
9
10#[derive(Debug, Deserialize, Serialize)]
11#[serde(deny_unknown_fields)]
12pub struct Fixation {
13    #[serde(default)]
14    width: Option<f32>,
15    #[serde(default)]
16    background: Color,
17}
18
19impl Action for Fixation {
20    fn stateful(
21        &self,
22        io: &IoManager,
23        res: &ResourceManager,
24        config: &Config,
25        sync_writer: &QWriter<SyncSignal>,
26        async_writer: &QWriter<AsyncSignal>,
27    ) -> Result<Box<dyn StatefulAction>> {
28        Image::from(self).stateful(io, res, config, sync_writer, async_writer)
29    }
30}
31
32impl From<&Fixation> for Image {
33    fn from(fixation: &Fixation) -> Self {
34        Self::new(
35            PathBuf::from("fixation.svg"),
36            fixation.width,
37            fixation.background,
38        )
39    }
40}