cog_task/server/
info.rs

1use crate::assets::VERSION;
2use crate::server::{Block, Server, Task};
3use crate::util::Hash;
4use serde::{Deserialize, Serialize};
5use std::path::PathBuf;
6
7#[derive(Debug, Default, Deserialize, Serialize)]
8pub struct Info {
9    subject: String,
10    output: PathBuf,
11    server: ServerInfo,
12    task: TaskInfo,
13    block: BlockInfo,
14}
15
16#[derive(Debug, Default, Deserialize, Serialize)]
17pub struct TaskInfo {
18    name: String,
19    version: String,
20    hash: String,
21}
22
23#[derive(Debug, Default, Deserialize, Serialize)]
24pub struct BlockInfo {
25    name: String,
26    hash: String,
27}
28
29#[derive(Debug, Default, Deserialize, Serialize)]
30pub struct ServerInfo {
31    version: String,
32    hash: String,
33}
34
35impl Info {
36    pub fn new(server: &Server, task: &Task, block: &Block) -> Self {
37        Self {
38            subject: server.subject().to_owned(),
39            output: server.env().output().join(server.subject()),
40            server: ServerInfo {
41                version: VERSION.to_owned(),
42                hash: server.hash(),
43            },
44            task: TaskInfo {
45                name: task.name().to_owned(),
46                version: task.version().to_owned(),
47                hash: task.hash(),
48            },
49            block: BlockInfo {
50                name: block.label().to_owned(),
51                hash: block.hash(),
52            },
53        }
54    }
55
56    #[inline(always)]
57    pub fn subject(&self) -> &String {
58        &self.subject
59    }
60
61    #[inline(always)]
62    pub fn block(&self) -> &String {
63        &self.block.name
64    }
65
66    #[inline(always)]
67    pub fn output(&self) -> &PathBuf {
68        &self.output
69    }
70}