chromium/printing/backend/mojom/print_backend_mojom_traits.h

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

#ifndef PRINTING_BACKEND_MOJOM_PRINT_BACKEND_MOJOM_TRAITS_H_
#define PRINTING_BACKEND_MOJOM_PRINT_BACKEND_MOJOM_TRAITS_H_

#include <string>
#include <vector>

#include "build/build_config.h"
#include "printing/backend/mojom/print_backend.mojom-shared.h"
#include "printing/backend/print_backend.h"
#include "printing/mojom/print.mojom.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/size.h"

namespace mojo {

template <>
struct StructTraits<printing::mojom::PrinterBasicInfoDataView,
                    printing::PrinterBasicInfo> {};

template <>
struct StructTraits<printing::mojom::PaperDataView,
                    printing::PrinterSemanticCapsAndDefaults::Paper> {};

template <>
struct StructTraits<printing::mojom::MediaTypeDataView,
                    printing::PrinterSemanticCapsAndDefaults::MediaType> {};

#if BUILDFLAG(IS_CHROMEOS)
template <>
struct EnumTraits<printing::mojom::AdvancedCapabilityType,
                  ::printing::AdvancedCapability::Type> {
  static printing::mojom::AdvancedCapabilityType ToMojom(
      ::printing::AdvancedCapability::Type input);
  static bool FromMojom(printing::mojom::AdvancedCapabilityType input,
                        ::printing::AdvancedCapability::Type* output);
};

template <>
struct StructTraits<printing::mojom::AdvancedCapabilityValueDataView,
                    ::printing::AdvancedCapabilityValue> {
  static const std::string& name(const ::printing::AdvancedCapabilityValue& v) {
    return v.name;
  }
  static const std::string& display_name(
      const ::printing::AdvancedCapabilityValue& v) {
    return v.display_name;
  }

  static bool Read(printing::mojom::AdvancedCapabilityValueDataView data,
                   ::printing::AdvancedCapabilityValue* out);
};

template <>
struct StructTraits<printing::mojom::AdvancedCapabilityDataView,
                    ::printing::AdvancedCapability> {
  static const std::string& name(const ::printing::AdvancedCapability& c) {
    return c.name;
  }
  static const std::string& display_name(
      const ::printing::AdvancedCapability& c) {
    return c.display_name;
  }
  static ::printing::AdvancedCapability::Type type(
      const ::printing::AdvancedCapability& c) {
    return c.type;
  }
  static const std::string& default_value(
      const ::printing::AdvancedCapability& c) {
    return c.default_value;
  }
  static const std::vector<::printing::AdvancedCapabilityValue>& values(
      const ::printing::AdvancedCapability& c) {
    return c.values;
  }

  static bool Read(printing::mojom::AdvancedCapabilityDataView data,
                   ::printing::AdvancedCapability* out);
};
#endif  // BUILDFLAG(IS_CHROMEOS)

#if BUILDFLAG(IS_WIN)
template <>
struct StructTraits<printing::mojom::PageOutputQualityAttributeDataView,
                    ::printing::PageOutputQualityAttribute> {
  static const std::string& display_name(
      const ::printing::PageOutputQualityAttribute& p) {
    return p.display_name;
  }

  static const std::string& name(
      const ::printing::PageOutputQualityAttribute& p) {
    return p.name;
  }

  static bool Read(printing::mojom::PageOutputQualityAttributeDataView data,
                   printing::PageOutputQualityAttribute* out);
};

template <>
struct StructTraits<printing::mojom::PageOutputQualityDataView,
                    printing::PageOutputQuality> {
  static const std::vector<::printing::PageOutputQualityAttribute>& qualities(
      const ::printing::PageOutputQuality& p) {
    return p.qualities;
  }

  static const std::optional<std::string>& default_quality(
      const ::printing::PageOutputQuality& p) {
    return p.default_quality;
  }

  static bool Read(printing::mojom::PageOutputQualityDataView data,
                   printing::PageOutputQuality* out);
};
#endif  // BUILDFLAG(IS_WIN)

template <>
struct StructTraits<printing::mojom::PrinterSemanticCapsAndDefaultsDataView,
                    printing::PrinterSemanticCapsAndDefaults> {};

}  // namespace mojo

#endif  // PRINTING_BACKEND_MOJOM_PRINT_BACKEND_MOJOM_TRAITS_H_