File indexing completed on 2024-05-12 17:08:32

0001 /*
0002  * SPDX-FileCopyrightText: 2018-2019 Daniel Vrátil <dvratil@kde.org>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #include "enum.h"
0008 #include "libkbolt_debug.h"
0009 
0010 #include <QStringList>
0011 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
0012 #include <QStringRef>
0013 #else
0014 #include <QStringView>
0015 #endif
0016 #include <QVector>
0017 
0018 Bolt::Status Bolt::statusFromString(const QString &str)
0019 {
0020     if (str == QLatin1String("unknown")) {
0021         return Bolt::Status::Unknown;
0022     } else if (str == QLatin1String("disconnected")) {
0023         return Bolt::Status::Disconnected;
0024     } else if (str == QLatin1String("connecting")) {
0025         return Bolt::Status::Connecting;
0026     } else if (str == QLatin1String("connected")) {
0027         return Bolt::Status::Connected;
0028     } else if (str == QLatin1String("authorizing")) {
0029         return Bolt::Status::Authorizing;
0030     } else if (str == QLatin1String("authorized")) {
0031         return Bolt::Status::Authorized;
0032     } else if (str == QLatin1String("auth-error")) {
0033         return Bolt::Status::AuthError;
0034     } else {
0035         qCCritical(log_libkbolt, "Unknown Status enum value '%s'", qUtf8Printable(str));
0036         Q_ASSERT(false);
0037         return Bolt::Status::Unknown;
0038     }
0039 }
0040 
0041 QString Bolt::statusToString(Bolt::Status status)
0042 {
0043     switch (status) {
0044     case Bolt::Status::Unknown:
0045         return QStringLiteral("unknown");
0046     case Bolt::Status::Disconnected:
0047         return QStringLiteral("disconnected");
0048     case Bolt::Status::Connecting:
0049         return QStringLiteral("connecting");
0050     case Bolt::Status::Connected:
0051         return QStringLiteral("connected");
0052     case Bolt::Status::Authorizing:
0053         return QStringLiteral("authorizing");
0054     case Bolt::Status::Authorized:
0055         return QStringLiteral("authorized");
0056     case Bolt::Status::AuthError:
0057         return QStringLiteral("auth-error");
0058     }
0059     Q_UNREACHABLE();
0060     return {};
0061 }
0062 
0063 Bolt::AuthFlags Bolt::authFlagsFromString(const QString &str)
0064 {
0065 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
0066     const auto splitRef = str.splitRef(QStringLiteral("|"));
0067 #else
0068     const auto splitRef = str.split(QStringLiteral("|"));
0069 #endif
0070     Bolt::AuthFlags outFlags = Bolt::Auth::None;
0071     for (const auto &flag : splitRef) {
0072         const auto f = flag.trimmed();
0073         if (f == QLatin1String("none")) {
0074             outFlags |= Bolt::Auth::None;
0075         } else if (f == QLatin1String("nopcie")) {
0076             outFlags |= Bolt::Auth::NoPCIE;
0077         } else if (f == QLatin1String("secure")) {
0078             outFlags |= Bolt::Auth::Secure;
0079         } else if (f == QLatin1String("nokey")) {
0080             outFlags |= Bolt::Auth::NoKey;
0081         } else if (f == QLatin1String("boot")) {
0082             outFlags |= Bolt::Auth::Boot;
0083         } else {
0084             qCCritical(log_libkbolt, "Unknown AuthFlags enum value '%s'", qUtf8Printable(str));
0085             Q_ASSERT(false);
0086             return Bolt::Auth::None;
0087         }
0088     }
0089     return outFlags;
0090 }
0091 
0092 QString Bolt::authFlagsToString(AuthFlags flags)
0093 {
0094     QStringList str;
0095     if (flags == AuthFlags(Bolt::Auth::None)) {
0096         return QStringLiteral("none");
0097     }
0098     if (flags & Bolt::Auth::NoPCIE) {
0099         str.push_back(QStringLiteral("nopcie"));
0100     }
0101     if (flags & Bolt::Auth::Secure) {
0102         str.push_back(QStringLiteral("secure"));
0103     }
0104     if (flags & Bolt::Auth::NoKey) {
0105         str.push_back(QStringLiteral("nokey"));
0106     }
0107     if (flags & Bolt::Auth::Boot) {
0108         str.push_back(QStringLiteral("boot"));
0109     }
0110 
0111     return str.join(QStringLiteral(" | "));
0112 }
0113 
0114 Bolt::KeyState Bolt::keyStateFromString(const QString &str)
0115 {
0116     if (str == QLatin1String("unknown")) {
0117         return Bolt::KeyState::Unknown;
0118     } else if (str == QLatin1String("missing")) {
0119         return Bolt::KeyState::Missing;
0120     } else if (str == QLatin1String("have")) {
0121         return Bolt::KeyState::Have;
0122     } else if (str == QLatin1String("new")) {
0123         return Bolt::KeyState::New;
0124     } else {
0125         qCCritical(log_libkbolt, "Unknown KeyState enum value '%s'", qUtf8Printable(str));
0126         Q_ASSERT(false);
0127         return Bolt::KeyState::Unknown;
0128     }
0129 }
0130 
0131 Bolt::Policy Bolt::policyFromString(const QString &str)
0132 {
0133     if (str == QLatin1String("unknown")) {
0134         return Bolt::Policy::Unknown;
0135     } else if (str == QLatin1String("default")) {
0136         return Bolt::Policy::Default;
0137     } else if (str == QLatin1String("manual")) {
0138         return Bolt::Policy::Manual;
0139     } else if (str == QLatin1String("auto")) {
0140         return Bolt::Policy::Auto;
0141     } else {
0142         qCCritical(log_libkbolt, "Unknown Policy enum value '%s'", qUtf8Printable(str));
0143         Q_ASSERT(false);
0144         return Bolt::Policy::Unknown;
0145     }
0146 }
0147 
0148 QString Bolt::policyToString(Bolt::Policy policy)
0149 {
0150     switch (policy) {
0151     case Policy::Unknown:
0152         return QStringLiteral("unknown");
0153     case Policy::Auto:
0154         return QStringLiteral("auto");
0155     case Policy::Default:
0156         return QStringLiteral("default");
0157     case Policy::Manual:
0158         return QStringLiteral("manual");
0159     }
0160 
0161     Q_UNREACHABLE();
0162     return {};
0163 }
0164 
0165 Bolt::Type Bolt::typeFromString(const QString &str)
0166 {
0167     if (str == QLatin1String("unknown")) {
0168         return Bolt::Type::Unknown;
0169     } else if (str == QLatin1String("host")) {
0170         return Bolt::Type::Host;
0171     } else if (str == QLatin1String("peripheral")) {
0172         return Bolt::Type::Peripheral;
0173     } else {
0174         qCCritical(log_libkbolt, "Unknown Type enum value '%s'", qUtf8Printable(str));
0175         Q_ASSERT(false);
0176         return Bolt::Type::Unknown;
0177     }
0178 }
0179 
0180 Bolt::AuthMode Bolt::authModeFromString(const QString &str)
0181 {
0182     if (str == QLatin1String("disabled")) {
0183         return Bolt::AuthMode::Disabled;
0184     } else if (str == QLatin1String("enabled")) {
0185         return Bolt::AuthMode::Enabled;
0186     } else {
0187         qCCritical(log_libkbolt, "Unknown AuthMode enum value '%s'", qUtf8Printable(str));
0188         Q_ASSERT(false);
0189         return Bolt::AuthMode::Disabled;
0190     }
0191 }
0192 
0193 QString Bolt::authModeToString(Bolt::AuthMode authMode)
0194 {
0195     switch (authMode) {
0196     case Bolt::AuthMode::Enabled:
0197         return QStringLiteral("enabled");
0198     case Bolt::AuthMode::Disabled:
0199         return QStringLiteral("disabled");
0200     }
0201 
0202     Q_UNREACHABLE();
0203     return {};
0204 }
0205 
0206 Bolt::Security Bolt::securityFromString(const QString &str)
0207 {
0208     if (str == QLatin1String("unknown")) {
0209         return Bolt::Security::Unknown;
0210     } else if (str == QLatin1String("none")) {
0211         return Bolt::Security::None;
0212     } else if (str == QLatin1String("dponly")) {
0213         return Bolt::Security::DPOnly;
0214     } else if (str == QLatin1String("user")) {
0215         return Bolt::Security::User;
0216     } else if (str == QLatin1String("secure")) {
0217         return Bolt::Security::Secure;
0218     } else if (str == QLatin1String("usbonly")) {
0219         return Bolt::Security::USBOnly;
0220     } else {
0221         qCCritical(log_libkbolt, "Unknown Security enum value '%s'", qUtf8Printable(str));
0222         Q_ASSERT(false);
0223         return Bolt::Security::Unknown;
0224     }
0225 }