diff --git a/src/st/models.zig b/src/st/models.zig new file mode 100644 index 0000000..c94de03 --- /dev/null +++ b/src/st/models.zig @@ -0,0 +1,153 @@ +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 const Error = struct { + message: []const u8, + code: ErrorCode, + data: ?Data = null, + + pub const Data = struct { + type: []const u8, + retryAfter: u64, + limitBurst: u64, + limitPerSecond: u64, + remaining: u64, + reset: []const u8, + }; +}; + +/// 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, +}; diff --git a/src/st/root.zig b/src/st/root.zig index e69de29..1511e2e 100644 --- a/src/st/root.zig +++ b/src/st/root.zig @@ -0,0 +1,2 @@ +pub const http = @import("http.zig"); +pub const models = @import("models.zig");