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

#ifndef COMPONENTS_ARC_COMMON_APP_STRUCT_TRAITS_H_
#define COMPONENTS_ARC_COMMON_APP_STRUCT_TRAITS_H_

#include "components/arc/app/arc_playstore_search_request_state.h"
#include "components/arc/common/app.mojom-shared.h"

namespace mojo {

template <>
struct EnumTraits<arc::mojom::AppDiscoveryRequestState,
                  arc::ArcPlayStoreSearchRequestState> {
  using ArcState = arc::ArcPlayStoreSearchRequestState;
  using MojoState = arc::mojom::AppDiscoveryRequestState;

  static MojoState ToMojom(ArcState input) {
    switch (input) {
      case ArcState::SUCCESS:
        return MojoState::SUCCESS;
      case ArcState::CANCELED:
        return MojoState::CANCELED;
      case ArcState::ERROR_DEPRECATED:
        return MojoState::ERROR_DEPRECATED;
      case ArcState::PLAY_STORE_PROXY_NOT_AVAILABLE:
        return MojoState::PLAY_STORE_PROXY_NOT_AVAILABLE;
      case ArcState::FAILED_TO_CALL_CANCEL:
        return MojoState::FAILED_TO_CALL_CANCEL;
      case ArcState::FAILED_TO_CALL_FINDAPPS:
        return MojoState::FAILED_TO_CALL_FINDAPPS;
      case ArcState::REQUEST_HAS_INVALID_PARAMS:
        return MojoState::REQUEST_HAS_INVALID_PARAMS;
      case ArcState::REQUEST_TIMEOUT:
        return MojoState::REQUEST_TIMEOUT;
      case ArcState::PHONESKY_RESULT_REQUEST_CODE_UNMATCHED:
        return MojoState::PHONESKY_RESULT_REQUEST_CODE_UNMATCHED;
      case ArcState::PHONESKY_RESULT_SESSION_ID_UNMATCHED:
        return MojoState::PHONESKY_RESULT_SESSION_ID_UNMATCHED;
      case ArcState::PHONESKY_REQUEST_REQUEST_CODE_UNMATCHED:
        return MojoState::PHONESKY_REQUEST_REQUEST_CODE_UNMATCHED;
      case ArcState::PHONESKY_APP_DISCOVERY_NOT_AVAILABLE:
        return MojoState::PHONESKY_APP_DISCOVERY_NOT_AVAILABLE;
      case ArcState::PHONESKY_VERSION_NOT_SUPPORTED:
        return MojoState::PHONESKY_VERSION_NOT_SUPPORTED;
      case ArcState::PHONESKY_UNEXPECTED_EXCEPTION:
        return MojoState::PHONESKY_UNEXPECTED_EXCEPTION;
      case ArcState::PHONESKY_MALFORMED_QUERY:
        return MojoState::PHONESKY_MALFORMED_QUERY;
      case ArcState::PHONESKY_INTERNAL_ERROR:
        return MojoState::PHONESKY_INTERNAL_ERROR;
      case ArcState::PHONESKY_RESULT_INVALID_DATA:
        return MojoState::PHONESKY_RESULT_INVALID_DATA;
      case ArcState::CHROME_GOT_INVALID_RESULT:
      case ArcState::STATE_COUNT:
        break;
    }
    NOTREACHED();
    return MojoState::SUCCESS;
  }

  static bool FromMojom(MojoState input, ArcState* out) {
    switch (input) {
      case MojoState::SUCCESS:
        *out = ArcState::SUCCESS;
        return true;
      case MojoState::CANCELED:
        *out = ArcState::CANCELED;
        return true;
      case MojoState::ERROR_DEPRECATED:
        *out = ArcState::ERROR_DEPRECATED;
        return true;
      case MojoState::PLAY_STORE_PROXY_NOT_AVAILABLE:
        *out = ArcState::PLAY_STORE_PROXY_NOT_AVAILABLE;
        return true;
      case MojoState::FAILED_TO_CALL_CANCEL:
        *out = ArcState::FAILED_TO_CALL_CANCEL;
        return true;
      case MojoState::FAILED_TO_CALL_FINDAPPS:
        *out = ArcState::FAILED_TO_CALL_FINDAPPS;
        return true;
      case MojoState::REQUEST_HAS_INVALID_PARAMS:
        *out = ArcState::REQUEST_HAS_INVALID_PARAMS;
        return true;
      case MojoState::REQUEST_TIMEOUT:
        *out = ArcState::REQUEST_TIMEOUT;
        return true;
      case MojoState::PHONESKY_RESULT_REQUEST_CODE_UNMATCHED:
        return true;
        *out = ArcState::PHONESKY_RESULT_REQUEST_CODE_UNMATCHED;
        return true;
      case MojoState::PHONESKY_RESULT_SESSION_ID_UNMATCHED:
        *out = ArcState::PHONESKY_RESULT_SESSION_ID_UNMATCHED;
        return true;
      case MojoState::PHONESKY_REQUEST_REQUEST_CODE_UNMATCHED:
        *out = ArcState::PHONESKY_REQUEST_REQUEST_CODE_UNMATCHED;
        return true;
      case MojoState::PHONESKY_APP_DISCOVERY_NOT_AVAILABLE:
        *out = ArcState::PHONESKY_APP_DISCOVERY_NOT_AVAILABLE;
        return true;
      case MojoState::PHONESKY_VERSION_NOT_SUPPORTED:
        *out = ArcState::PHONESKY_VERSION_NOT_SUPPORTED;
        return true;
      case MojoState::PHONESKY_UNEXPECTED_EXCEPTION:
        *out = ArcState::PHONESKY_UNEXPECTED_EXCEPTION;
        return true;
      case MojoState::PHONESKY_MALFORMED_QUERY:
        *out = ArcState::PHONESKY_MALFORMED_QUERY;
        return true;
      case MojoState::PHONESKY_INTERNAL_ERROR:
        *out = ArcState::PHONESKY_INTERNAL_ERROR;
        return true;
      case MojoState::PHONESKY_RESULT_INVALID_DATA:
        *out = ArcState::PHONESKY_RESULT_INVALID_DATA;
        return true;
    }
    NOTREACHED();
    return false;
  }
};

}  // namespace mojo

#endif  // COMPONENTS_ARC_COMMON_APP_STRUCT_TRAITS_H_
