1 | /* |
2 | * Copyright (c) 2023. |
3 | * |
4 | * This software is free software; |
5 | * |
6 | * You can redistribute it or modify it under terms of the MIT, Apache License or Zlib license |
7 | */ |
8 | |
9 | //! Decoding results for images |
10 | use alloc::vec::Vec; |
11 | |
12 | /// A simple enum that can hold decode |
13 | /// results of most images |
14 | #[non_exhaustive ] |
15 | pub enum DecodingResult { |
16 | U8(Vec<u8>), |
17 | U16(Vec<u16>), |
18 | F32(Vec<f32>) |
19 | } |
20 | |
21 | impl DecodingResult { |
22 | /// Return the contents if the enum stores `Vec<u8>` or otherwise |
23 | /// return `None`. |
24 | /// |
25 | /// Useful for de-sugaring the result of a decoding operation |
26 | /// into raw bytes |
27 | /// |
28 | /// # Example |
29 | /// ``` |
30 | /// use zune_core::result::DecodingResult; |
31 | /// let data = DecodingResult::U8(vec![0;100]); |
32 | /// // we know this won't fail because we created it with u8 |
33 | /// assert!(data.u8().is_some()); |
34 | /// |
35 | /// let data = DecodingResult::U16(vec![0;100]); |
36 | /// // it should now return nothing since the type is u18 |
37 | /// assert!(data.u8().is_none()); |
38 | /// |
39 | /// ``` |
40 | pub fn u8(self) -> Option<Vec<u8>> { |
41 | match self { |
42 | DecodingResult::U8(data) => Some(data), |
43 | _ => None |
44 | } |
45 | } |
46 | |
47 | /// Return the contents if the enum stores `Vec<u16>` or otherwise |
48 | /// return `None`. |
49 | /// |
50 | /// Useful for de-sugaring the result of a decoding operation |
51 | /// into raw bytes |
52 | /// |
53 | /// # Example |
54 | /// ``` |
55 | /// use zune_core::result::DecodingResult; |
56 | /// let data = DecodingResult::U8(vec![0;100]); |
57 | /// // we know this will fail because we created it with u16 |
58 | /// assert!(data.u16().is_none()); |
59 | /// |
60 | /// |
61 | /// let data = DecodingResult::U16(vec![0;100]); |
62 | /// // it should now return something since the type is u16 |
63 | /// assert!(data.u16().is_some()); |
64 | /// |
65 | /// ``` |
66 | pub fn u16(self) -> Option<Vec<u16>> { |
67 | match self { |
68 | DecodingResult::U16(data) => Some(data), |
69 | _ => None |
70 | } |
71 | } |
72 | } |
73 | |