// skia/public/mojom/blend_mode.mojom-shared.cc is auto generated by mojom_bindings_generator.py, do not edit

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

#include "skia/public/mojom/blend_mode.mojom-shared.h"
#include <ostream>
#include <utility>
#include "base/strings/stringprintf.h"
#include "mojo/public/cpp/bindings/lib/validate_params.h"
#include "mojo/public/cpp/bindings/lib/validation_errors.h"
#include "mojo/public/cpp/bindings/lib/validation_util.h"
#include "third_party/perfetto/include/perfetto/tracing/traced_value.h"

#include "skia/public/mojom/blend_mode.mojom-params-data.h"
namespace skia {
namespace mojom {

NOINLINE static const char* BlendModeToStringHelper(BlendMode value) {
  // Defined in a helper function to ensure that Clang generates a lookup table.
  switch(value) {
    case BlendMode::kClear:
      return "kClear";
    case BlendMode::kSrc:
      return "kSrc";
    case BlendMode::kDst:
      return "kDst";
    case BlendMode::kSrcOver:
      return "kSrcOver";
    case BlendMode::kDstOver:
      return "kDstOver";
    case BlendMode::kSrcIn:
      return "kSrcIn";
    case BlendMode::kDstIn:
      return "kDstIn";
    case BlendMode::kSrcOut:
      return "kSrcOut";
    case BlendMode::kDstOut:
      return "kDstOut";
    case BlendMode::kSrcATop:
      return "kSrcATop";
    case BlendMode::kDstATop:
      return "kDstATop";
    case BlendMode::kXor:
      return "kXor";
    case BlendMode::kPlus:
      return "kPlus";
    case BlendMode::kModulate:
      return "kModulate";
    case BlendMode::kScreen:
      return "kScreen";
    case BlendMode::kOverlay:
      return "kOverlay";
    case BlendMode::kDarken:
      return "kDarken";
    case BlendMode::kLighten:
      return "kLighten";
    case BlendMode::kColorDodge:
      return "kColorDodge";
    case BlendMode::kColorBurn:
      return "kColorBurn";
    case BlendMode::kHardLight:
      return "kHardLight";
    case BlendMode::kSoftLight:
      return "kSoftLight";
    case BlendMode::kDifference:
      return "kDifference";
    case BlendMode::kExclusion:
      return "kExclusion";
    case BlendMode::kMultiply:
      return "kMultiply";
    case BlendMode::kHue:
      return "kHue";
    case BlendMode::kSaturation:
      return "kSaturation";
    case BlendMode::kColor:
      return "kColor";
    case BlendMode::kLuminosity:
      return "kLuminosity";
    default:
      return nullptr;
  }
}

std::string BlendModeToString(BlendMode value) {
  const char *str = BlendModeToStringHelper(value);
  if (!str) {
    return base::StringPrintf("Unknown BlendMode value: %i", static_cast<int32_t>(value));
  }
  return str;
}

std::ostream& operator<<(std::ostream& os, BlendMode value) {
  return os << BlendModeToString(value);
}

namespace internal {

}  // namespace internal
}  // namespace mojom
}  // namespace skia

namespace perfetto {

// static
void TraceFormatTraits<::skia::mojom::BlendMode>::WriteIntoTrace(
   perfetto::TracedValue context, ::skia::mojom::BlendMode value) {
  return std::move(context).WriteString(::skia::mojom::BlendModeToString(value));
}

} // namespace perfetto