melodium_distribution/
error.rs1use melodium_common::descriptor::{LoadingError, Status};
2use melodium_share::SharingError;
3use std::error::Error;
4use std::fmt::{Display, Formatter};
5
6#[derive(Debug, Clone)]
7pub struct DistributionError {
8 pub id: u32,
9 pub kind: DistributionErrorKind,
10}
11
12#[derive(Debug, Clone)]
13pub enum DistributionErrorKind {
14 Loading { error: LoadingError },
15 Sharing { error: SharingError },
16}
17
18impl Display for DistributionErrorKind {
19 fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
20 match self {
21 DistributionErrorKind::Loading { error } => write!(f, "{}", error),
22 DistributionErrorKind::Sharing { error } => write!(f, "{}", error),
23 }
24 }
25}
26
27impl DistributionError {
28 pub fn loading(id: u32, error: LoadingError) -> Self {
29 Self {
30 id,
31 kind: DistributionErrorKind::Loading { error },
32 }
33 }
34
35 pub fn sharing(id: u32, error: SharingError) -> Self {
36 Self {
37 id,
38 kind: DistributionErrorKind::Sharing { error },
39 }
40 }
41}
42
43impl Display for DistributionError {
44 fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
45 write!(f, "T{:04}: {}", self.id, self.kind)
46 }
47}
48
49impl From<LoadingError> for DistributionError {
50 fn from(le: LoadingError) -> Self {
51 DistributionError::loading(0, le)
52 }
53}
54
55impl From<SharingError> for DistributionError {
56 fn from(se: SharingError) -> Self {
57 DistributionError::sharing(0, se)
58 }
59}
60
61impl Error for DistributionError {
62 fn source(&self) -> Option<&(dyn Error + 'static)> {
63 None
65 }
66}
67
68pub type DistributionErrors = Vec<DistributionError>;
69pub type DistributionResult<T> = Status<T, DistributionError, DistributionError>;
70
71impl From<DistributionError> for DistributionErrors {
72 fn from(value: DistributionError) -> Self {
73 vec![value]
74 }
75}