| // 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_ |