tangled
alpha
login
or
join now
altagos.dev
/
space
0
fork
atom
A SpaceTraders Agent
0
fork
atom
overview
issues
pulls
pipelines
implement all models required to register a new agent
altagos.dev
3 months ago
7cd4bfb6
d1ae091c
verified
This commit was signed with the committer's
known signature
.
altagos.dev
SSH Key Fingerprint:
SHA256:UbTjEcCZlc6GzQWLCuDK3D//HESWD2xFPkzue9XMras=
+462
-8
6 changed files
expand all
collapse all
unified
split
build.zig
src
st
models
agents.zig
contracts.zig
inventory.zig
ships.zig
models.zig
+2
build.zig
···
29
29
.{ .name = "known-folders", .module = known_folders },
30
30
// Modules
31
31
.{ .name = "st", .module = st },
32
32
+
.{ .name = "meta", .module = meta },
32
33
},
33
34
});
34
35
···
37
38
.target = target,
38
39
.optimize = optimize,
39
40
.imports = &.{
41
41
+
.{ .name = "pretty", .module = pretty },
40
42
.{ .name = "known-folders", .module = known_folders },
41
43
// Modules
42
44
.{ .name = "st", .module = st },
+17
src/st/models.zig
···
1
1
+
const std = @import("std");
2
2
+
1
3
pub const accounts = @import("models/accounts.zig");
2
4
pub const agents = @import("models/agents.zig");
5
5
+
pub const contracts = @import("models/contracts.zig");
3
6
pub const factions = @import("models/factions.zig");
7
7
+
pub const ships = @import("models/ships.zig");
8
8
+
9
9
+
pub const inventory = @import("models/inventory.zig");
4
10
5
11
pub const Info = @import("models/Info.zig");
6
12
···
23
29
/// How many entries to return per page
24
30
/// min: 1, max: 20
25
31
limit: u64 = 20,
32
32
+
33
33
+
pub fn format(this: @This(), writer: *std.Io.Writer) std.Io.Writer.Error!void {
34
34
+
try writer.print("?page={}&limit={}", .{ this.page, this.limit });
35
35
+
}
26
36
};
27
37
28
38
pub const Error = struct {
···
43
53
expectedSubject: ?[]const u8 = null,
44
54
receivedSubject: ?[]const u8 = null,
45
55
};
56
56
+
};
57
57
+
58
58
+
pub const Cooldown = struct {
59
59
+
shipSymbol: []const u8,
60
60
+
totalSeconds: u64,
61
61
+
remainingSeconds: u64,
62
62
+
expiration: ?[]const u8 = null,
46
63
};
47
64
48
65
/// List of Possible Error Codes
+30
-8
src/st/models/agents.zig
···
3
3
const Response = st.http.Response;
4
4
const Wrapper = st.models.Wrapper;
5
5
const Query = st.models.Query;
6
6
+
7
7
+
const Contract = st.models.contracts.Contract;
8
8
+
const Faction = st.models.factions.Faction;
6
9
const FactionSymbol = st.models.factions.Symbol;
10
10
+
const Ship = st.models.ships.Ship;
7
11
8
12
pub const Agent = struct {
9
13
symbol: []const u8,
···
13
17
shipCount: u64,
14
18
};
15
19
20
20
+
pub const Register = struct {
21
21
+
token: []const u8,
22
22
+
agent: Agent,
23
23
+
faction: Faction,
24
24
+
contract: Contract,
25
25
+
ships: []Ship,
26
26
+
};
27
27
+
16
28
pub fn list(client: *Client, opts: Query) !Response([]Agent) {
17
17
-
return client.request(
29
29
+
return client.get(
18
30
Wrapper([]Agent),
19
19
-
"/agents?page={}&limit={}",
20
20
-
.{ opts.page, opts.limit },
21
21
-
.{ .auth = .agent },
31
31
+
"/agents{f}",
32
32
+
.{opts},
33
33
+
.agent,
22
34
);
23
35
}
24
36
25
37
pub fn get(client: *Client, symbol: []const u8) !Response(Agent) {
26
26
-
return client.request(
38
38
+
return client.get(
27
39
Wrapper(Agent),
28
40
"/agents/{s}",
29
41
.{symbol},
30
30
-
.{ .auth = .agent },
42
42
+
.agent,
31
43
);
32
44
}
33
45
34
46
pub fn own(client: *Client) !Response(Agent) {
35
35
-
return client.request(
47
47
+
return client.get(
36
48
Wrapper(Agent),
37
49
"/my/agent",
38
50
.{},
39
39
-
.{ .auth = .agent },
51
51
+
.agent,
52
52
+
);
53
53
+
}
54
54
+
55
55
+
pub fn register(client: *Client, symbol: []const u8, faction: FactionSymbol, email: ?[]const u8) !Response(Register) {
56
56
+
return client.post(
57
57
+
Wrapper(Register),
58
58
+
"/register",
59
59
+
.{},
60
60
+
.{ .symbol = symbol, .faction = faction, .email = email },
61
61
+
.account,
40
62
);
41
63
}
+33
src/st/models/contracts.zig
···
1
1
+
pub const Contract = struct {
2
2
+
id: u64,
3
3
+
factionSymbol: []const u8,
4
4
+
type: Type,
5
5
+
terms: Terms,
6
6
+
accepted: bool,
7
7
+
fullfilled: bool,
8
8
+
deadlineToAccept: []const u8,
9
9
+
};
10
10
+
11
11
+
pub const Type = enum {
12
12
+
PROCUREMENT,
13
13
+
TRANSPORT,
14
14
+
SHUTTLE,
15
15
+
};
16
16
+
17
17
+
pub const Terms = struct {
18
18
+
deadline: []const u8,
19
19
+
payment: Payment,
20
20
+
deliver: []Deliver,
21
21
+
};
22
22
+
23
23
+
pub const Payment = struct {
24
24
+
onAccepted: u64,
25
25
+
onFulfilled: u64,
26
26
+
};
27
27
+
28
28
+
pub const Deliver = struct {
29
29
+
tradeSymbol: []const u8,
30
30
+
destinationSymbol: []const u8,
31
31
+
unitsRequired: u64,
32
32
+
unitsFulfilled: u64,
33
33
+
};
+201
src/st/models/inventory.zig
···
1
1
+
const CombinedEnum = @import("meta").CombinedEnum;
2
2
+
3
3
+
pub const Cargo = struct {
4
4
+
capacity: u64,
5
5
+
units: u64,
6
6
+
inventory: []Item,
7
7
+
};
8
8
+
9
9
+
pub const ItemSymbol = struct {
10
10
+
pub const All = CombinedEnum(ItemSymbol);
11
11
+
12
12
+
pub const Other = enum {
13
13
+
// PRECIOUS_STONES,
14
14
+
// QUARTZ_SAND,
15
15
+
// SILICON_CRYSTALS,
16
16
+
// AMMONIA_ICE,
17
17
+
LIQUID_HYDROGEN,
18
18
+
LIQUID_NITROGEN,
19
19
+
// ICE_WATER,
20
20
+
EXOTIC_MATTER,
21
21
+
ADVANCED_CIRCUITRY,
22
22
+
GRAVITON_EMITTERS,
23
23
+
IRON,
24
24
+
// IRON_ORE,
25
25
+
COPPER,
26
26
+
// COPPER_ORE,
27
27
+
ALUMINUM,
28
28
+
// ALUMINUM_ORE,
29
29
+
SILVER,
30
30
+
// SILVER_ORE,
31
31
+
GOLD,
32
32
+
// GOLD_ORE,
33
33
+
PLATINUM,
34
34
+
// PLATINUM_ORE,
35
35
+
DIAMONDS,
36
36
+
URANITE,
37
37
+
// URANITE_ORE,
38
38
+
MERITIUM,
39
39
+
// MERITIUM_ORE,
40
40
+
HYDROCARBON,
41
41
+
ANTIMATTER,
42
42
+
FAB_MATS,
43
43
+
FERTILIZERS,
44
44
+
FABRICS,
45
45
+
FOOD,
46
46
+
JEWELRY,
47
47
+
MACHINERY,
48
48
+
FIREARMS,
49
49
+
ASSAULT_RIFLES,
50
50
+
MILITARY_EQUIPMENT,
51
51
+
EXPLOSIVES,
52
52
+
LAB_INSTRUMENTS,
53
53
+
AMMUNITION,
54
54
+
ELECTRONICS,
55
55
+
SHIP_PLATING,
56
56
+
SHIP_PARTS,
57
57
+
EQUIPMENT,
58
58
+
FUEL,
59
59
+
MEDICINE,
60
60
+
DRUGS,
61
61
+
CLOTHING,
62
62
+
MICROPROCESSORS,
63
63
+
PLASTICS,
64
64
+
POLYNUCLEOTIDES,
65
65
+
BIOCOMPOSITES,
66
66
+
QUANTUM_STABILIZERS,
67
67
+
NANOBOTS,
68
68
+
AI_MAINFRAMES,
69
69
+
QUANTUM_DRIVES,
70
70
+
ROBOTIC_DRONES,
71
71
+
CYBER_IMPLANTS,
72
72
+
GENE_THERAPEUTICS,
73
73
+
NEURAL_CHIPS,
74
74
+
MOOD_REGULATORS,
75
75
+
VIRAL_AGENTS,
76
76
+
MICRO_FUSION_GENERATORS,
77
77
+
SUPERGRAINS,
78
78
+
LASER_RIFLES,
79
79
+
HOLOGRAPHICS,
80
80
+
SHIP_SALVAGE,
81
81
+
RELIC_TECH,
82
82
+
NOVEL_LIFEFORMS,
83
83
+
BOTANICAL_SPECIMENS,
84
84
+
CULTURAL_ARTIFACTS,
85
85
+
};
86
86
+
87
87
+
pub const Deposit = enum {
88
88
+
QUARTZ_SAND,
89
89
+
SILICON_CRYSTALS,
90
90
+
PRECIOUS_STONES,
91
91
+
ICE_WATER,
92
92
+
AMMONIA_ICE,
93
93
+
IRON_ORE,
94
94
+
COPPER_ORE,
95
95
+
SILVER_ORE,
96
96
+
ALUMINUM_ORE,
97
97
+
GOLD_ORE,
98
98
+
PLATINUM_ORE,
99
99
+
DIAMONDS,
100
100
+
URANITE_ORE,
101
101
+
MERITIUM_ORE,
102
102
+
};
103
103
+
104
104
+
pub const Engine = enum {
105
105
+
ENGINE_IMPULSE_DRIVE_I,
106
106
+
ENGINE_ION_DRIVE_I,
107
107
+
ENGINE_ION_DRIVE_II,
108
108
+
ENGINE_HYPER_DRIVE_I,
109
109
+
};
110
110
+
111
111
+
pub const Frame = enum {
112
112
+
FRAME_PROBE,
113
113
+
FRAME_DRONE,
114
114
+
FRAME_INTERCEPTOR,
115
115
+
FRAME_RACER,
116
116
+
FRAME_FIGHTER,
117
117
+
FRAME_FRIGATE,
118
118
+
FRAME_SHUTTLE,
119
119
+
FRAME_EXPLORER,
120
120
+
FRAME_MINER,
121
121
+
FRAME_LIGHT_FREIGHTER,
122
122
+
FRAME_HEAVY_FREIGHTER,
123
123
+
FRAME_TRANSPORT,
124
124
+
FRAME_DESTROYER,
125
125
+
FRAME_CRUISER,
126
126
+
FRAME_CARRIER,
127
127
+
FRAME_BULK_FREIGHTER,
128
128
+
};
129
129
+
130
130
+
pub const Module = enum {
131
131
+
MODULE_MINERAL_PROCESSOR_I,
132
132
+
MODULE_GAS_PROCESSOR_I,
133
133
+
MODULE_CARGO_HOLD_I,
134
134
+
MODULE_CARGO_HOLD_II,
135
135
+
MODULE_CARGO_HOLD_III,
136
136
+
MODULE_CREW_QUARTERS_I,
137
137
+
MODULE_ENVOY_QUARTERS_I,
138
138
+
MODULE_PASSENGER_CABIN_I,
139
139
+
MODULE_MICRO_REFINERY_I,
140
140
+
MODULE_ORE_REFINERY_I,
141
141
+
MODULE_FUEL_REFINERY_I,
142
142
+
MODULE_SCIENCE_LAB_I,
143
143
+
MODULE_JUMP_DRIVE_I,
144
144
+
MODULE_JUMP_DRIVE_II,
145
145
+
MODULE_JUMP_DRIVE_III,
146
146
+
MODULE_WARP_DRIVE_I,
147
147
+
MODULE_WARP_DRIVE_II,
148
148
+
MODULE_WARP_DRIVE_III,
149
149
+
MODULE_SHIELD_GENERATOR_I,
150
150
+
MODULE_SHIELD_GENERATOR_II,
151
151
+
};
152
152
+
153
153
+
pub const Mount = enum {
154
154
+
MOUNT_GAS_SIPHON_I,
155
155
+
MOUNT_GAS_SIPHON_II,
156
156
+
MOUNT_GAS_SIPHON_III,
157
157
+
MOUNT_SURVEYOR_I,
158
158
+
MOUNT_SURVEYOR_II,
159
159
+
MOUNT_SURVEYOR_III,
160
160
+
MOUNT_SENSOR_ARRAY_I,
161
161
+
MOUNT_SENSOR_ARRAY_II,
162
162
+
MOUNT_SENSOR_ARRAY_III,
163
163
+
MOUNT_MINING_LASER_I,
164
164
+
MOUNT_MINING_LASER_II,
165
165
+
MOUNT_MINING_LASER_III,
166
166
+
MOUNT_LASER_CANNON_I,
167
167
+
MOUNT_MISSILE_LAUNCHER_I,
168
168
+
MOUNT_TURRET_I,
169
169
+
};
170
170
+
171
171
+
pub const Reactor = enum {
172
172
+
REACTOR_SOLAR_I,
173
173
+
REACTOR_FUSION_I,
174
174
+
REACTOR_FISSION_I,
175
175
+
REACTOR_CHEMICAL_I,
176
176
+
REACTOR_ANTIMATTER_I,
177
177
+
};
178
178
+
179
179
+
pub const Ship = enum {
180
180
+
SHIP_PROBE,
181
181
+
SHIP_MINING_DRONE,
182
182
+
SHIP_SIPHON_DRONE,
183
183
+
SHIP_INTERCEPTOR,
184
184
+
SHIP_LIGHT_HAULER,
185
185
+
SHIP_COMMAND_FRIGATE,
186
186
+
SHIP_EXPLORER,
187
187
+
SHIP_HEAVY_FREIGHTER,
188
188
+
SHIP_LIGHT_SHUTTLE,
189
189
+
SHIP_ORE_HOUND,
190
190
+
SHIP_REFINING_FREIGHTER,
191
191
+
SHIP_SURVEYOR,
192
192
+
SHIP_BULK_FREIGHTER,
193
193
+
};
194
194
+
};
195
195
+
196
196
+
pub const Item = struct {
197
197
+
symbol: ItemSymbol,
198
198
+
name: []const u8,
199
199
+
description: []const u8,
200
200
+
units: u64,
201
201
+
};
+179
src/st/models/ships.zig
···
1
1
+
const m = @import("../models.zig");
2
2
+
const Cooldown = m.Cooldown;
3
3
+
4
4
+
pub const Ship = struct {
5
5
+
symbol: []const u8,
6
6
+
registration: Registration,
7
7
+
nav: Nav,
8
8
+
crew: Crew,
9
9
+
frame: Frame,
10
10
+
reactor: Reactor,
11
11
+
engine: Engine,
12
12
+
modules: []Module,
13
13
+
mounts: []Mount,
14
14
+
cargo: m.inventory.Cargo,
15
15
+
fuel: Fuel,
16
16
+
cooldown: Cooldown,
17
17
+
};
18
18
+
19
19
+
pub const Registration = struct {
20
20
+
name: []const u8,
21
21
+
factionSymbol: m.factions.Symbol,
22
22
+
role: Role,
23
23
+
};
24
24
+
25
25
+
pub const Role = enum {
26
26
+
FABRICATOR,
27
27
+
HARVESTER,
28
28
+
HAULER,
29
29
+
INTERCEPTOR,
30
30
+
EXCAVATOR,
31
31
+
TRANSPORT,
32
32
+
REPAIR,
33
33
+
SURVEYOR,
34
34
+
COMMAND,
35
35
+
CARRIER,
36
36
+
PATROL,
37
37
+
SATELLITE,
38
38
+
EXPLORER,
39
39
+
REFINERY,
40
40
+
};
41
41
+
42
42
+
pub const Nav = struct {
43
43
+
systemSymbol: []const u8,
44
44
+
waypointSymbol: []const u8,
45
45
+
route: Route,
46
46
+
status: Status,
47
47
+
flightMode: FlightMode,
48
48
+
49
49
+
pub const Route = struct {
50
50
+
destination: Waypoint,
51
51
+
origin: Waypoint,
52
52
+
departureTime: []const u8,
53
53
+
arrival: []const u8,
54
54
+
55
55
+
pub const Waypoint = struct {
56
56
+
symbol: []const u8,
57
57
+
type: Type,
58
58
+
systemSymbol: []const u8,
59
59
+
x: i64,
60
60
+
y: i64,
61
61
+
62
62
+
pub const Type = enum {
63
63
+
PLANET,
64
64
+
GAS_GIANT,
65
65
+
MOON,
66
66
+
ORBITAL_STATION,
67
67
+
JUMP_GATE,
68
68
+
ASTEROID_FIELD,
69
69
+
ASTEROID,
70
70
+
ENGINEERED_ASTEROID,
71
71
+
ASTEROID_BASE,
72
72
+
NEBULA,
73
73
+
DEBRIS_FIELD,
74
74
+
GRAVITY_WELL,
75
75
+
ARTIFICIAL_GRAVITY_WELL,
76
76
+
FUEL_STATION,
77
77
+
};
78
78
+
};
79
79
+
};
80
80
+
81
81
+
pub const Status = enum {
82
82
+
IN_TRANSIT,
83
83
+
IN_ORBIT,
84
84
+
DOCKED,
85
85
+
};
86
86
+
87
87
+
pub const FlightMode = enum {
88
88
+
DRIFT,
89
89
+
STEALTH,
90
90
+
CRUISE,
91
91
+
BURN,
92
92
+
};
93
93
+
};
94
94
+
95
95
+
pub const Crew = struct {
96
96
+
capacity: u64,
97
97
+
current: u64,
98
98
+
morale: u8,
99
99
+
required: u64,
100
100
+
rotation: Rotation,
101
101
+
wages: u64,
102
102
+
103
103
+
pub const Rotation = enum { STRICT, RELAXED };
104
104
+
};
105
105
+
106
106
+
pub const Frame = struct {
107
107
+
symbol: m.inventory.ItemSymbol.Frame,
108
108
+
name: []const u8,
109
109
+
description: []const u8,
110
110
+
111
111
+
condition: f32,
112
112
+
integrity: f32,
113
113
+
moduleSlots: u64,
114
114
+
mountingPoints: u64,
115
115
+
fuelCapacity: u64,
116
116
+
requirements: Requirements,
117
117
+
quality: u64,
118
118
+
};
119
119
+
120
120
+
pub const Reactor = struct {
121
121
+
symbol: m.inventory.ItemSymbol.Reactor,
122
122
+
name: []const u8,
123
123
+
description: []const u8,
124
124
+
125
125
+
condition: f32,
126
126
+
integrity: f32,
127
127
+
powerOutput: u64,
128
128
+
requirements: Requirements,
129
129
+
quality: u64,
130
130
+
};
131
131
+
132
132
+
pub const Engine = struct {
133
133
+
symbol: m.inventory.ItemSymbol.Engine,
134
134
+
name: []const u8,
135
135
+
description: []const u8,
136
136
+
137
137
+
condition: f32,
138
138
+
integrity: f32,
139
139
+
speed: u64,
140
140
+
requirements: Requirements,
141
141
+
quality: u64,
142
142
+
};
143
143
+
144
144
+
pub const Module = struct {
145
145
+
symbol: m.inventory.ItemSymbol.Module,
146
146
+
name: []const u8,
147
147
+
description: []const u8,
148
148
+
149
149
+
capacity: u64 = 0,
150
150
+
range: u64 = 0,
151
151
+
requirements: Requirements,
152
152
+
};
153
153
+
154
154
+
pub const Mount = struct {
155
155
+
symbol: m.inventory.ItemSymbol.Mount,
156
156
+
name: []const u8,
157
157
+
description: []const u8,
158
158
+
159
159
+
strength: u64 = 0,
160
160
+
deposits: []m.inventory.ItemSymbol.Deposit = &.{},
161
161
+
requirements: Requirements,
162
162
+
};
163
163
+
164
164
+
pub const Fuel = struct {
165
165
+
current: u64,
166
166
+
capacity: u64,
167
167
+
consumed: ?Consumed = null,
168
168
+
169
169
+
pub const Consumed = struct {
170
170
+
amount: u64,
171
171
+
timestamp: []const u8,
172
172
+
};
173
173
+
};
174
174
+
175
175
+
pub const Requirements = struct {
176
176
+
power: ?u64 = null,
177
177
+
crew: ?u64 = null,
178
178
+
slots: ?u64 = null,
179
179
+
};