1#![warn(missing_docs)]
2use std::fmt;
3use super::protos::Envelope;
4impl super::protos::ErrorResponse {
5 pub fn new(message: &str, code: i32) -> Self {
7 Self {
8 code,
9 message: message.to_string(),
10 ..Default::default()
11 }
12 }
13 pub fn to_envelope(&self) -> Envelope {
15 let any_message = prost_types::Any {
16 type_url: "type.googleapis.com/openiap.ErrorResponse".to_string(),
17 value: {
18 let mut buf = Vec::new();
19 prost::Message::encode(self, &mut buf).unwrap_or(());
20 buf
21 },
22 };
23 Envelope {
24 command: "error".into(),
25 data: Some(any_message.clone()),
26 ..Default::default()
27 }
28 }
29}
30
31
32#[derive(Debug)]
34pub enum OpenIAPError {
35 ClientError(String),
37 ServerError(String),
39 CustomError(String),
41}
42impl fmt::Display for OpenIAPError {
43 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
44 match self {
45 OpenIAPError::ClientError(e) => write!(f, "Client Error {}", e),
46 OpenIAPError::ServerError(e) => write!(f, "Server Error {}", e),
47 OpenIAPError::CustomError(e) => write!(f, "Custom Error {}", e),
48 }
49 }
50}
51impl std::error::Error for OpenIAPError {
52 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
53 None
58 }
59}