chromium/chromeos/ash/components/multidevice/software_feature.cc

// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chromeos/ash/components/multidevice/software_feature.h"

#include "base/notreached.h"

namespace ash::multidevice {

SoftwareFeature FromCryptAuthFeature(
    cryptauth::SoftwareFeature cryptauth_feature) {
  switch (cryptauth_feature) {
    case cryptauth::SoftwareFeature::BETTER_TOGETHER_HOST:
      return SoftwareFeature::kBetterTogetherHost;
    case cryptauth::SoftwareFeature::BETTER_TOGETHER_CLIENT:
      return SoftwareFeature::kBetterTogetherClient;
    case cryptauth::SoftwareFeature::EASY_UNLOCK_HOST:
      return SoftwareFeature::kSmartLockHost;
    case cryptauth::SoftwareFeature::EASY_UNLOCK_CLIENT:
      return SoftwareFeature::kSmartLockClient;
    case cryptauth::SoftwareFeature::MAGIC_TETHER_HOST:
      return SoftwareFeature::kInstantTetheringHost;
    case cryptauth::SoftwareFeature::MAGIC_TETHER_CLIENT:
      return SoftwareFeature::kInstantTetheringClient;
    case cryptauth::SoftwareFeature::SMS_CONNECT_HOST:
      return SoftwareFeature::kMessagesForWebHost;
    case cryptauth::SoftwareFeature::SMS_CONNECT_CLIENT:
      return SoftwareFeature::kMessagesForWebClient;
    case cryptauth::SoftwareFeature::PHONE_HUB_HOST:
      return SoftwareFeature::kPhoneHubHost;
    case cryptauth::SoftwareFeature::PHONE_HUB_CLIENT:
      return SoftwareFeature::kPhoneHubClient;
    case cryptauth::SoftwareFeature::WIFI_SYNC_HOST:
      return SoftwareFeature::kWifiSyncHost;
    case cryptauth::SoftwareFeature::WIFI_SYNC_CLIENT:
      return SoftwareFeature::kWifiSyncClient;
    case cryptauth::SoftwareFeature::ECHE_HOST:
      return SoftwareFeature::kEcheHost;
    case cryptauth::SoftwareFeature::ECHE_CLIENT:
      return SoftwareFeature::kEcheClient;
    case cryptauth::SoftwareFeature::PHONE_HUB_CAMERA_ROLL_HOST:
      return SoftwareFeature::kPhoneHubCameraRollHost;
    case cryptauth::SoftwareFeature::PHONE_HUB_CAMERA_ROLL_CLIENT:
      return SoftwareFeature::kPhoneHubCameraRollClient;
    case cryptauth::SoftwareFeature::UNKNOWN_FEATURE:
      NOTREACHED_IN_MIGRATION();
  }

  NOTREACHED_IN_MIGRATION();
  return SoftwareFeature::kBetterTogetherHost;
}

cryptauth::SoftwareFeature ToCryptAuthFeature(
    SoftwareFeature multidevice_feature) {
  // Note: No default case needed since SoftwareFeature is an enum class.
  switch (multidevice_feature) {
    case SoftwareFeature::kBetterTogetherHost:
      return cryptauth::SoftwareFeature::BETTER_TOGETHER_HOST;
    case SoftwareFeature::kBetterTogetherClient:
      return cryptauth::SoftwareFeature::BETTER_TOGETHER_CLIENT;
    case SoftwareFeature::kSmartLockHost:
      return cryptauth::SoftwareFeature::EASY_UNLOCK_HOST;
    case SoftwareFeature::kSmartLockClient:
      return cryptauth::SoftwareFeature::EASY_UNLOCK_CLIENT;
    case SoftwareFeature::kInstantTetheringHost:
      return cryptauth::SoftwareFeature::MAGIC_TETHER_HOST;
    case SoftwareFeature::kInstantTetheringClient:
      return cryptauth::SoftwareFeature::MAGIC_TETHER_CLIENT;
    case SoftwareFeature::kMessagesForWebHost:
      return cryptauth::SoftwareFeature::SMS_CONNECT_HOST;
    case SoftwareFeature::kMessagesForWebClient:
      return cryptauth::SoftwareFeature::SMS_CONNECT_CLIENT;
    case SoftwareFeature::kPhoneHubHost:
      return cryptauth::SoftwareFeature::PHONE_HUB_HOST;
    case SoftwareFeature::kPhoneHubClient:
      return cryptauth::SoftwareFeature::PHONE_HUB_CLIENT;
    case SoftwareFeature::kWifiSyncHost:
      return cryptauth::SoftwareFeature::WIFI_SYNC_HOST;
    case SoftwareFeature::kWifiSyncClient:
      return cryptauth::SoftwareFeature::WIFI_SYNC_CLIENT;
    case SoftwareFeature::kEcheHost:
      return cryptauth::SoftwareFeature::ECHE_HOST;
    case SoftwareFeature::kEcheClient:
      return cryptauth::SoftwareFeature::ECHE_CLIENT;
    case SoftwareFeature::kPhoneHubCameraRollHost:
      return cryptauth::SoftwareFeature::PHONE_HUB_CAMERA_ROLL_HOST;
    case SoftwareFeature::kPhoneHubCameraRollClient:
      return cryptauth::SoftwareFeature::PHONE_HUB_CAMERA_ROLL_CLIENT;
  }

  NOTREACHED_IN_MIGRATION();
  return cryptauth::SoftwareFeature::BETTER_TOGETHER_HOST;
}

std::ostream& operator<<(std::ostream& stream, const SoftwareFeature& feature) {
  switch (feature) {
    case SoftwareFeature::kBetterTogetherHost:
      stream << "[Better Together host]";
      break;
    case SoftwareFeature::kBetterTogetherClient:
      stream << "[Better Together client]";
      break;
    case SoftwareFeature::kSmartLockHost:
      stream << "[Smart Lock host]";
      break;
    case SoftwareFeature::kSmartLockClient:
      stream << "[Smart Lock client]";
      break;
    case SoftwareFeature::kInstantTetheringHost:
      stream << "[Instant Tethering host]";
      break;
    case SoftwareFeature::kInstantTetheringClient:
      stream << "[Instant Tethering client]";
      break;
    case SoftwareFeature::kMessagesForWebHost:
      stream << "[Messages for Web host]";
      break;
    case SoftwareFeature::kMessagesForWebClient:
      stream << "[Messages for Web client]";
      break;
    case SoftwareFeature::kPhoneHubHost:
      stream << "[Phone Hub host]";
      break;
    case SoftwareFeature::kPhoneHubClient:
      stream << "[Phone Hub client]";
      break;
    case SoftwareFeature::kWifiSyncHost:
      stream << "[Wifi Sync host]";
      break;
    case SoftwareFeature::kWifiSyncClient:
      stream << "[Wifi Sync client]";
      break;
    case SoftwareFeature::kEcheHost:
      stream << "[Eche host]";
      break;
    case SoftwareFeature::kEcheClient:
      stream << "[Eche client]";
      break;
    case SoftwareFeature::kPhoneHubCameraRollHost:
      stream << "[Phone Hub Camera Roll host]";
      break;
    case SoftwareFeature::kPhoneHubCameraRollClient:
      stream << "[Phone Hub Camera Roll client]";
      break;
  }
  return stream;
}

}  // namespace ash::multidevice