| // 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(); | 
 |     return chromecast::mojom::PageState::IDLE; | 
 |   } | 
 |  | 
 |   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(); | 
 |     *out = chromecast::PageState::IDLE; | 
 |     return false; | 
 |   } | 
 | }; | 
 | }  // namespace mojo | 
 |  | 
 | #endif  // CHROMECAST_BROWSER_MOJOM_WEB_MOJOM_TRAITS_H_ |