#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>
#include "services/service_manager/public/cpp/types_export.h"
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;
struct SERVICE_MANAGER_PUBLIC_CPP_TYPES_EXPORT InterfaceProviderSpec {
InterfaceProviderSpec();
InterfaceProviderSpec(const InterfaceProviderSpec& other);
InterfaceProviderSpec(InterfaceProviderSpec&& other);
~InterfaceProviderSpec();
InterfaceProviderSpec& operator=(const InterfaceProviderSpec& other);
InterfaceProviderSpec& operator=(InterfaceProviderSpec&& other);
bool operator==(const InterfaceProviderSpec& other) const;
bool operator<(const InterfaceProviderSpec& other) const;
std::map<Capability, InterfaceSet> provides;
std::map<Name, CapabilitySet> needs;
};
using InterfaceProviderSpecMap =
std::unordered_map<std::string, InterfaceProviderSpec>;
bool SERVICE_MANAGER_PUBLIC_CPP_TYPES_EXPORT
GetInterfaceProviderSpec(const std::string& spec_name,
const InterfaceProviderSpecMap& map,
InterfaceProviderSpec* spec);
}
#endif