const std = @import("std"); pub const accounts = @import("models/accounts.zig"); pub const agents = @import("models/agents.zig"); pub const contracts = @import("models/contracts.zig"); pub const factions = @import("models/factions.zig"); pub const ships = @import("models/ships.zig"); pub const inventory = @import("models/inventory.zig"); pub const Info = @import("models/Info.zig"); pub fn Wrapper(comptime T: type) type { return struct { data: ?T = null, meta: ?Meta = null, @"error": ?Error = null, }; } pub const Meta = struct { total: u64 = 0, // [0, ∞) page: u64 = 1, // [1, ∞) limit: u8 = 10, // [1, 20] }; pub const Query = struct { page: u64 = 1, /// How many entries to return per page /// min: 1, max: 20 limit: u64 = 20, pub fn format(this: @This(), writer: *std.Io.Writer) std.Io.Writer.Error!void { try writer.print("?page={}&limit={}", .{ this.page, this.limit }); } }; pub const Error = struct { message: []const u8, code: ErrorCode, data: ?Data = null, requestId: ?[]const u8 = null, pub const Data = struct { // Rate Limit type: ?[]const u8 = null, retryAfter: ?u64 = null, limitBurst: ?u64 = null, limitPerSecond: ?u64 = null, remaining: ?u64 = null, reset: ?[]const u8 = null, // Wrong token expectedSubject: ?[]const u8 = null, receivedSubject: ?[]const u8 = null, }; }; pub const Cooldown = struct { shipSymbol: []const u8, totalSeconds: u64, remainingSeconds: u64, expiration: ?[]const u8 = null, }; /// List of Possible Error Codes /// /// Obtained via [/error-codes](https://spacetraders.io/openapi#tag/global/GET/error-codes) pub const ErrorCode = enum(u16) { // Standart Error Codes notFound = 404, tooManyRequests = 429, ddosProtection = 502, // SpaceTraders Error Codes responseSerializationError = 3000, unprocessableInputError = 3001, allErrorHandlersFailedError = 3002, systemStatusMaintenanceError = 3100, resetError = 3200, cooldownConflictError = 4000, waypointNoAccessError = 4001, tokenEmptyError = 4100, tokenMissingSubjectError = 4101, tokenInvalidSubjectError = 4102, missingTokenRequestError = 4103, invalidTokenRequestError = 4104, invalidTokenSubjectError = 4105, accountNotExistsError = 4106, agentNotExistsError = 4107, accountHasNoAgentError = 4108, tokenInvalidVersionError = 4109, registerAgentSymbolReservedError = 4110, registerAgentConflictSymbolError = 4111, registerAgentNoStartingLocationsError = 4112, tokenResetDateMismatchError = 4113, invalidAccountRoleError = 4114, invalidTokenError = 4115, missingAccountTokenRequest = 4116, navigateInTransitError = 4200, navigateInvalidDestinationError = 4201, navigateOutsideSystemError = 4202, navigateInsufficientFuelError = 4203, navigateSameDestinationError = 4204, shipExtractInvalidWaypointError = 4205, shipExtractPermissionError = 4206, shipInTransitError = 4214, shipMissingSensorArraysError = 4215, purchaseShipCreditsError = 4216, shipCargoExceedsLimitError = 4217, shipCargoMissingError = 4218, shipCargoUnitCountError = 4219, shipSurveyVerificationError = 4220, shipSurveyExpirationError = 4221, shipSurveyWaypointTypeError = 4222, shipSurveyOrbitError = 4223, shipSurveyExhaustedError = 4224, shipCargoFullError = 4228, waypointChartedError = 4230, shipTransferShipNotFound = 4231, shipTransferAgentConflict = 4232, shipTransferSameShipConflict = 4233, shipTransferLocationConflict = 4234, warpInsideSystemError = 4235, shipNotInOrbitError = 4236, shipInvalidRefineryGoodError = 4237, shipInvalidRefineryTypeError = 4238, shipMissingRefineryError = 4239, shipMissingSurveyorError = 4240, shipMissingWarpDriveError = 4241, shipMissingMineralProcessorError = 4242, shipMissingMiningLasersError = 4243, shipNotDockedError = 4244, purchaseShipNotPresentError = 4245, shipMountNoShipyardError = 4246, shipMissingMountError = 4247, shipMountInsufficientCreditsError = 4248, shipMissingPowerError = 4249, shipMissingSlotsError = 4250, shipMissingMountsError = 4251, shipMissingCrewError = 4252, shipExtractDestabilizedError = 4253, shipJumpInvalidOriginError = 4254, shipJumpInvalidWaypointError = 4255, shipJumpOriginUnderConstructionError = 4256, shipMissingGasProcessorError = 4257, shipMissingGasSiphonsError = 4258, shipSiphonInvalidWaypointError = 4259, shipSiphonPermissionError = 4260, waypointNoYieldError = 4261, shipJumpDestinationUnderConstructionError = 4262, shipScrapInvalidTraitError = 4263, shipRepairInvalidTraitError = 4264, agentInsufficientCreditsError = 4265, shipModuleNoShipyardError = 4266, shipModuleNotInstalledError = 4267, shipModuleInsufficientCreditsError = 4268, cantSlowDownWhileInTransitError = 4269, shipExtractInvalidSurveyLocationError = 4270, shipTransferDockedOrbitConflict = 4271, acceptContractNotAuthorizedError = 4500, acceptContractConflictError = 4501, fulfillContractDeliveryError = 4502, contractDeadlineError = 4503, contractFulfilledError = 4504, contractNotAcceptedError = 4505, contractNotAuthorizedError = 4506, shipDeliverTermsError = 4508, shipDeliverFulfilledError = 4509, shipDeliverInvalidLocationError = 4510, existingContractError = 4511, marketTradeInsufficientCreditsError = 4600, marketTradeNoPurchaseError = 4601, marketTradeNotSoldError = 4602, marketTradeUnitLimitError = 4604, shipNotAvailableForPurchaseError = 4605, waypointNoFactionError = 4700, constructionMaterialNotRequired = 4800, constructionMaterialFulfilled = 4801, shipConstructionInvalidLocationError = 4802, unsupportedMediaTypeError = 5000, };