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

     1  // Code generated by protoc-gen-goten-access
     2  // Resource: CryptoKey
     3  // DO NOT EDIT!!!
     4  
     5  package crypto_key_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  	crypto_key_client "github.com/cloudwan/edgelq-sdk/secrets/client/v1/crypto_key"
    21  	crypto_key "github.com/cloudwan/edgelq-sdk/secrets/resources/v1/crypto_key"
    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 apiCryptoKeyAccess struct {
    39  	client crypto_key_client.CryptoKeyServiceClient
    40  }
    41  
    42  func NewApiCryptoKeyAccess(client crypto_key_client.CryptoKeyServiceClient) crypto_key.CryptoKeyAccess {
    43  	return &apiCryptoKeyAccess{client: client}
    44  }
    45  
    46  func (a *apiCryptoKeyAccess) GetCryptoKey(ctx context.Context, query *crypto_key.GetQuery, opts ...gotenresource.GetOption) (*crypto_key.CryptoKey, 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 := &crypto_key_client.GetCryptoKeyRequest{
    60  		Name:      &query.Reference.Name,
    61  		FieldMask: query.Mask,
    62  	}
    63  	res, err := a.client.GetCryptoKey(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 *apiCryptoKeyAccess) BatchGetCryptoKeys(ctx context.Context, refs []*crypto_key.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([]*crypto_key.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 := &crypto_key_client.BatchGetCryptoKeysRequest{
    89  		Names: asNames,
    90  	}
    91  	fieldMask := batchGetOpts.GetFieldMask(crypto_key.GetDescriptor())
    92  	if fieldMask != nil {
    93  		request.FieldMask = fieldMask.(*crypto_key.CryptoKey_FieldMask)
    94  	}
    95  	resp, err := a.client.BatchGetCryptoKeys(ctx, request, callOpts...)
    96  	if err != nil {
    97  		return err
    98  	}
    99  	resultMap := make(map[crypto_key.Name]*crypto_key.CryptoKey, len(refs))
   100  	for _, resolvedRes := range resp.GetCryptoKeys() {
   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 *apiCryptoKeyAccess) QueryCryptoKeys(ctx context.Context, query *crypto_key.ListQuery, opts ...gotenresource.QueryOption) (*crypto_key.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 := &crypto_key_client.ListCryptoKeysRequest{
   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.ListCryptoKeys(ctx, request)
   139  	if err != nil {
   140  		return nil, err
   141  	}
   142  	return &crypto_key.QueryResultSnapshot{
   143  		CryptoKeys:        resp.CryptoKeys,
   144  		NextPageCursor:    resp.NextPageToken,
   145  		PrevPageCursor:    resp.PrevPageToken,
   146  		TotalResultsCount: resp.TotalResultsCount,
   147  		CurrentOffset:     resp.CurrentOffset,
   148  	}, nil
   149  }
   150  
   151  func (a *apiCryptoKeyAccess) WatchCryptoKey(ctx context.Context, query *crypto_key.GetQuery, observerCb func(*crypto_key.CryptoKeyChange) error) error {
   152  	if !query.Reference.IsFullyQualified() {
   153  		return status.Errorf(codes.InvalidArgument, "Reference %s is not fully specified", query.Reference)
   154  	}
   155  	request := &crypto_key_client.WatchCryptoKeyRequest{
   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.WatchCryptoKey(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 *apiCryptoKeyAccess) WatchCryptoKeys(ctx context.Context, query *crypto_key.WatchQuery, observerCb func(*crypto_key.QueryResultChange) error) error {
   179  	request := &crypto_key_client.WatchCryptoKeysRequest{
   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.WatchCryptoKeys(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 := &crypto_key.QueryResultChange{
   208  			Changes:      respChange.CryptoKeyChanges,
   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 *apiCryptoKeyAccess) SaveCryptoKey(ctx context.Context, res *crypto_key.CryptoKey, opts ...gotenresource.SaveOption) error {
   226  	return status.Errorf(codes.Internal, "save operation on %s does not exist", res.Name.AsReference().String())
   227  }
   228  
   229  func (a *apiCryptoKeyAccess) DeleteCryptoKey(ctx context.Context, ref *crypto_key.Reference, opts ...gotenresource.DeleteOption) error {
   230  	delOpts := gotenresource.MakeDeleteOptions(opts)
   231  	if !ref.IsFullyQualified() {
   232  		return status.Errorf(codes.InvalidArgument, "Reference %s is not fully specified", ref)
   233  	}
   234  	request := &crypto_key_client.DeleteCryptoKeyRequest{
   235  		Name:         &ref.Name,
   236  		AllowMissing: delOpts.AllowMissing(),
   237  	}
   238  	_, err := a.client.DeleteCryptoKey(ctx, request)
   239  	return err
   240  }
   241  func getParentAndFilter(fullFilter *crypto_key.Filter) (*crypto_key.Filter, *crypto_key.ParentName) {
   242  	var withParentExtraction func(cnd crypto_key.FilterCondition) crypto_key.FilterCondition
   243  	var resultParent *crypto_key.ParentName
   244  	var resultFilter *crypto_key.Filter
   245  	withParentExtraction = func(cnd crypto_key.FilterCondition) crypto_key.FilterCondition {
   246  		switch tCnd := cnd.(type) {
   247  		case *crypto_key.FilterConditionComposite:
   248  			if tCnd.GetOperator() == gotenfilter.AND {
   249  				withoutParentCnds := make([]crypto_key.FilterCondition, 0)
   250  				for _, subCnd := range tCnd.Conditions {
   251  					if subCndNoParent := withParentExtraction(subCnd); subCndNoParent != nil {
   252  						withoutParentCnds = append(withoutParentCnds, subCndNoParent)
   253  					}
   254  				}
   255  				if len(withoutParentCnds) == 0 {
   256  					return nil
   257  				}
   258  				if len(withoutParentCnds) == 1 {
   259  					return withoutParentCnds[0]
   260  				}
   261  				return crypto_key.AndFilterConditions(withoutParentCnds...)
   262  			} else {
   263  				return tCnd
   264  			}
   265  		case *crypto_key.FilterConditionCompare:
   266  			if tCnd.GetOperator() == gotenfilter.Eq && tCnd.GetRawFieldPath().String() == "name" {
   267  				nameValue := tCnd.GetRawValue().(*crypto_key.Name)
   268  				if nameValue != nil && nameValue.ParentName.IsSpecified() {
   269  					resultParent = &nameValue.ParentName
   270  					if nameValue.IsFullyQualified() {
   271  						return tCnd
   272  					}
   273  					return nil
   274  				}
   275  			}
   276  			return tCnd
   277  		default:
   278  			return tCnd
   279  		}
   280  	}
   281  	cndWithoutParent := withParentExtraction(fullFilter.GetCondition())
   282  	if cndWithoutParent != nil {
   283  		resultFilter = &crypto_key.Filter{FilterCondition: cndWithoutParent}
   284  	}
   285  	return resultFilter, resultParent
   286  }
   287  
   288  func GetApiAccessBuilder() *gotenaccess.ApiAccessBuilder {
   289  	return gotenaccess.GetRegistry().FindApiAccessBuilder(crypto_key.GetDescriptor())
   290  }
   291  
   292  func init() {
   293  	gotenaccess.GetRegistry().RegisterApiAccessConstructor(crypto_key.GetDescriptor(), func(cc grpc.ClientConnInterface) gotenresource.Access {
   294  		return crypto_key.AsAnyCastAccess(NewApiCryptoKeyAccess(crypto_key_client.NewCryptoKeyServiceClient(cc)))
   295  	})
   296  }