blob: c79568373b8fbbca30b08f535a97f6f8e2578cf8 [file] [log] [blame]
// Copyright 2018 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_MOJOM_IME_MOJOM_TRAITS_H_
#define COMPONENTS_ARC_MOJOM_IME_MOJOM_TRAITS_H_
#include "components/arc/mojom/ime.mojom-shared.h"
#include "ui/base/ime/text_input_type.h"
namespace mojo {
template <>
struct EnumTraits<arc::mojom::TextInputType, ui::TextInputType> {
using MojoType = arc::mojom::TextInputType;
// The two enum types are similar, but intentionally made not identical.
// We cannot force them to be in sync. If we do, updates in ui::TextInputType
// must always be propagated to the mojom::TextInputType mojo definition in
// ARC container side, which is in a different repository than Chromium.
// We don't want such dependency.
//
// That's why we need a lengthy switch statement instead of static_cast
// guarded by a static assert on the two enums to be in sync.
static MojoType ToMojom(ui::TextInputType input) {
switch (input) {
case ui::TEXT_INPUT_TYPE_NONE:
return MojoType::NONE;
case ui::TEXT_INPUT_TYPE_TEXT:
return MojoType::TEXT;
case ui::TEXT_INPUT_TYPE_PASSWORD:
return MojoType::PASSWORD;
case ui::TEXT_INPUT_TYPE_SEARCH:
return MojoType::SEARCH;
case ui::TEXT_INPUT_TYPE_EMAIL:
return MojoType::EMAIL;
case ui::TEXT_INPUT_TYPE_NUMBER:
return MojoType::NUMBER;
case ui::TEXT_INPUT_TYPE_TELEPHONE:
return MojoType::TELEPHONE;
case ui::TEXT_INPUT_TYPE_URL:
return MojoType::URL;
case ui::TEXT_INPUT_TYPE_DATE:
return MojoType::DATE;
case ui::TEXT_INPUT_TYPE_DATE_TIME:
return MojoType::DATETIME;
case ui::TEXT_INPUT_TYPE_DATE_TIME_LOCAL:
return MojoType::DATETIME;
case ui::TEXT_INPUT_TYPE_MONTH:
return MojoType::DATE;
case ui::TEXT_INPUT_TYPE_TIME:
return MojoType::TIME;
case ui::TEXT_INPUT_TYPE_WEEK:
return MojoType::DATE;
case ui::TEXT_INPUT_TYPE_TEXT_AREA:
return MojoType::TEXT;
case ui::TEXT_INPUT_TYPE_CONTENT_EDITABLE:
return MojoType::TEXT;
case ui::TEXT_INPUT_TYPE_DATE_TIME_FIELD:
return MojoType::DATETIME;
}
NOTREACHED();
return MojoType::TEXT;
}
static bool FromMojom(MojoType input, ui::TextInputType* out) {
switch (input) {
case MojoType::NONE:
*out = ui::TEXT_INPUT_TYPE_NONE;
return true;
case MojoType::TEXT:
*out = ui::TEXT_INPUT_TYPE_TEXT;
return true;
case MojoType::PASSWORD:
*out = ui::TEXT_INPUT_TYPE_PASSWORD;
return true;
case MojoType::SEARCH:
*out = ui::TEXT_INPUT_TYPE_SEARCH;
return true;
case MojoType::EMAIL:
*out = ui::TEXT_INPUT_TYPE_EMAIL;
return true;
case MojoType::NUMBER:
*out = ui::TEXT_INPUT_TYPE_NUMBER;
return true;
case MojoType::TELEPHONE:
*out = ui::TEXT_INPUT_TYPE_TELEPHONE;
return true;
case MojoType::URL:
*out = ui::TEXT_INPUT_TYPE_URL;
return true;
case MojoType::DATE:
*out = ui::TEXT_INPUT_TYPE_DATE;
return true;
case MojoType::TIME:
*out = ui::TEXT_INPUT_TYPE_TIME;
return true;
case MojoType::DATETIME:
*out = ui::TEXT_INPUT_TYPE_DATE_TIME_LOCAL;
return true;
}
NOTREACHED();
return false;
}
};
} // namespace mojo
#endif // COMPONENTS_ARC_MOJOM_IME_MOJOM_TRAITS_H_