github.com/cloudwan/edgelq-sdk@v1.15.4/iam/access/v1/role_binding/role_binding.pb.api_access.go (about)

     1  // Code generated by protoc-gen-goten-access
     2  // Resource: RoleBinding
     3  // DO NOT EDIT!!!
     4  
     5  package role_binding_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  	role_binding_client "github.com/cloudwan/edgelq-sdk/iam/client/v1/role_binding"
    21  	role_binding "github.com/cloudwan/edgelq-sdk/iam/resources/v1/role_binding"
    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 apiRoleBindingAccess struct {
    39  	client role_binding_client.RoleBindingServiceClient
    40  }
    41  
    42  func NewApiRoleBindingAccess(client role_binding_client.RoleBindingServiceClient) role_binding.RoleBindingAccess {
    43  	return &apiRoleBindingAccess{client: client}
    44  }
    45  
    46  func (a *apiRoleBindingAccess) GetRoleBinding(ctx context.Context, query *role_binding.GetQuery, opts ...gotenresource.GetOption) (*role_binding.RoleBinding, 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 := &role_binding_client.GetRoleBindingRequest{
    60  		Name:      &query.Reference.Name,
    61  		FieldMask: query.Mask,
    62  	}
    63  	res, err := a.client.GetRoleBinding(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 *apiRoleBindingAccess) BatchGetRoleBindings(ctx context.Context, refs []*role_binding.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([]*role_binding.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 := &role_binding_client.BatchGetRoleBindingsRequest{
    89  		Names: asNames,
    90  	}
    91  	fieldMask := batchGetOpts.GetFieldMask(role_binding.GetDescriptor())
    92  	if fieldMask != nil {
    93  		request.FieldMask = fieldMask.(*role_binding.RoleBinding_FieldMask)
    94  	}
    95  	resp, err := a.client.BatchGetRoleBindings(ctx, request, callOpts...)
    96  	if err != nil {
    97  		return err
    98  	}
    99  	resultMap := make(map[role_binding.Name]*role_binding.RoleBinding, len(refs))
   100  	for _, resolvedRes := range resp.GetRoleBindings() {
   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 *apiRoleBindingAccess) QueryRoleBindings(ctx context.Context, query *role_binding.ListQuery, opts ...gotenresource.QueryOption) (*role_binding.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 := &role_binding_client.ListRoleBindingsRequest{
   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.ListRoleBindings(ctx, request)
   139  	if err != nil {
   140  		return nil, err
   141  	}
   142  	return &role_binding.QueryResultSnapshot{
   143  		RoleBindings:      resp.RoleBindings,
   144  		NextPageCursor:    resp.NextPageToken,
   145  		PrevPageCursor:    resp.PrevPageToken,
   146  		TotalResultsCount: resp.TotalResultsCount,
   147  		CurrentOffset:     resp.CurrentOffset,
   148  	}, nil
   149  }
   150  
   151  func (a *apiRoleBindingAccess) WatchRoleBinding(ctx context.Context, query *role_binding.GetQuery, observerCb func(*role_binding.RoleBindingChange) error) error {
   152  	if !query.Reference.IsFullyQualified() {
   153  		return status.Errorf(codes.InvalidArgument, "Reference %s is not fully specified", query.Reference)
   154  	}
   155  	request := &role_binding_client.WatchRoleBindingRequest{
   156  		Name:      &query.Reference.Name,
   157  		FieldMask: query.Mask,
   158  	}
   159  	ctx, cancel := context.WithCancel(ctx)
   160  	defer cancel()
   161  
   162  	changesStream, initErr := a.client.WatchRoleBinding(ctx, request)
   163  	if initErr != nil {
   164  		return initErr
   165  	}
   166  	for {
   167  		resp, err := changesStream.Recv()
   168  		if err != nil {
   169  			return status.Errorf(status.Code(err), "watch recv error: %s", err)
   170  		}
   171  		change := resp.GetChange()
   172  		if err := observerCb(change); err != nil {
   173  			return err
   174  		}
   175  	}
   176  }
   177  
   178  func (a *apiRoleBindingAccess) WatchRoleBindings(ctx context.Context, query *role_binding.WatchQuery, observerCb func(*role_binding.QueryResultChange) error) error {
   179  	request := &role_binding_client.WatchRoleBindingsRequest{
   180  		Filter:       query.Filter,
   181  		FieldMask:    query.Mask,
   182  		MaxChunkSize: int32(query.ChunkSize),
   183  		Type:         query.WatchType,
   184  		ResumeToken:  query.ResumeToken,
   185  		StartingTime: query.StartingTime,
   186  	}
   187  	if query.Pager != nil {
   188  		request.OrderBy = query.Pager.OrderBy
   189  		request.PageSize = int32(query.Pager.Limit)
   190  		request.PageToken = query.Pager.Cursor
   191  	}
   192  	if query.Filter != nil && query.Filter.GetCondition() != nil {
   193  		request.Filter, request.Parent = getParentAndFilter(query.Filter)
   194  	}
   195  	ctx, cancel := context.WithCancel(ctx)
   196  	defer cancel()
   197  
   198  	changesStream, initErr := a.client.WatchRoleBindings(ctx, request)
   199  	if initErr != nil {
   200  		return initErr
   201  	}
   202  	for {
   203  		respChange, err := changesStream.Recv()
   204  		if err != nil {
   205  			return status.Errorf(status.Code(err), "watch recv error: %s", err)
   206  		}
   207  		changesWithPaging := &role_binding.QueryResultChange{
   208  			Changes:      respChange.RoleBindingChanges,
   209  			IsCurrent:    respChange.IsCurrent,
   210  			IsHardReset:  respChange.IsHardReset,
   211  			IsSoftReset:  respChange.IsSoftReset,
   212  			ResumeToken:  respChange.ResumeToken,
   213  			SnapshotSize: respChange.SnapshotSize,
   214  		}
   215  		if respChange.PageTokenChange != nil {
   216  			changesWithPaging.PrevPageCursor = respChange.PageTokenChange.PrevPageToken
   217  			changesWithPaging.NextPageCursor = respChange.PageTokenChange.NextPageToken
   218  		}
   219  		if err := observerCb(changesWithPaging); err != nil {
   220  			return err
   221  		}
   222  	}
   223  }
   224  
   225  func (a *apiRoleBindingAccess) SaveRoleBinding(ctx context.Context, res *role_binding.RoleBinding, opts ...gotenresource.SaveOption) error {
   226  	saveOpts := gotenresource.MakeSaveOptions(opts)
   227  	var resp *role_binding.RoleBinding
   228  	var err error
   229  	if !saveOpts.OnlyCreate() {
   230  		updateRequest := &role_binding_client.UpdateRoleBindingRequest{
   231  			RoleBinding:  res,
   232  			AllowMissing: !saveOpts.OnlyUpdate(),
   233  		}
   234  		if updateMask := saveOpts.GetUpdateMask(); updateMask != nil {
   235  			updateRequest.UpdateMask = updateMask.(*role_binding.RoleBinding_FieldMask)
   236  		}
   237  		if mask, conditionalState := saveOpts.GetCAS(); mask != nil && conditionalState != nil {
   238  			updateRequest.Cas = &role_binding_client.UpdateRoleBindingRequest_CAS{
   239  				ConditionalState: conditionalState.(*role_binding.RoleBinding),
   240  				FieldMask:        mask.(*role_binding.RoleBinding_FieldMask),
   241  			}
   242  		}
   243  		resp, err = a.client.UpdateRoleBinding(ctx, updateRequest)
   244  		if err != nil {
   245  			return err
   246  		}
   247  	} else {
   248  		createRequest := &role_binding_client.CreateRoleBindingRequest{
   249  			RoleBinding: res,
   250  		}
   251  		resp, err = a.client.CreateRoleBinding(ctx, createRequest)
   252  		if err != nil {
   253  			return err
   254  		}
   255  	}
   256  	// Ensure object is updated - but in most shallow way possible
   257  	res.MakeDiffFieldMask(resp).Set(res, resp)
   258  	return nil
   259  }
   260  
   261  func (a *apiRoleBindingAccess) DeleteRoleBinding(ctx context.Context, ref *role_binding.Reference, opts ...gotenresource.DeleteOption) error {
   262  	delOpts := gotenresource.MakeDeleteOptions(opts)
   263  	if !ref.IsFullyQualified() {
   264  		return status.Errorf(codes.InvalidArgument, "Reference %s is not fully specified", ref)
   265  	}
   266  	request := &role_binding_client.DeleteRoleBindingRequest{
   267  		Name:         &ref.Name,
   268  		AllowMissing: delOpts.AllowMissing(),
   269  	}
   270  	_, err := a.client.DeleteRoleBinding(ctx, request)
   271  	return err
   272  }
   273  func getParentAndFilter(fullFilter *role_binding.Filter) (*role_binding.Filter, *role_binding.ParentName) {
   274  	var withParentExtraction func(cnd role_binding.FilterCondition) role_binding.FilterCondition
   275  	var resultParent *role_binding.ParentName
   276  	var resultFilter *role_binding.Filter
   277  	withParentExtraction = func(cnd role_binding.FilterCondition) role_binding.FilterCondition {
   278  		switch tCnd := cnd.(type) {
   279  		case *role_binding.FilterConditionComposite:
   280  			if tCnd.GetOperator() == gotenfilter.AND {
   281  				withoutParentCnds := make([]role_binding.FilterCondition, 0)
   282  				for _, subCnd := range tCnd.Conditions {
   283  					if subCndNoParent := withParentExtraction(subCnd); subCndNoParent != nil {
   284  						withoutParentCnds = append(withoutParentCnds, subCndNoParent)
   285  					}
   286  				}
   287  				if len(withoutParentCnds) == 0 {
   288  					return nil
   289  				}
   290  				if len(withoutParentCnds) == 1 {
   291  					return withoutParentCnds[0]
   292  				}
   293  				return role_binding.AndFilterConditions(withoutParentCnds...)
   294  			} else {
   295  				return tCnd
   296  			}
   297  		case *role_binding.FilterConditionCompare:
   298  			if tCnd.GetOperator() == gotenfilter.Eq && tCnd.GetRawFieldPath().String() == "name" {
   299  				nameValue := tCnd.GetRawValue().(*role_binding.Name)
   300  				if nameValue != nil && nameValue.ParentName.IsSpecified() {
   301  					resultParent = &nameValue.ParentName
   302  					if nameValue.IsFullyQualified() {
   303  						return tCnd
   304  					}
   305  					return nil
   306  				}
   307  			}
   308  			return tCnd
   309  		default:
   310  			return tCnd
   311  		}
   312  	}
   313  	cndWithoutParent := withParentExtraction(fullFilter.GetCondition())
   314  	if cndWithoutParent != nil {
   315  		resultFilter = &role_binding.Filter{FilterCondition: cndWithoutParent}
   316  	}
   317  	return resultFilter, resultParent
   318  }
   319  
   320  func GetApiAccessBuilder() *gotenaccess.ApiAccessBuilder {
   321  	return gotenaccess.GetRegistry().FindApiAccessBuilder(role_binding.GetDescriptor())
   322  }
   323  
   324  func init() {
   325  	gotenaccess.GetRegistry().RegisterApiAccessConstructor(role_binding.GetDescriptor(), func(cc grpc.ClientConnInterface) gotenresource.Access {
   326  		return role_binding.AsAnyCastAccess(NewApiRoleBindingAccess(role_binding_client.NewRoleBindingServiceClient(cc)))
   327  	})
   328  }