#ifndef CHROMEOS_PRINTING_PPD_METADATA_PARSER_H_
#define CHROMEOS_PRINTING_PPD_METADATA_PARSER_H_
#include <string>
#include <vector>
#include "base/component_export.h"
#include "base/containers/flat_map.h"
#include "base/strings/string_piece_forward.h"
#include "base/version.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
namespace chromeos {
struct Restrictions {
Restrictions();
~Restrictions();
Restrictions(const Restrictions&);
Restrictions& operator=(const Restrictions&);
absl::optional<base::Version> min_milestone;
absl::optional<base::Version> max_milestone;
};
struct COMPONENT_EXPORT(CHROMEOS_PRINTING) ReverseIndexLeaf {
std::string manufacturer;
std::string model;
};
struct COMPONENT_EXPORT(CHROMEOS_PRINTING) ParsedPrinter {
ParsedPrinter();
~ParsedPrinter();
ParsedPrinter(const ParsedPrinter&);
ParsedPrinter& operator=(const ParsedPrinter&);
std::string user_visible_printer_name;
std::string effective_make_and_model;
Restrictions restrictions;
};
struct COMPONENT_EXPORT(CHROMEOS_PRINTING) ParsedIndexLeaf {
ParsedIndexLeaf();
~ParsedIndexLeaf();
ParsedIndexLeaf(const ParsedIndexLeaf&);
ParsedIndexLeaf& operator=(const ParsedIndexLeaf&);
std::string ppd_basename;
Restrictions restrictions;
std::string license;
};
struct COMPONENT_EXPORT(CHROMEOS_PRINTING) ParsedIndexValues {
ParsedIndexValues();
~ParsedIndexValues();
ParsedIndexValues(const ParsedIndexValues&);
ParsedIndexValues& operator=(const ParsedIndexValues&);
std::vector<ParsedIndexLeaf> values;
};
using ParsedManufacturers = base::flat_map<std::string, std::string>;
using ParsedPrinters = std::vector<ParsedPrinter>;
using ParsedIndex = base::flat_map<std::string, ParsedIndexValues>;
using ParsedUsbIndex = base::flat_map<int, std::string>;
using ParsedUsbVendorIdMap = base::flat_map<int, std::string>;
using ParsedReverseIndex = base::flat_map<std::string, ReverseIndexLeaf>;
COMPONENT_EXPORT(CHROMEOS_PRINTING)
absl::optional<std::vector<std::string>> ParseLocales(
base::StringPiece locales_json);
COMPONENT_EXPORT(CHROMEOS_PRINTING)
absl::optional<ParsedManufacturers> ParseManufacturers(
base::StringPiece manufacturers_json);
COMPONENT_EXPORT(CHROMEOS_PRINTING)
absl::optional<ParsedPrinters> ParsePrinters(base::StringPiece printers_json);
COMPONENT_EXPORT(CHROMEOS_PRINTING)
absl::optional<ParsedIndex> ParseForwardIndex(
base::StringPiece forward_index_json);
COMPONENT_EXPORT(CHROMEOS_PRINTING)
absl::optional<ParsedUsbIndex> ParseUsbIndex(base::StringPiece usb_index_json);
COMPONENT_EXPORT(CHROMEOS_PRINTING)
absl::optional<ParsedUsbVendorIdMap> ParseUsbVendorIdMap(
base::StringPiece usb_vendor_id_map_json);
COMPONENT_EXPORT(CHROMEOS_PRINTING)
absl::optional<ParsedReverseIndex> ParseReverseIndex(
base::StringPiece reverse_index_json);
}
#endif