|
| 1 | +/* |
| 2 | + * Jooby https://jooby.io |
| 3 | + * Apache License Version 2.0 https://jooby.io/LICENSE.txt |
| 4 | + * Copyright 2014 Edgar Espina |
| 5 | + */ |
| 6 | +package io.jooby.trpc; |
| 7 | + |
| 8 | +import io.jooby.StatusCode; |
| 9 | + |
| 10 | +public enum TrpcErrorCode { |
| 11 | + PARSE_ERROR(-32700, StatusCode.BAD_REQUEST), |
| 12 | + BAD_REQUEST(-32600, StatusCode.BAD_REQUEST), |
| 13 | + INTERNAL_SERVER_ERROR(-32603, StatusCode.SERVER_ERROR), |
| 14 | + UNAUTHORIZED(-32001, StatusCode.UNAUTHORIZED), |
| 15 | + FORBIDDEN(-32003, StatusCode.FORBIDDEN), |
| 16 | + NOT_FOUND(-32004, StatusCode.NOT_FOUND), |
| 17 | + METHOD_NOT_SUPPORTED(-32005, StatusCode.METHOD_NOT_ALLOWED), |
| 18 | + TIMEOUT(-32008, StatusCode.REQUEST_TIMEOUT), |
| 19 | + CONFLICT(-32009, StatusCode.CONFLICT), |
| 20 | + PRECONDITION_FAILED(-32012, StatusCode.PRECONDITION_FAILED), |
| 21 | + PAYLOAD_TOO_LARGE(-32013, StatusCode.REQUEST_ENTITY_TOO_LARGE), |
| 22 | + UNPROCESSABLE_CONTENT(-32022, StatusCode.UNPROCESSABLE_ENTITY), |
| 23 | + TOO_MANY_REQUESTS(-32029, StatusCode.TOO_MANY_REQUESTS), |
| 24 | + CLIENT_CLOSED_REQUEST(-32099, StatusCode.CLIENT_CLOSED_REQUEST); |
| 25 | + |
| 26 | + private final int rpcCode; |
| 27 | + private final StatusCode statusCode; |
| 28 | + |
| 29 | + TrpcErrorCode(int rpcCode, StatusCode statusCode) { |
| 30 | + this.rpcCode = rpcCode; |
| 31 | + this.statusCode = statusCode; |
| 32 | + } |
| 33 | + |
| 34 | + public int getRpcCode() { |
| 35 | + return rpcCode; |
| 36 | + } |
| 37 | + |
| 38 | + public StatusCode getStatusCode() { |
| 39 | + return statusCode; |
| 40 | + } |
| 41 | + |
| 42 | + /** Helper to map a standard Jooby HTTP status code to the closest tRPC equivalent. */ |
| 43 | + public static TrpcErrorCode of(StatusCode status) { |
| 44 | + for (var code : values()) { |
| 45 | + if (code.statusCode.value() == status.value()) { |
| 46 | + return code; |
| 47 | + } |
| 48 | + } |
| 49 | + return INTERNAL_SERVER_ERROR; // Fallback |
| 50 | + } |
| 51 | +} |
0 commit comments