github.com/cloudwan/edgelq-sdk@v1.15.4/iam/access/v1/member_assignment/member_assignment.pb.api_access.go (about) 1 // Code generated by protoc-gen-goten-access 2 // Resource: MemberAssignment 3 // DO NOT EDIT!!! 4 5 package member_assignment_access 6 7 import ( 8 "context" 9 10 "google.golang.org/grpc" 11 "google.golang.org/grpc/codes" 12 "google.golang.org/grpc/metadata" 13 "google.golang.org/grpc/status" 14 15 gotenaccess "github.com/cloudwan/goten-sdk/runtime/access" 16 gotenresource "github.com/cloudwan/goten-sdk/runtime/resource" 17 gotenfilter "github.com/cloudwan/goten-sdk/runtime/resource/filter" 18 "github.com/cloudwan/goten-sdk/types/watch_type" 19 20 member_assignment_client "github.com/cloudwan/edgelq-sdk/iam/client/v1/member_assignment" 21 member_assignment "github.com/cloudwan/edgelq-sdk/iam/resources/v1/member_assignment" 22 ) 23 24 var ( 25 _ = new(context.Context) 26 27 _ = metadata.MD{} 28 _ = new(grpc.ClientConnInterface) 29 _ = codes.NotFound 30 _ = status.Status{} 31 32 _ = new(gotenaccess.Watcher) 33 _ = watch_type.WatchType_STATEFUL 34 _ = new(gotenresource.ListQuery) 35 _ = gotenfilter.Eq 36 ) 37 38 type apiMemberAssignmentAccess struct { 39 client member_assignment_client.MemberAssignmentServiceClient 40 } 41 42 func NewApiMemberAssignmentAccess(client member_assignment_client.MemberAssignmentServiceClient) member_assignment.MemberAssignmentAccess { 43 return &apiMemberAssignmentAccess{client: client} 44 } 45 46 func (a *apiMemberAssignmentAccess) GetMemberAssignment(ctx context.Context, query *member_assignment.GetQuery, opts ...gotenresource.GetOption) (*member_assignment.MemberAssignment, error) { 47 getOpts := gotenresource.MakeGetOptions(opts) 48 callHeaders := metadata.MD{} 49 if getOpts.GetSkipCache() { 50 callHeaders["cache-control"] = []string{"no-cache"} 51 } 52 callOpts := []grpc.CallOption{} 53 if len(callHeaders) > 0 { 54 callOpts = append(callOpts, grpc.Header(&callHeaders)) 55 } 56 if !query.Reference.IsFullyQualified() { 57 return nil, status.Errorf(codes.InvalidArgument, "Reference %s is not fully specified", query.Reference) 58 } 59 request := &member_assignment_client.GetMemberAssignmentRequest{ 60 Name: &query.Reference.Name, 61 FieldMask: query.Mask, 62 } 63 res, err := a.client.GetMemberAssignment(ctx, request, callOpts...) 64 if err != nil { 65 return nil, err 66 } 67 query.Reference.Resolve(res) 68 return res, nil 69 } 70 71 func (a *apiMemberAssignmentAccess) BatchGetMemberAssignments(ctx context.Context, refs []*member_assignment.Reference, opts ...gotenresource.BatchGetOption) error { 72 batchGetOpts := gotenresource.MakeBatchGetOptions(opts) 73 callHeaders := metadata.MD{} 74 if batchGetOpts.GetSkipCache() { 75 callHeaders["cache-control"] = []string{"no-cache"} 76 } 77 callOpts := []grpc.CallOption{} 78 if len(callHeaders) > 0 { 79 callOpts = append(callOpts, grpc.Header(&callHeaders)) 80 } 81 asNames := make([]*member_assignment.Name, 0, len(refs)) 82 for _, ref := range refs { 83 if !ref.IsFullyQualified() { 84 return status.Errorf(codes.InvalidArgument, "Reference %s is not fully specified", ref) 85 } 86 asNames = append(asNames, &ref.Name) 87 } 88 request := &member_assignment_client.BatchGetMemberAssignmentsRequest{ 89 Names: asNames, 90 } 91 fieldMask := batchGetOpts.GetFieldMask(member_assignment.GetDescriptor()) 92 if fieldMask != nil { 93 request.FieldMask = fieldMask.(*member_assignment.MemberAssignment_FieldMask) 94 } 95 resp, err := a.client.BatchGetMemberAssignments(ctx, request, callOpts...) 96 if err != nil { 97 return err 98 } 99 resultMap := make(map[member_assignment.Name]*member_assignment.MemberAssignment, len(refs)) 100 for _, resolvedRes := range resp.GetMemberAssignments() { 101 resultMap[*resolvedRes.GetName()] = resolvedRes 102 } 103 for _, ref := range refs { 104 resolvedRes := resultMap[ref.Name] 105 if resolvedRes != nil { 106 ref.Resolve(resolvedRes) 107 } 108 } 109 if batchGetOpts.MustResolveAll() && len(resp.GetMissing()) > 0 { 110 return status.Errorf(codes.NotFound, "Number of references not found: %d", len(resp.GetMissing())) 111 } 112 return nil 113 } 114 115 func (a *apiMemberAssignmentAccess) QueryMemberAssignments(ctx context.Context, query *member_assignment.ListQuery, opts ...gotenresource.QueryOption) (*member_assignment.QueryResultSnapshot, error) { 116 qOpts := gotenresource.MakeQueryOptions(opts) 117 callHeaders := metadata.MD{} 118 if qOpts.GetSkipCache() { 119 callHeaders["cache-control"] = []string{"no-cache"} 120 } 121 callOpts := []grpc.CallOption{} 122 if len(callHeaders) > 0 { 123 callOpts = append(callOpts, grpc.Header(&callHeaders)) 124 } 125 request := &member_assignment_client.ListMemberAssignmentsRequest{ 126 Filter: query.Filter, 127 FieldMask: query.Mask, 128 IncludePagingInfo: query.WithPagingInfo, 129 } 130 if query.Pager != nil { 131 request.PageSize = int32(query.Pager.Limit) 132 request.OrderBy = query.Pager.OrderBy 133 request.PageToken = query.Pager.Cursor 134 } 135 if query.Filter != nil && query.Filter.GetCondition() != nil { 136 request.Filter, request.Parent = getParentAndFilter(query.Filter) 137 } 138 resp, err := a.client.ListMemberAssignments(ctx, request) 139 if err != nil { 140 return nil, err 141 } 142 return &member_assignment.QueryResultSnapshot{ 143 MemberAssignments: resp.MemberAssignments, 144 NextPageCursor: resp.NextPageToken, 145 PrevPageCursor: resp.PrevPageToken, 146 TotalResultsCount: resp.TotalResultsCount, 147 CurrentOffset: resp.CurrentOffset, 148 }, nil 149 } 150 151 func (a *apiMemberAssignmentAccess) SearchMemberAssignments(ctx context.Context, query *member_assignment.SearchQuery, opts ...gotenresource.QueryOption) (*member_assignment.QueryResultSnapshot, error) { 152 qOpts := gotenresource.MakeQueryOptions(opts) 153 callHeaders := metadata.MD{} 154 if qOpts.GetSkipCache() { 155 callHeaders["cache-control"] = []string{"no-cache"} 156 } 157 callOpts := []grpc.CallOption{} 158 if len(callHeaders) > 0 { 159 callOpts = append(callOpts, grpc.Header(&callHeaders)) 160 } 161 request := &member_assignment_client.SearchMemberAssignmentsRequest{ 162 Phrase: query.Phrase, 163 Filter: query.Filter, 164 FieldMask: query.Mask, 165 } 166 if query.Pager != nil { 167 request.PageSize = int32(query.Pager.Limit) 168 request.OrderBy = query.Pager.OrderBy 169 request.PageToken = query.Pager.Cursor 170 } 171 if query.Filter != nil && query.Filter.GetCondition() != nil { 172 request.Filter, request.Parent = getParentAndFilter(query.Filter) 173 } 174 resp, err := a.client.SearchMemberAssignments(ctx, request, callOpts...) 175 if err != nil { 176 return nil, err 177 } 178 return &member_assignment.QueryResultSnapshot{ 179 MemberAssignments: resp.MemberAssignments, 180 NextPageCursor: resp.NextPageToken, 181 PrevPageCursor: resp.PrevPageToken, 182 CurrentOffset: resp.CurrentOffset, 183 TotalResultsCount: resp.TotalResultsCount, 184 }, nil 185 } 186 187 func (a *apiMemberAssignmentAccess) WatchMemberAssignment(ctx context.Context, query *member_assignment.GetQuery, observerCb func(*member_assignment.MemberAssignmentChange) error) error { 188 if !query.Reference.IsFullyQualified() { 189 return status.Errorf(codes.InvalidArgument, "Reference %s is not fully specified", query.Reference) 190 } 191 request := &member_assignment_client.WatchMemberAssignmentRequest{ 192 Name: &query.Reference.Name, 193 FieldMask: query.Mask, 194 } 195 ctx, cancel := context.WithCancel(ctx) 196 defer cancel() 197 198 changesStream, initErr := a.client.WatchMemberAssignment(ctx, request) 199 if initErr != nil { 200 return initErr 201 } 202 for { 203 resp, err := changesStream.Recv() 204 if err != nil { 205 return status.Errorf(status.Code(err), "watch recv error: %s", err) 206 } 207 change := resp.GetChange() 208 if err := observerCb(change); err != nil { 209 return err 210 } 211 } 212 } 213 214 func (a *apiMemberAssignmentAccess) WatchMemberAssignments(ctx context.Context, query *member_assignment.WatchQuery, observerCb func(*member_assignment.QueryResultChange) error) error { 215 request := &member_assignment_client.WatchMemberAssignmentsRequest{ 216 Filter: query.Filter, 217 FieldMask: query.Mask, 218 MaxChunkSize: int32(query.ChunkSize), 219 Type: query.WatchType, 220 ResumeToken: query.ResumeToken, 221 StartingTime: query.StartingTime, 222 } 223 if query.Pager != nil { 224 request.OrderBy = query.Pager.OrderBy 225 request.PageSize = int32(query.Pager.Limit) 226 request.PageToken = query.Pager.Cursor 227 } 228 if query.Filter != nil && query.Filter.GetCondition() != nil { 229 request.Filter, request.Parent = getParentAndFilter(query.Filter) 230 } 231 ctx, cancel := context.WithCancel(ctx) 232 defer cancel() 233 234 changesStream, initErr := a.client.WatchMemberAssignments(ctx, request) 235 if initErr != nil { 236 return initErr 237 } 238 for { 239 respChange, err := changesStream.Recv() 240 if err != nil { 241 return status.Errorf(status.Code(err), "watch recv error: %s", err) 242 } 243 changesWithPaging := &member_assignment.QueryResultChange{ 244 Changes: respChange.MemberAssignmentChanges, 245 IsCurrent: respChange.IsCurrent, 246 IsHardReset: respChange.IsHardReset, 247 IsSoftReset: respChange.IsSoftReset, 248 ResumeToken: respChange.ResumeToken, 249 SnapshotSize: respChange.SnapshotSize, 250 } 251 if respChange.PageTokenChange != nil { 252 changesWithPaging.PrevPageCursor = respChange.PageTokenChange.PrevPageToken 253 changesWithPaging.NextPageCursor = respChange.PageTokenChange.NextPageToken 254 } 255 if err := observerCb(changesWithPaging); err != nil { 256 return err 257 } 258 } 259 } 260 261 func (a *apiMemberAssignmentAccess) SaveMemberAssignment(ctx context.Context, res *member_assignment.MemberAssignment, opts ...gotenresource.SaveOption) error { 262 saveOpts := gotenresource.MakeSaveOptions(opts) 263 var resp *member_assignment.MemberAssignment 264 var err error 265 if !saveOpts.OnlyCreate() { 266 updateRequest := &member_assignment_client.UpdateMemberAssignmentRequest{ 267 MemberAssignment: res, 268 } 269 if updateMask := saveOpts.GetUpdateMask(); updateMask != nil { 270 updateRequest.UpdateMask = updateMask.(*member_assignment.MemberAssignment_FieldMask) 271 } 272 if mask, conditionalState := saveOpts.GetCAS(); mask != nil && conditionalState != nil { 273 updateRequest.Cas = &member_assignment_client.UpdateMemberAssignmentRequest_CAS{ 274 ConditionalState: conditionalState.(*member_assignment.MemberAssignment), 275 FieldMask: mask.(*member_assignment.MemberAssignment_FieldMask), 276 } 277 } 278 resp, err = a.client.UpdateMemberAssignment(ctx, updateRequest) 279 if err != nil { 280 return err 281 } 282 } else { 283 return status.Errorf(codes.Internal, "create operation on %s does not exist", res.Name.AsReference().String()) 284 } 285 // Ensure object is updated - but in most shallow way possible 286 res.MakeDiffFieldMask(resp).Set(res, resp) 287 return nil 288 } 289 290 func (a *apiMemberAssignmentAccess) DeleteMemberAssignment(ctx context.Context, ref *member_assignment.Reference, opts ...gotenresource.DeleteOption) error { 291 delOpts := gotenresource.MakeDeleteOptions(opts) 292 if !ref.IsFullyQualified() { 293 return status.Errorf(codes.InvalidArgument, "Reference %s is not fully specified", ref) 294 } 295 request := &member_assignment_client.DeleteMemberAssignmentRequest{ 296 Name: &ref.Name, 297 AllowMissing: delOpts.AllowMissing(), 298 } 299 _, err := a.client.DeleteMemberAssignment(ctx, request) 300 return err 301 } 302 func getParentAndFilter(fullFilter *member_assignment.Filter) (*member_assignment.Filter, *member_assignment.ParentName) { 303 var withParentExtraction func(cnd member_assignment.FilterCondition) member_assignment.FilterCondition 304 var resultParent *member_assignment.ParentName 305 var resultFilter *member_assignment.Filter 306 withParentExtraction = func(cnd member_assignment.FilterCondition) member_assignment.FilterCondition { 307 switch tCnd := cnd.(type) { 308 case *member_assignment.FilterConditionComposite: 309 if tCnd.GetOperator() == gotenfilter.AND { 310 withoutParentCnds := make([]member_assignment.FilterCondition, 0) 311 for _, subCnd := range tCnd.Conditions { 312 if subCndNoParent := withParentExtraction(subCnd); subCndNoParent != nil { 313 withoutParentCnds = append(withoutParentCnds, subCndNoParent) 314 } 315 } 316 if len(withoutParentCnds) == 0 { 317 return nil 318 } 319 if len(withoutParentCnds) == 1 { 320 return withoutParentCnds[0] 321 } 322 return member_assignment.AndFilterConditions(withoutParentCnds...) 323 } else { 324 return tCnd 325 } 326 case *member_assignment.FilterConditionCompare: 327 if tCnd.GetOperator() == gotenfilter.Eq && tCnd.GetRawFieldPath().String() == "name" { 328 nameValue := tCnd.GetRawValue().(*member_assignment.Name) 329 if nameValue != nil && nameValue.ParentName.IsSpecified() { 330 resultParent = &nameValue.ParentName 331 if nameValue.IsFullyQualified() { 332 return tCnd 333 } 334 return nil 335 } 336 } 337 return tCnd 338 default: 339 return tCnd 340 } 341 } 342 cndWithoutParent := withParentExtraction(fullFilter.GetCondition()) 343 if cndWithoutParent != nil { 344 resultFilter = &member_assignment.Filter{FilterCondition: cndWithoutParent} 345 } 346 return resultFilter, resultParent 347 } 348 349 func GetApiAccessBuilder() *gotenaccess.ApiAccessBuilder { 350 return gotenaccess.GetRegistry().FindApiAccessBuilder(member_assignment.GetDescriptor()) 351 } 352 353 func init() { 354 gotenaccess.GetRegistry().RegisterApiAccessConstructor(member_assignment.GetDescriptor(), func(cc grpc.ClientConnInterface) gotenresource.Access { 355 return member_assignment.AsAnyCastAccess(NewApiMemberAssignmentAccess(member_assignment_client.NewMemberAssignmentServiceClient(cc))) 356 }) 357 }