blob: 4d6e45b5cfacf72b5e4a125978378a4d13d68081 [file] [log] [blame]
// Copyright 2016 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 SERVICES_SERVICE_MANAGER_PUBLIC_CPP_INTERFACE_PROVIDER_SPEC_H_
#define SERVICES_SERVICE_MANAGER_PUBLIC_CPP_INTERFACE_PROVIDER_SPEC_H_
#include <map>
#include <set>
#include <string>
#include <unordered_map>
namespace service_manager {
using Capability = std::string;
using CapabilitySet = std::set<std::string>;
using Interface = std::string;
using InterfaceSet = std::set<std::string>;
using Name = std::string;
// See comments in
// services/service_manager/public/interfaces/interface_provider_spec.mojom for
// a description of InterfaceProviderSpec.
struct InterfaceProviderSpec {
InterfaceProviderSpec();
InterfaceProviderSpec(const InterfaceProviderSpec& other);
~InterfaceProviderSpec();
bool operator==(const InterfaceProviderSpec& other) const;
bool operator<(const InterfaceProviderSpec& other) const;
std::map<Capability, InterfaceSet> provides;
std::map<Name, CapabilitySet> requires;
};
// Map of spec name -> spec.
using InterfaceProviderSpecMap =
std::unordered_map<std::string, InterfaceProviderSpec>;
// Convenience for reading a spec named |spec_name| out of |map|. If such a spec
// is found, |spec| is modified and this function returns true. If a spec is not
// found, |spec| is unmodified and this function returns false.
bool GetInterfaceProviderSpec(const std::string& spec_name,
const InterfaceProviderSpecMap& map,
InterfaceProviderSpec* spec);
} // namespace service_manager
#endif // SERVICES_SERVICE_MANAGER_PUBLIC_CPP_INTERFACE_PROVIDER_SPEC_H_