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