Skip to main content

Module error

Module error 

Expand description

gRPC status -> public connector errors.

T-Bank error codes (errors.md): RESOURCE_EXHAUSTED 800xx, NOT_FOUND 500xx (becomes not_found), UNAUTHENTICATED 40003, PERMISSION_DENIED 4000x, INVALID_ARGUMENT 300xx. The broker puts the number in the status message (and may repeat it at the start of the message header), see broker_code.

RESOURCE_EXHAUSTED is not always a rate limit. Only the codes of the table that are about time (80002 requests a minute, 80003 SMS, 80006 errors a minute) become [Error::RateLimited]. The codes that a repeat cannot fix become [Error::Rejected] with a code of their own: 80001 streams_limit, 80004 no_subscriptions, 80005 stream_lifetime, 80007 stop_orders_limit. A RESOURCE_EXHAUSTED without a known code stays a rate limit, as before.

Two functions decide the mapping. map_status is for reads, map_command_status is for commands. The difference matters: a failed read may be repeated, a command whose outcome is hidden must never be repeated, so it becomes [Error::Unknown].

The error codes above are taken from the broker’s documentation and the mock. They are not verified against the live API.

§Examples

use brokapi_core::Error;
use brokapi_tbank::error::{map_command_status, map_status};
use tonic::Status;

// A read that timed out is a transport error: repeat it later.
assert!(matches!(map_status(&Status::deadline_exceeded("slow")), Error::Transport(_)));
// The same status on a command hides what the broker did.
assert!(matches!(map_command_status(&Status::deadline_exceeded("slow")), Error::Unknown));
// A refusal is a refusal either way.
assert!(matches!(map_command_status(&Status::invalid_argument("30042")), Error::Rejected { .. }));

Constants§

STOP_ORDERS_RESPONSE_LIMIT
Error::Rejected code for the broker’s answer 30261: the list of stop orders is too long for one reply.

Functions§

broker_code
The five-digit T-Invest error code of a status (80007, 30261), if the broker sent one.
config
Builds a [Error::Config] with a text message.
is_not_found
true for the NotFound status: the broker does not know the order or the instrument.
map_command_status
Status of a command (place / cancel / replace). Only statuses that prove the broker did not act become Rejected; anything that can hide a processed request is Unknown.
map_status
Status of a read-only call (snapshots, reference data).
transport
Builds a [Error::Transport] with a text message.