Sane C++ Libraries
C++ Platform Abstraction Libraries
Loading...
Searching...
No Matches
AwaitErrorFormatter.h
1// Copyright (c) Stefano Cristiano
2// SPDX-License-Identifier: MIT
3#pragma once
4
5#include "../Common/ResultErrorFormatter.h"
6#include "AwaitError.h"
7
8namespace SC
9{
12inline ResultErrorFormat formatAwaitError(AwaitError error, Span<char> output)
13{
14 ResultErrorFormatter formatter(output);
15 switch (error)
16 {
17 case AwaitError::Cancelled: formatter.append("Awaited operation was cancelled"); break;
18 case AwaitError::WrongEventLoop: formatter.append("Task belongs to another event loop"); break;
19 case AwaitError::AllocatorAlreadyOpen: formatter.append("Allocator is already open"); break;
20 case AwaitError::AllocatorStorageEmpty: formatter.append("Allocator storage is empty"); break;
21 case AwaitError::AllocatorReservationEmpty: formatter.append("Allocator reservation size is zero"); break;
22 case AwaitError::AllocatorReservationFailed: formatter.append("Allocator memory could not be reserved"); break;
23 case AwaitError::AllocatorCommitFailed: formatter.append("Allocator memory could not be committed"); break;
24 case AwaitError::AllocatorHasLiveAllocations: formatter.append("Allocator still has live allocations"); break;
25 case AwaitError::InvalidTask: formatter.append("Task is invalid"); break;
26 case AwaitError::TaskNotCompleted: formatter.append("Task has not completed"); break;
27 case AwaitError::TaskNotStarted: formatter.append("Task has not started"); break;
28 case AwaitError::TaskAlreadyStarted: formatter.append("Task has already started"); break;
29 case AwaitError::TaskCancellationUnavailable: formatter.append("Task cannot be cancelled now"); break;
30 case AwaitError::UnhandledException: formatter.append("Task encountered an unhandled exception"); break;
31 case AwaitError::SocketSendNoProgress: formatter.append("Socket send made no progress"); break;
32 case AwaitError::SocketReceiveIncomplete:
33 formatter.append("Socket disconnected before the requested data arrived");
34 break;
35 case AwaitError::SocketReceiveNoProgress: formatter.append("Socket receive made no progress"); break;
36 case AwaitError::EmptyReceiveBuffer: formatter.append("Receive buffer is empty"); break;
37 case AwaitError::ReceiveLineBufferExhausted:
38 formatter.append("Receive buffer filled before a newline arrived");
39 break;
40 case AwaitError::FileReadNoProgress: formatter.append("File read made no progress"); break;
41 case AwaitError::OperationUnsupported: formatter.append("Operation is unsupported"); break;
42 case AwaitError::InvalidFileHandle: formatter.append("File handle is invalid"); break;
43 case AwaitError::MissingOutputFile: formatter.append("Output file is missing"); break;
44 case AwaitError::MissingFile: formatter.append("File is missing"); break;
45 case AwaitError::MissingReadResult: formatter.append("File read result is missing"); break;
46 case AwaitError::InvalidFileSystemOperation: formatter.append("File-system operation is invalid"); break;
47 case AwaitError::TaskGroupStorageFull: formatter.append("Task group storage is full"); break;
48 case AwaitError::TaskGroupResultStorageTooSmall: formatter.append("Task group result storage is too small"); break;
49 case AwaitError::InactiveTask: formatter.append("Task is inactive"); break;
50 case AwaitError::TaskGroupEmpty: formatter.append("Task group is empty"); break;
51 case AwaitError::TaskAlreadyAwaited: formatter.append("Task is already being awaited"); break;
52 case AwaitError::RegistryStorageFull: formatter.append("Task registry storage is full"); break;
53 case AwaitError::RegistryEmpty: formatter.append("Task registry is empty"); break;
54 case AwaitError::TaskTimedOut: formatter.append("Task timed out"); break;
55 case AwaitError::InvalidWorkCallback: formatter.append("Work callback is invalid"); break;
56 default: return ResultErrorFormatter::failure(ResultErrorFormatStatus::UnknownError, output);
57 }
58 return formatter.finish();
59}
60
61inline ResultErrorFormat formatAwaitError(Result result, Span<char> output)
62{
63 if (result)
64 return ResultErrorFormatter::failure(ResultErrorFormatStatus::NotAnError, output);
65 if (result.category() != AwaitResultCategory)
66 return ResultErrorFormatter::failure(ResultErrorFormatStatus::ForeignCategory, output);
67 return formatAwaitError(static_cast<AwaitError>(result.errorValue()), output);
68}
69} // namespace SC
AwaitError
Stable portable failures owned by Await.
Definition AwaitError.h:15