Sane C++ Libraries
C++ Platform Abstraction Libraries
Loading...
Searching...
No Matches
AsyncStreamsErrorFormatter.h
1// Copyright (c) Stefano Cristiano
2// SPDX-License-Identifier: MIT
3#pragma once
4
5#include "../Common/ResultErrorFormatter.h"
6#include "AsyncStreamsError.h"
7
8namespace SC
9{
12inline ResultErrorFormat formatAsyncStreamsError(AsyncStreamsError error, Span<char> output)
13{
14 ResultErrorFormatter formatter(output);
15 switch (error)
16 {
17 case AsyncStreamsError::InvalidBufferID: formatter.append("Buffer identifier is invalid"); break;
18 case AsyncStreamsError::InvalidParentBufferID: formatter.append("Parent buffer identifier is invalid"); break;
19 case AsyncStreamsError::BufferNotWritable: formatter.append("Buffer is not writable"); break;
20 case AsyncStreamsError::NoReusableBuffer: formatter.append("No reusable buffer can satisfy the request"); break;
21 case AsyncStreamsError::BufferPoolFull: formatter.append("Buffer pool is full"); break;
22 case AsyncStreamsError::InsufficientSliceStorage: formatter.append("Slice storage is too small"); break;
23 case AsyncStreamsError::InvalidSliceCount: formatter.append("Slice count must be greater than zero"); break;
24 case AsyncStreamsError::ChildViewOutOfBounds: formatter.append("Child view exceeds its parent buffer"); break;
25 case AsyncStreamsError::InvalidRootBufferType: formatter.append("Root buffer type is invalid"); break;
26 case AsyncStreamsError::ReadableNotReady: formatter.append("Readable stream is not ready to start"); break;
27 case AsyncStreamsError::ReadQueueMissing: formatter.append("Readable stream has no read queue"); break;
28 case AsyncStreamsError::EmptyReadBuffer: formatter.append("Readable stream cannot push an empty buffer"); break;
29 case AsyncStreamsError::ReadQueueFull: formatter.append("Readable stream queue is full"); break;
30 case AsyncStreamsError::InvalidReadableState:
31 formatter.append("Readable stream operation is invalid in this state");
32 break;
33 case AsyncStreamsError::ReadReactivationMissing:
34 formatter.append("Readable stream did not reactivate after pushing data");
35 break;
36 case AsyncStreamsError::ReadableDestroying: formatter.append("Readable stream is being destroyed"); break;
37 case AsyncStreamsError::ReadableEnded: formatter.append("Readable stream has ended"); break;
38 case AsyncStreamsError::ReadableNotInitialized: formatter.append("Readable stream is not initialized"); break;
39 case AsyncStreamsError::ReadableErrored: formatter.append("Readable stream is in an error state"); break;
40 case AsyncStreamsError::InvalidWritableState:
41 formatter.append("Writable stream operation is invalid in this state");
42 break;
43 case AsyncStreamsError::WriteQueueMissing: formatter.append("Writable stream has no write queue"); break;
44 case AsyncStreamsError::WriteAfterEnd: formatter.append("Writable stream cannot accept writes after end"); break;
45 case AsyncStreamsError::WriteQueueFull: formatter.append("Writable stream queue is full"); break;
46 case AsyncStreamsError::WritableDestroying: formatter.append("Writable stream is being destroyed"); break;
47 case AsyncStreamsError::WritableEndAlreadyCalled: formatter.append("Writable stream end was already called"); break;
48 case AsyncStreamsError::PipelineSourceMissing: formatter.append("Pipeline source is missing"); break;
49 case AsyncStreamsError::PipelineSinkMissing: formatter.append("Pipeline has no sink"); break;
50 case AsyncStreamsError::PipelineBufferPoolMismatch:
51 formatter.append("Pipeline streams must share the same buffer pool");
52 break;
53 case AsyncStreamsError::PipelineListenerStorageFull: formatter.append("Pipeline listener storage is full"); break;
54 case AsyncStreamsError::TransformInputChanged:
55 formatter.append("Paused transform received a different input buffer");
56 break;
57 case AsyncStreamsError::TransformAlreadyFinalized: formatter.append("Transform has already finalized"); break;
58 case AsyncStreamsError::TransformAlreadyProcessing:
59 formatter.append("Transform is already processing input");
60 break;
61 case AsyncStreamsError::TransformAlreadyFinalizing: formatter.append("Transform is already finalizing"); break;
62 case AsyncStreamsError::CompressionRuntimeUnavailable:
63 formatter.append("Compression runtime is unavailable");
64 break;
65 case AsyncStreamsError::CompressionSymbolMissing:
66 formatter.append("Compression runtime is missing a required function");
67 break;
68 case AsyncStreamsError::CompressionSpanInvalid: formatter.append("Compression buffer span is invalid"); break;
69 case AsyncStreamsError::CompressionNoProgress: formatter.append("Compression made no progress"); break;
70 case AsyncStreamsError::CompressionUnexpectedEnd: formatter.append("Compression stream ended unexpectedly"); break;
71 case AsyncStreamsError::CompressionDictionaryRequired:
72 formatter.append("Compression dictionary is required");
73 break;
74 case AsyncStreamsError::CompressionIOFailure: formatter.append("Compression input or output failed"); break;
75 case AsyncStreamsError::CompressionStreamInvalid: formatter.append("Compression stream state is invalid"); break;
76 case AsyncStreamsError::CompressionDataInvalid: formatter.append("Compressed data is invalid"); break;
77 case AsyncStreamsError::CompressionMemoryUnavailable: formatter.append("Compression memory is unavailable"); break;
78 case AsyncStreamsError::CompressionVersionMismatch:
79 formatter.append("Compression runtime version is incompatible");
80 break;
81 case AsyncStreamsError::CompressionFailed: formatter.append("Compression failed"); break;
82 case AsyncStreamsError::CompressionAlreadyInitialized:
83 formatter.append("Compression stream is already initialized");
84 break;
85 case AsyncStreamsError::CompressionOutputBufferEmpty: formatter.append("Compression output buffer is empty"); break;
86 case AsyncStreamsError::CompressionNotInitialized: formatter.append("Compression stream is not initialized"); break;
87 case AsyncStreamsError::AsyncEventLoopMissing: formatter.append("Async stream has no event loop"); break;
88 case AsyncStreamsError::AsyncRequestDestroying: formatter.append("Async request is being destroyed"); break;
89 case AsyncStreamsError::AsyncDescriptorMissing: formatter.append("Async stream descriptor is missing"); break;
90 case AsyncStreamsError::CipherOutputBufferTooSmall:
91 formatter.append("Cipher output buffer is smaller than one block");
92 break;
93 case AsyncStreamsError::CipherInvalidOutputSize:
94 formatter.append("Cipher reported an output size beyond its buffer");
95 break;
96 default: return ResultErrorFormatter::failure(ResultErrorFormatStatus::UnknownError, output);
97 }
98 return formatter.finish();
99}
100
101inline ResultErrorFormat formatAsyncStreamsError(Result result, Span<char> output)
102{
103 if (result)
104 return ResultErrorFormatter::failure(ResultErrorFormatStatus::NotAnError, output);
105 if (result.category() != AsyncStreamsResultCategory)
106 return ResultErrorFormatter::failure(ResultErrorFormatStatus::ForeignCategory, output);
107 return formatAsyncStreamsError(static_cast<AsyncStreamsError>(result.errorValue()), output);
108}
109} // namespace SC
AsyncStreamsError
Stable portable failures owned by AsyncStreams.
Definition AsyncStreamsError.h:15