use crate::definitions::tst as definitions_tst;
use crate::{delegation, uuid, Error, Result};
use definitions_tst::NodeTrait;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Clone)]
pub enum TaskContainer
{
Tst(definitions_tst::Node),
}
#[derive(Serialize, Deserialize, Clone)]
pub struct Task
{
container: TaskContainer,
}
impl Task
{
pub fn from_tst(node: definitions_tst::Node) -> Task
{
Task {
container: TaskContainer::Tst(node),
}
}
pub fn get_container(&self) -> &TaskContainer
{
&self.container
}
}
impl delegation::Task for Task
{
fn from_description(task_type: &String, description: &String) -> Result<Self>
{
match task_type.as_str()
{
crate::consts::TST => Ok(Task::from_tst(
definitions_tst::Node::from_json_string(&description).unwrap(),
)),
unknown_task_type => Err(Error::UnknownTaskType(unknown_task_type.to_string())),
}
}
fn task_id(&self) -> uuid::Uuid
{
match &self.container
{
TaskContainer::Tst(tst) => tst.common_params_ref().node_uuid,
}
}
fn task_type(&self) -> &str
{
match self.container
{
TaskContainer::Tst(_) => crate::consts::TST,
}
}
fn to_description(&self) -> String
{
match &self.container
{
TaskContainer::Tst(task) => task.to_json_string().unwrap(),
}
}
}