910e62b5创建于 1月15日历史提交
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMECAST_BROWSER_MOJOM_WEB_MOJOM_TRAITS_H_
#define CHROMECAST_BROWSER_MOJOM_WEB_MOJOM_TRAITS_H_

#include "chromecast/browser/mojom/cast_web_contents.mojom.h"
#include "chromecast/browser/web_types.h"
#include "mojo/public/cpp/bindings/enum_traits.h"

#define CASE_TRANSLATE_ENUM(x) \
  case InputType::x:           \
    return OutputType::x;

#define CASE_TRANSLATE_MOJOM_ENUM(x) \
  case InputType::x:                 \
    *out = OutputType::x;            \
    return true;

namespace mojo {

template <>
struct EnumTraits<chromecast::mojom::PageState, chromecast::PageState> {
  static chromecast::mojom::PageState ToMojom(chromecast::PageState state) {
    using InputType = chromecast::PageState;
    using OutputType = chromecast::mojom::PageState;
    switch (state) {
      CASE_TRANSLATE_ENUM(IDLE);
      CASE_TRANSLATE_ENUM(LOADING);
      CASE_TRANSLATE_ENUM(LOADED);
      CASE_TRANSLATE_ENUM(CLOSED);
      CASE_TRANSLATE_ENUM(DESTROYED);
      CASE_TRANSLATE_ENUM(ERROR);
    }
    NOTREACHED();
  }

  static bool FromMojom(chromecast::mojom::PageState state,
                        chromecast::PageState* out) {
    using InputType = chromecast::mojom::PageState;
    using OutputType = chromecast::PageState;
    switch (state) {
      CASE_TRANSLATE_MOJOM_ENUM(IDLE);
      CASE_TRANSLATE_MOJOM_ENUM(LOADING);
      CASE_TRANSLATE_MOJOM_ENUM(LOADED);
      CASE_TRANSLATE_MOJOM_ENUM(CLOSED);
      CASE_TRANSLATE_MOJOM_ENUM(DESTROYED);
      CASE_TRANSLATE_MOJOM_ENUM(ERROR);
    }
    NOTREACHED();
  }
};
}  // namespace mojo

#endif  // CHROMECAST_BROWSER_MOJOM_WEB_MOJOM_TRAITS_H_