1use std::fmt::Display;
3
4use thiserror::Error;
5
6use crate::generated::ydb::operations::Operation;
7pub use crate::payload::ExtractResultError;
8
9#[derive(Error, Debug)]
10#[error(transparent)]
11pub enum YdbError {
12 Grpc(#[from] tonic::Status),
13 ExtractResultError(#[from] ExtractResultError),
14 #[error("Error from ydb: {0}")]
15 Ydb(ErrWithOperation),
16 #[error("Empty response")]
17 EmptyResponse,
18 #[cfg(feature = "sqlx")]
19 #[error("Error on decode ast")]
20 DecodeAst,
21 #[cfg(feature = "sqlx")]
22 #[error("No session, try to reconnect")]
23 NoSession,
24}
25
26#[derive(Error, Debug)]
27pub struct ErrWithOperation(pub Operation);
28
29impl Display for ErrWithOperation {
30 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
31 let status = self.0.status();
32 write!(f, "Operation status: {status:?}")
33 }
34}