Skip to main content

ledger_models/fintekkers/wrappers/models/utils/
errors.rs

1use crate::fintekkers::models::position::MeasureProto;
2use crate::fintekkers::wrappers::models::utils::date::ParseError;
3use tonic::{Code, Status};
4
5#[derive(Debug)]
6pub enum Error {
7    MissingPositionInput,
8    MissingPriceInput,
9    MissingFaceValue,
10    MissingCouponRate,
11    MissingMaturityDate,
12    MissingSecurityInput,
13    MissingBaseCpi,
14    MissingCurrentCpi,
15    MissingMeasure(MeasureProto),
16    DecimalConversion,
17    DateConversion,
18    UuidError,
19    DeserializationError,
20}
21
22impl From<ParseError> for Error {
23    fn from(_: ParseError) -> Self {
24        Error::DateConversion
25    }
26}
27
28impl From<Error> for Status {
29    fn from(value: Error) -> Self {
30        match value {
31            Error::DateConversion => Status::new(Code::Internal, "Failed to convert date"),
32            Error::DecimalConversion => Status::new(Code::Internal, "Failed to convert decimal"),
33            Error::DeserializationError => Status::new(Code::Internal, "Failed to deserialize protobuf message"),
34            Error::MissingMeasure(m) => Status::new(
35                Code::Internal,
36                format!("Missing measure {}", m.as_str_name()),
37            ),
38            _ => Status::new(Code::InvalidArgument, format!("{:?}", value)),
39        }
40    }
41}