A SpaceTraders Agent
1const std = @import("std");
2
3pub const accounts = @import("models/accounts.zig");
4pub const agents = @import("models/agents.zig");
5pub const contracts = @import("models/contracts.zig");
6pub const factions = @import("models/factions.zig");
7pub const ships = @import("models/ships.zig");
8
9pub const inventory = @import("models/inventory.zig");
10
11pub const Info = @import("models/Info.zig");
12
13pub fn Wrapper(comptime T: type) type {
14 return struct {
15 data: ?T = null,
16 meta: ?Meta = null,
17 @"error": ?Error = null,
18 };
19}
20
21pub const Meta = struct {
22 total: u64 = 0, // [0, ∞)
23 page: u64 = 1, // [1, ∞)
24 limit: u8 = 10, // [1, 20]
25};
26
27pub const Query = struct {
28 page: u64 = 1,
29 /// How many entries to return per page
30 /// min: 1, max: 20
31 limit: u64 = 20,
32
33 pub fn format(this: @This(), writer: *std.Io.Writer) std.Io.Writer.Error!void {
34 try writer.print("?page={}&limit={}", .{ this.page, this.limit });
35 }
36};
37
38pub const Error = struct {
39 message: []const u8,
40 code: ErrorCode,
41 data: ?Data = null,
42 requestId: ?[]const u8 = null,
43
44 pub const Data = struct {
45 // Rate Limit
46 type: ?[]const u8 = null,
47 retryAfter: ?u64 = null,
48 limitBurst: ?u64 = null,
49 limitPerSecond: ?u64 = null,
50 remaining: ?u64 = null,
51 reset: ?[]const u8 = null,
52 // Wrong token
53 expectedSubject: ?[]const u8 = null,
54 receivedSubject: ?[]const u8 = null,
55 };
56};
57
58pub const Cooldown = struct {
59 shipSymbol: []const u8,
60 totalSeconds: u64,
61 remainingSeconds: u64,
62 expiration: ?[]const u8 = null,
63};
64
65/// List of Possible Error Codes
66///
67/// Obtained via [/error-codes](https://spacetraders.io/openapi#tag/global/GET/error-codes)
68pub const ErrorCode = enum(u16) {
69 // Standart Error Codes
70 notFound = 404,
71 tooManyRequests = 429,
72 ddosProtection = 502,
73
74 // SpaceTraders Error Codes
75 responseSerializationError = 3000,
76 unprocessableInputError = 3001,
77 allErrorHandlersFailedError = 3002,
78 systemStatusMaintenanceError = 3100,
79 resetError = 3200,
80 cooldownConflictError = 4000,
81 waypointNoAccessError = 4001,
82 tokenEmptyError = 4100,
83 tokenMissingSubjectError = 4101,
84 tokenInvalidSubjectError = 4102,
85 missingTokenRequestError = 4103,
86 invalidTokenRequestError = 4104,
87 invalidTokenSubjectError = 4105,
88 accountNotExistsError = 4106,
89 agentNotExistsError = 4107,
90 accountHasNoAgentError = 4108,
91 tokenInvalidVersionError = 4109,
92 registerAgentSymbolReservedError = 4110,
93 registerAgentConflictSymbolError = 4111,
94 registerAgentNoStartingLocationsError = 4112,
95 tokenResetDateMismatchError = 4113,
96 invalidAccountRoleError = 4114,
97 invalidTokenError = 4115,
98 missingAccountTokenRequest = 4116,
99 navigateInTransitError = 4200,
100 navigateInvalidDestinationError = 4201,
101 navigateOutsideSystemError = 4202,
102 navigateInsufficientFuelError = 4203,
103 navigateSameDestinationError = 4204,
104 shipExtractInvalidWaypointError = 4205,
105 shipExtractPermissionError = 4206,
106 shipInTransitError = 4214,
107 shipMissingSensorArraysError = 4215,
108 purchaseShipCreditsError = 4216,
109 shipCargoExceedsLimitError = 4217,
110 shipCargoMissingError = 4218,
111 shipCargoUnitCountError = 4219,
112 shipSurveyVerificationError = 4220,
113 shipSurveyExpirationError = 4221,
114 shipSurveyWaypointTypeError = 4222,
115 shipSurveyOrbitError = 4223,
116 shipSurveyExhaustedError = 4224,
117 shipCargoFullError = 4228,
118 waypointChartedError = 4230,
119 shipTransferShipNotFound = 4231,
120 shipTransferAgentConflict = 4232,
121 shipTransferSameShipConflict = 4233,
122 shipTransferLocationConflict = 4234,
123 warpInsideSystemError = 4235,
124 shipNotInOrbitError = 4236,
125 shipInvalidRefineryGoodError = 4237,
126 shipInvalidRefineryTypeError = 4238,
127 shipMissingRefineryError = 4239,
128 shipMissingSurveyorError = 4240,
129 shipMissingWarpDriveError = 4241,
130 shipMissingMineralProcessorError = 4242,
131 shipMissingMiningLasersError = 4243,
132 shipNotDockedError = 4244,
133 purchaseShipNotPresentError = 4245,
134 shipMountNoShipyardError = 4246,
135 shipMissingMountError = 4247,
136 shipMountInsufficientCreditsError = 4248,
137 shipMissingPowerError = 4249,
138 shipMissingSlotsError = 4250,
139 shipMissingMountsError = 4251,
140 shipMissingCrewError = 4252,
141 shipExtractDestabilizedError = 4253,
142 shipJumpInvalidOriginError = 4254,
143 shipJumpInvalidWaypointError = 4255,
144 shipJumpOriginUnderConstructionError = 4256,
145 shipMissingGasProcessorError = 4257,
146 shipMissingGasSiphonsError = 4258,
147 shipSiphonInvalidWaypointError = 4259,
148 shipSiphonPermissionError = 4260,
149 waypointNoYieldError = 4261,
150 shipJumpDestinationUnderConstructionError = 4262,
151 shipScrapInvalidTraitError = 4263,
152 shipRepairInvalidTraitError = 4264,
153 agentInsufficientCreditsError = 4265,
154 shipModuleNoShipyardError = 4266,
155 shipModuleNotInstalledError = 4267,
156 shipModuleInsufficientCreditsError = 4268,
157 cantSlowDownWhileInTransitError = 4269,
158 shipExtractInvalidSurveyLocationError = 4270,
159 shipTransferDockedOrbitConflict = 4271,
160 acceptContractNotAuthorizedError = 4500,
161 acceptContractConflictError = 4501,
162 fulfillContractDeliveryError = 4502,
163 contractDeadlineError = 4503,
164 contractFulfilledError = 4504,
165 contractNotAcceptedError = 4505,
166 contractNotAuthorizedError = 4506,
167 shipDeliverTermsError = 4508,
168 shipDeliverFulfilledError = 4509,
169 shipDeliverInvalidLocationError = 4510,
170 existingContractError = 4511,
171 marketTradeInsufficientCreditsError = 4600,
172 marketTradeNoPurchaseError = 4601,
173 marketTradeNotSoldError = 4602,
174 marketTradeUnitLimitError = 4604,
175 shipNotAvailableForPurchaseError = 4605,
176 waypointNoFactionError = 4700,
177 constructionMaterialNotRequired = 4800,
178 constructionMaterialFulfilled = 4801,
179 shipConstructionInvalidLocationError = 4802,
180 unsupportedMediaTypeError = 5000,
181};