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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
use crate::model::{CalibrateThermometer, ResetUptime, SetPower, Subsystem};
use juniper::FieldResult;
use kubos_service;
type Context = kubos_service::Context<Subsystem>;
graphql_object!(Subsystem: Context as "Subsystem" |&self| {
description: "Service subsystem"
field power() -> FieldResult<bool> as "Power state of subsystem" {
Ok(self.power()?)
}
field uptime() -> FieldResult<i32> as "Uptime of subsystem" {
Ok(self.uptime()?)
}
field temperature() -> FieldResult<i32> as "Temperature of subsystem" {
Ok(self.temperature()?)
}
});
graphql_object!(CalibrateThermometer: Context as "CalibrateThermometer" |&self| {
description: "Calibrating thermometer return"
field temperature() -> FieldResult<i32> as "Temp of subsystem" {
Ok(self.temperature)
}
});
graphql_object!(ResetUptime: Context as "ResetUptime" |&self| {
description: "Reset uptime return"
field uptime() -> FieldResult<i32> as "Uptime of subsystem" {
Ok(self.uptime)
}
});
graphql_object!(SetPower: Context as "SetPower" |&self| {
description: "Enable Power Return"
field power() -> FieldResult<bool> as "Power state of subsystem" {
Ok(self.power)
}
});
pub struct QueryRoot;
graphql_object!(QueryRoot : Context as "Query" |&self| {
field subsystem(&executor) -> FieldResult<&Subsystem>
as "Subsystem query"
{
let num_queries = executor.context().get("num_queries");
println!("Num queries {}", num_queries);
let num = num_queries.parse::<i32>().unwrap_or(0) + 1;
executor.context().set("num_queries", &format!("{}", num));
Ok(executor.context().subsystem())
}
});
pub struct MutationRoot;
graphql_object!(MutationRoot : Context as "Mutation" |&self| {
field set_power(&executor, power : bool) -> FieldResult<SetPower>
as "Set subsystem power state"
{
Ok(executor.context().subsystem().set_power(power)?)
}
field reset_uptime(&executor) -> FieldResult<ResetUptime>
as "Resets uptime counter of subsystem"
{
Ok(executor.context().subsystem().reset_uptime()?)
}
field calibrate_thermometer(&executor) -> FieldResult<CalibrateThermometer>
as "Calibrate thermometer"
{
Ok(executor.context().subsystem().calibrate_thermometer()?)
}
});