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}