cog_task/action/core/
fixation.rs1use 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}