Description
Define all SubmitError variants with Display implementations for the transaction submission pipeline. These variants cover every failure mode in the send+poll lifecycle.
Current Behavior
SubmitError in submit.rs has the required variants but needs to be comprehensive and have proper Display impls for logging and error propagation.
Desired Behavior
All variants must be defined with correct Display output:
pub enum SubmitError {
Rpc(RpcError), // "RPC error: {inner}"
JsonError(String), // "JSON parse error: {msg}"
Rejected { status }, // "transaction rejected: {status}"
TransactionFailed { events }, // "transaction failed on-chain; diagnostic events: {events:?}"
PollTimeout, // "transaction not confirmed after {MAX_POLL_ATTEMPTS} attempts"
}
Implementation Details
- Each variant wraps the appropriate inner type
Rpc wraps crate::stellar_rpc::RpcError
TransactionFailed holds Vec<String> of diagnostic event XDRs
PollTimeout is a unit variant (no data needed)
Display must produce human-readable messages for logging
- Add
From<RpcError> impl for ergonomic error propagation
Acceptance Criteria
Description
Define all
SubmitErrorvariants withDisplayimplementations for the transaction submission pipeline. These variants cover every failure mode in the send+poll lifecycle.Current Behavior
SubmitErrorinsubmit.rshas the required variants but needs to be comprehensive and have properDisplayimpls for logging and error propagation.Desired Behavior
All variants must be defined with correct
Displayoutput:Implementation Details
Rpcwrapscrate::stellar_rpc::RpcErrorTransactionFailedholdsVec<String>of diagnostic event XDRsPollTimeoutis a unit variant (no data needed)Displaymust produce human-readable messages for loggingFrom<RpcError>impl for ergonomic error propagationAcceptance Criteria
Rpc,JsonError,Rejected,TransactionFailed,PollTimeoutDisplayimplementationFrom<RpcError>conversion implementedSubmitErrorderivesDebug,PartialEq,Eq,Clone