File indexing completed on 2024-05-05 17:43:11

0001 /*
0002  *   SPDX-FileCopyrightText: 2017 Ivan Cukic <ivan.cukic (at) kde.org>
0003  *
0004  *   SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #ifndef PLASMAVAULT_KDED_ENGINE_COMMAND_RESULT_H
0008 #define PLASMAVAULT_KDED_ENGINE_COMMAND_RESULT_H
0009 
0010 #include <QFuture>
0011 
0012 #include "asynqt/basic/all.h"
0013 #include "asynqt/utils/expected.h"
0014 
0015 namespace PlasmaVault
0016 {
0017 class Error
0018 {
0019 public:
0020     enum Code {
0021         MountPointError,
0022         DeviceError,
0023         BackendError,
0024         CommandError,
0025         DeletionError,
0026         UnknownError,
0027         OperationCancelled,
0028     };
0029 
0030     Error(Code code = UnknownError, const QString &message = {}, const QString &out = {}, const QString &err = {});
0031 
0032     Code code() const;
0033     QString message() const;
0034     QString out() const;
0035     QString err() const;
0036 
0037 private:
0038     Code m_code;
0039     QString m_message;
0040     QString m_out;
0041     QString m_err;
0042 };
0043 
0044 template<typename T = void>
0045 using Result = AsynQt::Expected<T, Error>;
0046 
0047 template<typename T = void>
0048 using FutureResult = QFuture<Result<T>>;
0049 
0050 inline FutureResult<> errorResult(Error::Code error, const QString &message, const QString &out = {}, const QString &err = {})
0051 {
0052     qWarning() << message;
0053     return makeReadyFuture(Result<>::error(error, message, out, err));
0054 }
0055 
0056 } // namespace PlasmaVault
0057 
0058 #endif // include guard