| // Copyright 2024 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "net-base/technology.h" |
| |
| #include <optional> |
| #include <string_view> |
| |
| #include <base/containers/fixed_flat_map.h> |
| |
| namespace net_base { |
| namespace { |
| constexpr std::string_view kCellularString = "cellular"; |
| constexpr std::string_view kEthernetString = "ethernet"; |
| constexpr std::string_view kVPNString = "vpn"; |
| constexpr std::string_view kWiFiString = "wifi"; |
| constexpr std::string_view kWiFiDirectString = "wifi_direct"; |
| } // namespace |
| |
| std::string_view ToString(Technology technology) { |
| switch (technology) { |
| case Technology::kCellular: |
| return kCellularString; |
| case Technology::kEthernet: |
| return kEthernetString; |
| case Technology::kVPN: |
| return kVPNString; |
| case Technology::kWiFi: |
| return kWiFiString; |
| case Technology::kWiFiDirect: |
| return kWiFiDirectString; |
| } |
| } |
| |
| std::optional<Technology> FromString(std::string_view str) { |
| static constexpr auto kStringToTechnology = |
| base::MakeFixedFlatMap<std::string_view, Technology>({ |
| {kCellularString, Technology::kCellular}, |
| {kEthernetString, Technology::kEthernet}, |
| {kVPNString, Technology::kVPN}, |
| {kWiFiString, Technology::kWiFi}, |
| {kWiFiDirectString, Technology::kWiFiDirect}, |
| }); |
| |
| const auto iter = kStringToTechnology.find(str); |
| if (iter == kStringToTechnology.end()) { |
| return std::nullopt; |
| } |
| return iter->second; |
| } |
| |
| std::ostream& operator<<(std::ostream& os, Technology technology) { |
| os << ToString(technology); |
| return os; |
| } |
| |
| } // namespace net_base |