// Copyright 2019 The Chromium OS 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 LIBIPPROTO_IPP_COLLECTIONS_H_
#define LIBIPPROTO_IPP_COLLECTIONS_H_

#include <string>
#include <vector>

#include "libipproto/ipp_attribute.h"
#include "libipproto/ipp_enums.h"
#include "libipproto/ipp_export.h"
#include "libipproto/ipp_package.h"

// This file contains definition of classes corresponding to supported IPP
// collection attributes. See ipp.h for more details.
// This file was generated from IPP schema based on the following sources:
// * [rfc8011]
// * [CUPS Implementation of IPP] at https://www.cups.org/doc/spec-ipp.html
// * [IPP registry] at https://www.pwg.org/ipp/ipp-registrations.xml

namespace ipp {
struct IPP_EXPORT C_job_constraints_supported : public Collection {
  SingleValue<StringWithLanguage> resolver_name{AttrName::resolver_name,
                                                AttrType::name};
  std::vector<Attribute*> GetKnownAttributes() override;
};
struct IPP_EXPORT C_job_finishings_col_actual : public Collection {
  struct C_media_size : public Collection {
    SingleValue<int> x_dimension{AttrName::x_dimension, AttrType::integer};
    SingleValue<int> y_dimension{AttrName::y_dimension, AttrType::integer};
    std::vector<Attribute*> GetKnownAttributes() override;
  };
  SingleValue<E_media_back_coating> media_back_coating{
      AttrName::media_back_coating, AttrType::keyword};
  SingleValue<int> media_bottom_margin{AttrName::media_bottom_margin,
                                       AttrType::integer};
  SingleValue<E_media_color> media_color{AttrName::media_color,
                                         AttrType::keyword};
  SingleValue<E_media_front_coating> media_front_coating{
      AttrName::media_front_coating, AttrType::keyword};
  SingleValue<E_media_grain> media_grain{AttrName::media_grain,
                                         AttrType::keyword};
  SingleValue<int> media_hole_count{AttrName::media_hole_count,
                                    AttrType::integer};
  SingleValue<StringWithLanguage> media_info{AttrName::media_info,
                                             AttrType::text};
  SingleValue<E_media_key> media_key{AttrName::media_key, AttrType::keyword};
  SingleValue<int> media_left_margin{AttrName::media_left_margin,
                                     AttrType::integer};
  SingleValue<int> media_order_count{AttrName::media_order_count,
                                     AttrType::integer};
  SingleValue<E_media_pre_printed> media_pre_printed{
      AttrName::media_pre_printed, AttrType::keyword};
  SingleValue<E_media_recycled> media_recycled{AttrName::media_recycled,
                                               AttrType::keyword};
  SingleValue<int> media_right_margin{AttrName::media_right_margin,
                                      AttrType::integer};
  SingleCollection<C_media_size> media_size{AttrName::media_size};
  SingleValue<StringWithLanguage> media_size_name{AttrName::media_size_name,
                                                  AttrType::name};
  SingleValue<E_media_source> media_source{AttrName::media_source,
                                           AttrType::keyword};
  SingleValue<int> media_thickness{AttrName::media_thickness,
                                   AttrType::integer};
  SingleValue<E_media_tooth> media_tooth{AttrName::media_tooth,
                                         AttrType::keyword};
  SingleValue<int> media_top_margin{AttrName::media_top_margin,
                                    AttrType::integer};
  SingleValue<E_media_type> media_type{AttrName::media_type, AttrType::keyword};
  SingleValue<int> media_weight_metric{AttrName::media_weight_metric,
                                       AttrType::integer};
  std::vector<Attribute*> GetKnownAttributes() override;
};
typedef C_job_constraints_supported C_job_resolvers_supported;
struct IPP_EXPORT C_job_save_disposition : public Collection {
  struct C_save_info : public Collection {
    SingleValue<std::string> save_document_format{
        AttrName::save_document_format, AttrType::mimeMediaType};
    SingleValue<std::string> save_location{AttrName::save_location,
                                           AttrType::uri};
    SingleValue<StringWithLanguage> save_name{AttrName::save_name,
                                              AttrType::name};
    std::vector<Attribute*> GetKnownAttributes() override;
  };
  SingleValue<E_save_disposition> save_disposition{AttrName::save_disposition,
                                                   AttrType::keyword};
  SetOfCollections<C_save_info> save_info{AttrName::save_info};
  std::vector<Attribute*> GetKnownAttributes() override;
};
typedef C_job_finishings_col_actual C_media_col;
typedef C_job_finishings_col_actual C_media_col_actual;
struct IPP_EXPORT C_media_col_database : public Collection {
  struct C_media_size : public Collection {
    SingleValue<int> x_dimension{AttrName::x_dimension, AttrType::integer};
    SingleValue<int> y_dimension{AttrName::y_dimension, AttrType::integer};
    std::vector<Attribute*> GetKnownAttributes() override;
  };
  struct C_media_source_properties : public Collection {
    SingleValue<E_media_source_feed_direction> media_source_feed_direction{
        AttrName::media_source_feed_direction, AttrType::keyword};
    SingleValue<E_media_source_feed_orientation> media_source_feed_orientation{
        AttrName::media_source_feed_orientation, AttrType::enum_};
    std::vector<Attribute*> GetKnownAttributes() override;
  };
  SingleValue<E_media_back_coating> media_back_coating{
      AttrName::media_back_coating, AttrType::keyword};
  SingleValue<int> media_bottom_margin{AttrName::media_bottom_margin,
                                       AttrType::integer};
  SingleValue<E_media_color> media_color{AttrName::media_color,
                                         AttrType::keyword};
  SingleValue<E_media_front_coating> media_front_coating{
      AttrName::media_front_coating, AttrType::keyword};
  SingleValue<E_media_grain> media_grain{AttrName::media_grain,
                                         AttrType::keyword};
  SingleValue<int> media_hole_count{AttrName::media_hole_count,
                                    AttrType::integer};
  SingleValue<StringWithLanguage> media_info{AttrName::media_info,
                                             AttrType::text};
  SingleValue<E_media_key> media_key{AttrName::media_key, AttrType::keyword};
  SingleValue<int> media_left_margin{AttrName::media_left_margin,
                                     AttrType::integer};
  SingleValue<int> media_order_count{AttrName::media_order_count,
                                     AttrType::integer};
  SingleValue<E_media_pre_printed> media_pre_printed{
      AttrName::media_pre_printed, AttrType::keyword};
  SingleValue<E_media_recycled> media_recycled{AttrName::media_recycled,
                                               AttrType::keyword};
  SingleValue<int> media_right_margin{AttrName::media_right_margin,
                                      AttrType::integer};
  SingleCollection<C_media_size> media_size{AttrName::media_size};
  SingleValue<StringWithLanguage> media_size_name{AttrName::media_size_name,
                                                  AttrType::name};
  SingleValue<E_media_source> media_source{AttrName::media_source,
                                           AttrType::keyword};
  SingleCollection<C_media_source_properties> media_source_properties{
      AttrName::media_source_properties};
  SingleValue<int> media_thickness{AttrName::media_thickness,
                                   AttrType::integer};
  SingleValue<E_media_tooth> media_tooth{AttrName::media_tooth,
                                         AttrType::keyword};
  SingleValue<int> media_top_margin{AttrName::media_top_margin,
                                    AttrType::integer};
  SingleValue<E_media_type> media_type{AttrName::media_type, AttrType::keyword};
  SingleValue<int> media_weight_metric{AttrName::media_weight_metric,
                                       AttrType::integer};
  std::vector<Attribute*> GetKnownAttributes() override;
};
typedef C_job_finishings_col_actual C_media_col_default;
typedef C_media_col_database C_media_col_ready;
struct IPP_EXPORT C_media_size_supported : public Collection {
  SingleValue<RangeOfInteger> x_dimension{AttrName::x_dimension,
                                          AttrType::rangeOfInteger};
  SingleValue<RangeOfInteger> y_dimension{AttrName::y_dimension,
                                          AttrType::rangeOfInteger};
  std::vector<Attribute*> GetKnownAttributes() override;
};
struct IPP_EXPORT C_pdl_init_file : public Collection {
  SingleValue<StringWithLanguage> pdl_init_file_entry{
      AttrName::pdl_init_file_entry, AttrType::name};
  SingleValue<std::string> pdl_init_file_location{
      AttrName::pdl_init_file_location, AttrType::uri};
  SingleValue<StringWithLanguage> pdl_init_file_name{
      AttrName::pdl_init_file_name, AttrType::name};
  std::vector<Attribute*> GetKnownAttributes() override;
};
typedef C_pdl_init_file C_pdl_init_file_default;
struct IPP_EXPORT C_printer_contact_col : public Collection {
  SingleValue<StringWithLanguage> contact_name{AttrName::contact_name,
                                               AttrType::name};
  SingleValue<std::string> contact_uri{AttrName::contact_uri, AttrType::uri};
  SetOfValues<StringWithLanguage> contact_vcard{AttrName::contact_vcard,
                                                AttrType::text};
  std::vector<Attribute*> GetKnownAttributes() override;
};
struct IPP_EXPORT C_printer_icc_profiles : public Collection {
  SingleValue<StringWithLanguage> profile_name{AttrName::profile_name,
                                               AttrType::name};
  SingleValue<std::string> profile_url{AttrName::profile_url, AttrType::uri};
  std::vector<Attribute*> GetKnownAttributes() override;
};
struct IPP_EXPORT C_printer_xri_supported : public Collection {
  SingleValue<E_xri_authentication> xri_authentication{
      AttrName::xri_authentication, AttrType::keyword};
  SingleValue<E_xri_security> xri_security{AttrName::xri_security,
                                           AttrType::keyword};
  SingleValue<std::string> xri_uri{AttrName::xri_uri, AttrType::uri};
  std::vector<Attribute*> GetKnownAttributes() override;
};
struct IPP_EXPORT C_proof_print : public Collection {
  SingleValue<E_media> media{AttrName::media, AttrType::keyword};
  SingleCollection<C_media_col> media_col{AttrName::media_col};
  SingleValue<int> proof_print_copies{AttrName::proof_print_copies,
                                      AttrType::integer};
  std::vector<Attribute*> GetKnownAttributes() override;
};
typedef C_proof_print C_proof_print_default;
struct IPP_EXPORT C_separator_sheets : public Collection {
  SingleValue<E_media> media{AttrName::media, AttrType::keyword};
  SingleCollection<C_media_col> media_col{AttrName::media_col};
  SetOfValues<E_separator_sheets_type> separator_sheets_type{
      AttrName::separator_sheets_type, AttrType::keyword};
  std::vector<Attribute*> GetKnownAttributes() override;
};
typedef C_separator_sheets C_separator_sheets_actual;
typedef C_separator_sheets C_separator_sheets_default;
struct IPP_EXPORT C_cover_back : public Collection {
  SingleValue<E_cover_type> cover_type{AttrName::cover_type, AttrType::keyword};
  SingleValue<E_media> media{AttrName::media, AttrType::keyword};
  SingleCollection<C_media_col> media_col{AttrName::media_col};
  std::vector<Attribute*> GetKnownAttributes() override;
};
typedef C_cover_back C_cover_back_actual;
typedef C_cover_back C_cover_back_default;
typedef C_cover_back C_cover_front;
typedef C_cover_back C_cover_front_actual;
typedef C_cover_back C_cover_front_default;
struct IPP_EXPORT C_document_format_details_default : public Collection {
  SingleValue<std::string> document_format{AttrName::document_format,
                                           AttrType::mimeMediaType};
  SingleValue<StringWithLanguage> document_format_device_id{
      AttrName::document_format_device_id, AttrType::text};
  SingleValue<StringWithLanguage> document_format_version{
      AttrName::document_format_version, AttrType::text};
  SetOfValues<std::string> document_natural_language{
      AttrName::document_natural_language, AttrType::naturalLanguage};
  SingleValue<StringWithLanguage> document_source_application_name{
      AttrName::document_source_application_name, AttrType::name};
  SingleValue<StringWithLanguage> document_source_application_version{
      AttrName::document_source_application_version, AttrType::text};
  SingleValue<StringWithLanguage> document_source_os_name{
      AttrName::document_source_os_name, AttrType::name};
  SingleValue<StringWithLanguage> document_source_os_version{
      AttrName::document_source_os_version, AttrType::text};
  std::vector<Attribute*> GetKnownAttributes() override;
};
typedef C_document_format_details_default C_document_format_details_supplied;
struct IPP_EXPORT C_finishings_col : public Collection {
  struct C_baling : public Collection {
    SingleValue<E_baling_type> baling_type{AttrName::baling_type,
                                           AttrType::keyword};
    SingleValue<E_baling_when> baling_when{AttrName::baling_when,
                                           AttrType::keyword};
    std::vector<Attribute*> GetKnownAttributes() override;
  };
  struct C_binding : public Collection {
    SingleValue<E_binding_reference_edge> binding_reference_edge{
        AttrName::binding_reference_edge, AttrType::keyword};
    SingleValue<E_binding_type> binding_type{AttrName::binding_type,
                                             AttrType::keyword};
    std::vector<Attribute*> GetKnownAttributes() override;
  };
  struct C_coating : public Collection {
    SingleValue<E_coating_sides> coating_sides{AttrName::coating_sides,
                                               AttrType::keyword};
    SingleValue<E_coating_type> coating_type{AttrName::coating_type,
                                             AttrType::keyword};
    std::vector<Attribute*> GetKnownAttributes() override;
  };
  struct C_covering : public Collection {
    SingleValue<E_covering_name> covering_name{AttrName::covering_name,
                                               AttrType::keyword};
    std::vector<Attribute*> GetKnownAttributes() override;
  };
  struct C_folding : public Collection {
    SingleValue<E_folding_direction> folding_direction{
        AttrName::folding_direction, AttrType::keyword};
    SingleValue<int> folding_offset{AttrName::folding_offset,
                                    AttrType::integer};
    SingleValue<E_folding_reference_edge> folding_reference_edge{
        AttrName::folding_reference_edge, AttrType::keyword};
    std::vector<Attribute*> GetKnownAttributes() override;
  };
  struct C_laminating : public Collection {
    SingleValue<E_laminating_sides> laminating_sides{AttrName::laminating_sides,
                                                     AttrType::keyword};
    SingleValue<E_laminating_type> laminating_type{AttrName::laminating_type,
                                                   AttrType::keyword};
    std::vector<Attribute*> GetKnownAttributes() override;
  };
  struct C_media_size : public Collection {
    std::vector<Attribute*> GetKnownAttributes() override;
  };
  struct C_punching : public Collection {
    SetOfValues<int> punching_locations{AttrName::punching_locations,
                                        AttrType::integer};
    SingleValue<int> punching_offset{AttrName::punching_offset,
                                     AttrType::integer};
    SingleValue<E_punching_reference_edge> punching_reference_edge{
        AttrName::punching_reference_edge, AttrType::keyword};
    std::vector<Attribute*> GetKnownAttributes() override;
  };
  struct C_stitching : public Collection {
    SingleValue<int> stitching_angle{AttrName::stitching_angle,
                                     AttrType::integer};
    SetOfValues<int> stitching_locations{AttrName::stitching_locations,
                                         AttrType::integer};
    SingleValue<E_stitching_method> stitching_method{AttrName::stitching_method,
                                                     AttrType::keyword};
    SingleValue<int> stitching_offset{AttrName::stitching_offset,
                                      AttrType::integer};
    SingleValue<E_stitching_reference_edge> stitching_reference_edge{
        AttrName::stitching_reference_edge, AttrType::keyword};
    std::vector<Attribute*> GetKnownAttributes() override;
  };
  struct C_trimming : public Collection {
    SingleValue<int> trimming_offset{AttrName::trimming_offset,
                                     AttrType::integer};
    SingleValue<E_trimming_reference_edge> trimming_reference_edge{
        AttrName::trimming_reference_edge, AttrType::keyword};
    SingleValue<E_trimming_type> trimming_type{AttrName::trimming_type,
                                               AttrType::keyword};
    SingleValue<E_trimming_when> trimming_when{AttrName::trimming_when,
                                               AttrType::keyword};
    std::vector<Attribute*> GetKnownAttributes() override;
  };
  SingleCollection<C_baling> baling{AttrName::baling};
  SingleCollection<C_binding> binding{AttrName::binding};
  SingleCollection<C_coating> coating{AttrName::coating};
  SingleCollection<C_covering> covering{AttrName::covering};
  SingleValue<E_finishing_template> finishing_template{
      AttrName::finishing_template, AttrType::keyword};
  SetOfCollections<C_folding> folding{AttrName::folding};
  SingleValue<E_imposition_template> imposition_template{
      AttrName::imposition_template, AttrType::keyword};
  SingleCollection<C_laminating> laminating{AttrName::laminating};
  SingleValue<RangeOfInteger> media_sheets_supported{
      AttrName::media_sheets_supported, AttrType::rangeOfInteger};
  SingleCollection<C_media_size> media_size{AttrName::media_size};
  SingleValue<StringWithLanguage> media_size_name{AttrName::media_size_name,
                                                  AttrType::name};
  SingleCollection<C_punching> punching{AttrName::punching};
  SingleCollection<C_stitching> stitching{AttrName::stitching};
  SetOfCollections<C_trimming> trimming{AttrName::trimming};
  std::vector<Attribute*> GetKnownAttributes() override;
};
typedef C_finishings_col C_finishings_col_actual;
typedef C_finishings_col C_finishings_col_database;
typedef C_finishings_col C_finishings_col_default;
typedef C_finishings_col C_finishings_col_ready;
struct IPP_EXPORT C_insert_sheet : public Collection {
  SingleValue<int> insert_after_page_number{AttrName::insert_after_page_number,
                                            AttrType::integer};
  SingleValue<int> insert_count{AttrName::insert_count, AttrType::integer};
  SingleValue<E_media> media{AttrName::media, AttrType::keyword};
  SingleCollection<C_media_col> media_col{AttrName::media_col};
  std::vector<Attribute*> GetKnownAttributes() override;
};
typedef C_insert_sheet C_insert_sheet_actual;
typedef C_insert_sheet C_insert_sheet_default;
struct IPP_EXPORT C_job_accounting_sheets : public Collection {
  SingleValue<E_job_accounting_output_bin> job_accounting_output_bin{
      AttrName::job_accounting_output_bin, AttrType::keyword};
  SingleValue<E_job_accounting_sheets_type> job_accounting_sheets_type{
      AttrName::job_accounting_sheets_type, AttrType::keyword};
  SingleValue<E_media> media{AttrName::media, AttrType::keyword};
  SingleCollection<C_media_col> media_col{AttrName::media_col};
  std::vector<Attribute*> GetKnownAttributes() override;
};
typedef C_job_accounting_sheets C_job_accounting_sheets_actual;
typedef C_job_accounting_sheets C_job_accounting_sheets_default;
typedef C_cover_back C_job_cover_back;
typedef C_cover_back C_job_cover_back_actual;
typedef C_cover_back C_job_cover_back_default;
typedef C_cover_back C_job_cover_front;
typedef C_cover_back C_job_cover_front_actual;
typedef C_cover_back C_job_cover_front_default;
struct IPP_EXPORT C_job_error_sheet : public Collection {
  SingleValue<E_job_error_sheet_type> job_error_sheet_type{
      AttrName::job_error_sheet_type, AttrType::keyword};
  SingleValue<E_job_error_sheet_when> job_error_sheet_when{
      AttrName::job_error_sheet_when, AttrType::keyword};
  SingleValue<E_media> media{AttrName::media, AttrType::keyword};
  SingleCollection<C_media_col> media_col{AttrName::media_col};
  std::vector<Attribute*> GetKnownAttributes() override;
};
typedef C_job_error_sheet C_job_error_sheet_actual;
typedef C_job_error_sheet C_job_error_sheet_default;
typedef C_finishings_col C_job_finishings_col;
typedef C_finishings_col C_job_finishings_col_default;
typedef C_finishings_col C_job_finishings_col_ready;
struct IPP_EXPORT C_job_sheets_col : public Collection {
  SingleValue<E_job_sheets> job_sheets{AttrName::job_sheets, AttrType::keyword};
  SingleValue<E_media> media{AttrName::media, AttrType::keyword};
  SingleCollection<C_media_col> media_col{AttrName::media_col};
  std::vector<Attribute*> GetKnownAttributes() override;
};
typedef C_job_sheets_col C_job_sheets_col_actual;
typedef C_job_sheets_col C_job_sheets_col_default;
struct IPP_EXPORT C_overrides : public Collection {
  SingleValue<int> copies{AttrName::copies, AttrType::integer};
  SingleCollection<C_cover_back> cover_back{AttrName::cover_back};
  SingleCollection<C_cover_front> cover_front{AttrName::cover_front};
  SetOfValues<RangeOfInteger> document_copies{AttrName::document_copies,
                                              AttrType::rangeOfInteger};
  SetOfValues<RangeOfInteger> document_numbers{AttrName::document_numbers,
                                               AttrType::rangeOfInteger};
  SingleValue<E_feed_orientation> feed_orientation{AttrName::feed_orientation,
                                                   AttrType::keyword};
  SetOfValues<E_finishings> finishings{AttrName::finishings, AttrType::enum_};
  SetOfCollections<C_finishings_col> finishings_col{AttrName::finishings_col};
  SingleValue<StringWithLanguage> font_name_requested{
      AttrName::font_name_requested, AttrType::name};
  SingleValue<int> font_size_requested{AttrName::font_size_requested,
                                       AttrType::integer};
  SetOfValues<int> force_front_side{AttrName::force_front_side,
                                    AttrType::integer};
  SingleValue<E_imposition_template> imposition_template{
      AttrName::imposition_template, AttrType::keyword};
  SetOfCollections<C_insert_sheet> insert_sheet{AttrName::insert_sheet};
  SingleValue<StringWithLanguage> job_account_id{AttrName::job_account_id,
                                                 AttrType::name};
  SingleValue<E_job_account_type> job_account_type{AttrName::job_account_type,
                                                   AttrType::keyword};
  SingleCollection<C_job_accounting_sheets> job_accounting_sheets{
      AttrName::job_accounting_sheets};
  SingleValue<StringWithLanguage> job_accounting_user_id{
      AttrName::job_accounting_user_id, AttrType::name};
  SingleValue<int> job_copies{AttrName::job_copies, AttrType::integer};
  SingleCollection<C_job_cover_back> job_cover_back{AttrName::job_cover_back};
  SingleCollection<C_job_cover_front> job_cover_front{
      AttrName::job_cover_front};
  SingleValue<E_job_delay_output_until> job_delay_output_until{
      AttrName::job_delay_output_until, AttrType::keyword};
  SingleValue<DateTime> job_delay_output_until_time{
      AttrName::job_delay_output_until_time, AttrType::dateTime};
  SingleValue<E_job_error_action> job_error_action{AttrName::job_error_action,
                                                   AttrType::keyword};
  SingleCollection<C_job_error_sheet> job_error_sheet{
      AttrName::job_error_sheet};
  SetOfValues<E_job_finishings> job_finishings{AttrName::job_finishings,
                                               AttrType::enum_};
  SetOfCollections<C_job_finishings_col> job_finishings_col{
      AttrName::job_finishings_col};
  SingleValue<E_job_hold_until> job_hold_until{AttrName::job_hold_until,
                                               AttrType::keyword};
  SingleValue<DateTime> job_hold_until_time{AttrName::job_hold_until_time,
                                            AttrType::dateTime};
  SingleValue<StringWithLanguage> job_message_to_operator{
      AttrName::job_message_to_operator, AttrType::text};
  SingleValue<int> job_pages_per_set{AttrName::job_pages_per_set,
                                     AttrType::integer};
  SingleValue<std::string> job_phone_number{AttrName::job_phone_number,
                                            AttrType::uri};
  SingleValue<int> job_priority{AttrName::job_priority, AttrType::integer};
  SingleValue<StringWithLanguage> job_recipient_name{
      AttrName::job_recipient_name, AttrType::name};
  SingleCollection<C_job_save_disposition> job_save_disposition{
      AttrName::job_save_disposition};
  SingleValue<StringWithLanguage> job_sheet_message{AttrName::job_sheet_message,
                                                    AttrType::text};
  SingleValue<E_job_sheets> job_sheets{AttrName::job_sheets, AttrType::keyword};
  SingleCollection<C_job_sheets_col> job_sheets_col{AttrName::job_sheets_col};
  SingleValue<E_media> media{AttrName::media, AttrType::keyword};
  SingleCollection<C_media_col> media_col{AttrName::media_col};
  SingleValue<E_media_input_tray_check> media_input_tray_check{
      AttrName::media_input_tray_check, AttrType::keyword};
  SingleValue<E_multiple_document_handling> multiple_document_handling{
      AttrName::multiple_document_handling, AttrType::keyword};
  SingleValue<int> number_up{AttrName::number_up, AttrType::integer};
  SingleValue<E_orientation_requested> orientation_requested{
      AttrName::orientation_requested, AttrType::enum_};
  SingleValue<E_output_bin> output_bin{AttrName::output_bin, AttrType::keyword};
  SingleValue<StringWithLanguage> output_device{AttrName::output_device,
                                                AttrType::name};
  SingleValue<E_page_delivery> page_delivery{AttrName::page_delivery,
                                             AttrType::keyword};
  SingleValue<E_page_order_received> page_order_received{
      AttrName::page_order_received, AttrType::keyword};
  SetOfValues<RangeOfInteger> page_ranges{AttrName::page_ranges,
                                          AttrType::rangeOfInteger};
  SetOfValues<RangeOfInteger> pages{AttrName::pages, AttrType::rangeOfInteger};
  SetOfValues<int> pages_per_subset{AttrName::pages_per_subset,
                                    AttrType::integer};
  SetOfCollections<C_pdl_init_file> pdl_init_file{AttrName::pdl_init_file};
  SingleValue<E_presentation_direction_number_up>
      presentation_direction_number_up{
          AttrName::presentation_direction_number_up, AttrType::keyword};
  SingleValue<E_print_color_mode> print_color_mode{AttrName::print_color_mode,
                                                   AttrType::keyword};
  SingleValue<E_print_content_optimize> print_content_optimize{
      AttrName::print_content_optimize, AttrType::keyword};
  SingleValue<E_print_quality> print_quality{AttrName::print_quality,
                                             AttrType::enum_};
  SingleValue<E_print_rendering_intent> print_rendering_intent{
      AttrName::print_rendering_intent, AttrType::keyword};
  SingleValue<E_print_scaling> print_scaling{AttrName::print_scaling,
                                             AttrType::keyword};
  SingleValue<Resolution> printer_resolution{AttrName::printer_resolution,
                                             AttrType::resolution};
  SingleCollection<C_proof_print> proof_print{AttrName::proof_print};
  SingleCollection<C_separator_sheets> separator_sheets{
      AttrName::separator_sheets};
  SingleValue<E_sheet_collate> sheet_collate{AttrName::sheet_collate,
                                             AttrType::keyword};
  SingleValue<E_sides> sides{AttrName::sides, AttrType::keyword};
  SingleValue<E_x_image_position> x_image_position{AttrName::x_image_position,
                                                   AttrType::keyword};
  SingleValue<int> x_image_shift{AttrName::x_image_shift, AttrType::integer};
  SingleValue<int> x_side1_image_shift{AttrName::x_side1_image_shift,
                                       AttrType::integer};
  SingleValue<int> x_side2_image_shift{AttrName::x_side2_image_shift,
                                       AttrType::integer};
  SingleValue<E_y_image_position> y_image_position{AttrName::y_image_position,
                                                   AttrType::keyword};
  SingleValue<int> y_image_shift{AttrName::y_image_shift, AttrType::integer};
  SingleValue<int> y_side1_image_shift{AttrName::y_side1_image_shift,
                                       AttrType::integer};
  SingleValue<int> y_side2_image_shift{AttrName::y_side2_image_shift,
                                       AttrType::integer};
  std::vector<Attribute*> GetKnownAttributes() override;
};
typedef C_overrides C_overrides_actual;
}  // namespace ipp

#endif  //  LIBIPPROTO_IPP_COLLECTIONS_H_
