line_cardinality/count_unique_impl/
result.rs1use std::error::Error as StdError;
5use std::fmt::{Display, Formatter};
6use std::io;
7
8pub(crate) type Result = std::result::Result<(), Error>;
9
10#[derive(Debug)]
11enum Message {
12 Dynamic(String),
13 Static(&'static str),
14}
15
16#[derive(Debug)]
18pub enum Cause {
19 Io(io::Error),
21 Size(usize),
23 User,
25}
26
27#[derive(Debug)]
29pub struct Error {
30 message: Message,
31 cause: Cause,
32}
33
34impl Error {
35 pub fn io_static(message: &'static str, cause: io::Error) -> Self {
37 Self {
38 message: Message::Static(message),
39 cause: Cause::Io(cause),
40 }
41 }
42
43 pub fn io(message: String, cause: io::Error) -> Self {
45 Self {
46 message: Message::Dynamic(message),
47 cause: Cause::Io(cause),
48 }
49 }
50
51 pub fn message_static(message: &'static str) -> Self {
53 Self {
54 message: Message::Static(message),
55 cause: Cause::User,
56 }
57 }
58
59 pub fn message(message: String) -> Self {
61 Self {
62 message: Message::Dynamic(message),
63 cause: Cause::User,
64 }
65 }
66
67 pub(crate) fn hyper_log_log(message: String, size: usize) -> Self {
68 Self {
69 message: Message::Dynamic(message),
70 cause: Cause::Size(size),
71 }
72 }
73
74 pub fn get_cause(&self) -> &Cause {
75 &self.cause
76 }
77}
78
79impl StdError for Error {
80 fn source(&self) -> Option<&(dyn StdError + 'static)> {
81 match &self.cause {
82 Cause::Io(e) => Some(e),
83 Cause::Size(_) => None,
84 Cause::User => None,
85 }
86 }
87}
88
89impl Display for Error {
90 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
91 match &self.message {
92 Message::Dynamic(string) => write!(f, "{}", string),
93 Message::Static(str) => write!(f, "{}", str),
94 }
95 }
96}