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  }