15 #include "google/cloud/iam_bindings.h"
16 #include "google/cloud/internal/absl_str_join_quiet.h"
21 #include "google/cloud/internal/disable_deprecation_warnings.inc"
27 bindings_[role].emplace(std::move(member));
31 std::string
const& role(iam_binding
.role());
32 std::set<std::string>
const& members = iam_binding
.members();
34 bindings_[role].insert(members.begin(), members.end());
38 std::set<std::string>
const& members) {
39 bindings_[role].insert(members.begin(), members.end());
43 std::string
const& member) {
44 auto it = bindings_.find(role);
45 if (it == bindings_.end()) {
49 auto& members = it->second;
50 auto member_loc = members.find(member);
52 if (member_loc != members.end()) {
53 members.erase(member_loc);
55 if (members.empty()) {
65 std::set<std::string>
const& members) {
66 auto it = bindings_.find(role);
67 if (it == bindings_.end()) {
71 auto& binding_members = it->second;
72 for (
auto const& member : members) {
73 auto member_loc = binding_members.find(member);
74 if (member_loc != binding_members.end()) {
75 binding_members.erase(member_loc);
78 if (binding_members.empty()) {
83 std::ostream& operator<<(std::ostream& os,
IamBindings const& rhs) {
84 os <<
"IamBindings={";
85 struct IamBindingFormatter {
86 void operator()(std::string* out,
87 std::pair<std::string, std::set<std::string>>
const& rhs) {
88 out->append(rhs.first);
90 out->append(absl::StrJoin(rhs.second,
", "));
94 os << absl::StrJoin(rhs,
", ", IamBindingFormatter{});