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    MissingIssueDate,
13    NotABondSecurity,
14    MissingSecurityInput,
15    MissingBaseCpi,
16    MissingCurrentCpi,
17    MissingMeasure(MeasureProto),
18    DecimalConversion,
19    DateConversion,
20    UuidError,
21    DeserializationError,
22}
23
24impl From<ParseError> for Error {
25    fn from(_: ParseError) -> Self {
26        Error::DateConversion
27    }
28}
29
30impl From<Error> for Status {
31    fn from(value: Error) -> Self {
32        match value {
33            Error::DateConversion => Status::new(Code::Internal, "Failed to convert date"),
34            Error::DecimalConversion => Status::new(Code::Internal, "Failed to convert decimal"),
35            Error::DeserializationError => Status::new(Code::Internal, "Failed to deserialize protobuf message"),
36            Error::MissingMeasure(m) => Status::new(
37                Code::Internal,
38                format!("Missing measure {}", m.as_str_name()),
39            ),
40            _ => Status::new(Code::InvalidArgument, format!("{:?}", value)),
41        }
42    }
43}