Validates that all the given resources are from the same resource provider. Resources that do not have resource provider ID are assumed to be from the agent (default resource provider).
| 1026 | // provider. Resources that do not have resource provider ID are |
| 1027 | // assumed to be from the agent (default resource provider). |
| 1028 | Option<Error> validateSingleResourceProvider( |
| 1029 | const RepeatedPtrField<Resource>& resources) |
| 1030 | { |
| 1031 | hashset<Option<ResourceProviderID>> resourceProviderIds; |
| 1032 | |
| 1033 | foreach (const Resource& resource, resources) { |
| 1034 | resourceProviderIds.insert(resource.has_provider_id() |
| 1035 | ? resource.provider_id() |
| 1036 | : Option<ResourceProviderID>::none()); |
| 1037 | } |
| 1038 | |
| 1039 | if (resourceProviderIds.size() != 1) { |
| 1040 | if (resourceProviderIds.contains(None())) { |
| 1041 | return Error("Some resources have a resource provider and some do not"); |
| 1042 | } |
| 1043 | |
| 1044 | vector<ResourceProviderID> ids; |
| 1045 | std::transform( |
| 1046 | resourceProviderIds.begin(), |
| 1047 | resourceProviderIds.end(), |
| 1048 | std::back_inserter(ids), |
| 1049 | [](const Option<ResourceProviderID>& id) { |
| 1050 | return id.get(); |
| 1051 | }); |
| 1052 | |
| 1053 | return Error( |
| 1054 | "The resources have multiple resource providers: " + |
| 1055 | strings::join(", ", ids)); |
| 1056 | } |
| 1057 | |
| 1058 | return None(); |
| 1059 | } |
| 1060 | |
| 1061 | } // namespace internal { |
| 1062 |