go.ligato.io/vpp-agent/v3@v3.5.0/plugins/vpp/aclplugin/descriptor/adapter/acl.go (about)

     1  // Code generated by adapter-generator. DO NOT EDIT.
     2  
     3  package adapter
     4  
     5  import (
     6  	"google.golang.org/protobuf/proto"
     7  	. "go.ligato.io/vpp-agent/v3/plugins/kvscheduler/api"
     8  	"go.ligato.io/vpp-agent/v3/plugins/vpp/aclplugin/aclidx"
     9  	"go.ligato.io/vpp-agent/v3/proto/ligato/vpp/acl"
    10  )
    11  
    12  ////////// type-safe key-value pair with metadata //////////
    13  
    14  type ACLKVWithMetadata struct {
    15  	Key      string
    16  	Value    *vpp_acl.ACL
    17  	Metadata *aclidx.ACLMetadata
    18  	Origin   ValueOrigin
    19  }
    20  
    21  ////////// type-safe Descriptor structure //////////
    22  
    23  type ACLDescriptor struct {
    24  	Name                 string
    25  	KeySelector          KeySelector
    26  	ValueTypeName        string
    27  	KeyLabel             func(key string) string
    28  	ValueComparator      func(key string, oldValue, newValue *vpp_acl.ACL) bool
    29  	NBKeyPrefix          string
    30  	WithMetadata         bool
    31  	MetadataMapFactory   MetadataMapFactory
    32  	Validate             func(key string, value *vpp_acl.ACL) error
    33  	Create               func(key string, value *vpp_acl.ACL) (metadata *aclidx.ACLMetadata, err error)
    34  	Delete               func(key string, value *vpp_acl.ACL, metadata *aclidx.ACLMetadata) error
    35  	Update               func(key string, oldValue, newValue *vpp_acl.ACL, oldMetadata *aclidx.ACLMetadata) (newMetadata *aclidx.ACLMetadata, err error)
    36  	UpdateWithRecreate   func(key string, oldValue, newValue *vpp_acl.ACL, metadata *aclidx.ACLMetadata) bool
    37  	Retrieve             func(correlate []ACLKVWithMetadata) ([]ACLKVWithMetadata, error)
    38  	IsRetriableFailure   func(err error) bool
    39  	DerivedValues        func(key string, value *vpp_acl.ACL) []KeyValuePair
    40  	Dependencies         func(key string, value *vpp_acl.ACL) []Dependency
    41  	RetrieveDependencies []string /* descriptor name */
    42  }
    43  
    44  ////////// Descriptor adapter //////////
    45  
    46  type ACLDescriptorAdapter struct {
    47  	descriptor *ACLDescriptor
    48  }
    49  
    50  func NewACLDescriptor(typedDescriptor *ACLDescriptor) *KVDescriptor {
    51  	adapter := &ACLDescriptorAdapter{descriptor: typedDescriptor}
    52  	descriptor := &KVDescriptor{
    53  		Name:                 typedDescriptor.Name,
    54  		KeySelector:          typedDescriptor.KeySelector,
    55  		ValueTypeName:        typedDescriptor.ValueTypeName,
    56  		KeyLabel:             typedDescriptor.KeyLabel,
    57  		NBKeyPrefix:          typedDescriptor.NBKeyPrefix,
    58  		WithMetadata:         typedDescriptor.WithMetadata,
    59  		MetadataMapFactory:   typedDescriptor.MetadataMapFactory,
    60  		IsRetriableFailure:   typedDescriptor.IsRetriableFailure,
    61  		RetrieveDependencies: typedDescriptor.RetrieveDependencies,
    62  	}
    63  	if typedDescriptor.ValueComparator != nil {
    64  		descriptor.ValueComparator = adapter.ValueComparator
    65  	}
    66  	if typedDescriptor.Validate != nil {
    67  		descriptor.Validate = adapter.Validate
    68  	}
    69  	if typedDescriptor.Create != nil {
    70  		descriptor.Create = adapter.Create
    71  	}
    72  	if typedDescriptor.Delete != nil {
    73  		descriptor.Delete = adapter.Delete
    74  	}
    75  	if typedDescriptor.Update != nil {
    76  		descriptor.Update = adapter.Update
    77  	}
    78  	if typedDescriptor.UpdateWithRecreate != nil {
    79  		descriptor.UpdateWithRecreate = adapter.UpdateWithRecreate
    80  	}
    81  	if typedDescriptor.Retrieve != nil {
    82  		descriptor.Retrieve = adapter.Retrieve
    83  	}
    84  	if typedDescriptor.Dependencies != nil {
    85  		descriptor.Dependencies = adapter.Dependencies
    86  	}
    87  	if typedDescriptor.DerivedValues != nil {
    88  		descriptor.DerivedValues = adapter.DerivedValues
    89  	}
    90  	return descriptor
    91  }
    92  
    93  func (da *ACLDescriptorAdapter) ValueComparator(key string, oldValue, newValue proto.Message) bool {
    94  	typedOldValue, err1 := castACLValue(key, oldValue)
    95  	typedNewValue, err2 := castACLValue(key, newValue)
    96  	if err1 != nil || err2 != nil {
    97  		return false
    98  	}
    99  	return da.descriptor.ValueComparator(key, typedOldValue, typedNewValue)
   100  }
   101  
   102  func (da *ACLDescriptorAdapter) Validate(key string, value proto.Message) (err error) {
   103  	typedValue, err := castACLValue(key, value)
   104  	if err != nil {
   105  		return err
   106  	}
   107  	return da.descriptor.Validate(key, typedValue)
   108  }
   109  
   110  func (da *ACLDescriptorAdapter) Create(key string, value proto.Message) (metadata Metadata, err error) {
   111  	typedValue, err := castACLValue(key, value)
   112  	if err != nil {
   113  		return nil, err
   114  	}
   115  	return da.descriptor.Create(key, typedValue)
   116  }
   117  
   118  func (da *ACLDescriptorAdapter) Update(key string, oldValue, newValue proto.Message, oldMetadata Metadata) (newMetadata Metadata, err error) {
   119  	oldTypedValue, err := castACLValue(key, oldValue)
   120  	if err != nil {
   121  		return nil, err
   122  	}
   123  	newTypedValue, err := castACLValue(key, newValue)
   124  	if err != nil {
   125  		return nil, err
   126  	}
   127  	typedOldMetadata, err := castACLMetadata(key, oldMetadata)
   128  	if err != nil {
   129  		return nil, err
   130  	}
   131  	return da.descriptor.Update(key, oldTypedValue, newTypedValue, typedOldMetadata)
   132  }
   133  
   134  func (da *ACLDescriptorAdapter) Delete(key string, value proto.Message, metadata Metadata) error {
   135  	typedValue, err := castACLValue(key, value)
   136  	if err != nil {
   137  		return err
   138  	}
   139  	typedMetadata, err := castACLMetadata(key, metadata)
   140  	if err != nil {
   141  		return err
   142  	}
   143  	return da.descriptor.Delete(key, typedValue, typedMetadata)
   144  }
   145  
   146  func (da *ACLDescriptorAdapter) UpdateWithRecreate(key string, oldValue, newValue proto.Message, metadata Metadata) bool {
   147  	oldTypedValue, err := castACLValue(key, oldValue)
   148  	if err != nil {
   149  		return true
   150  	}
   151  	newTypedValue, err := castACLValue(key, newValue)
   152  	if err != nil {
   153  		return true
   154  	}
   155  	typedMetadata, err := castACLMetadata(key, metadata)
   156  	if err != nil {
   157  		return true
   158  	}
   159  	return da.descriptor.UpdateWithRecreate(key, oldTypedValue, newTypedValue, typedMetadata)
   160  }
   161  
   162  func (da *ACLDescriptorAdapter) Retrieve(correlate []KVWithMetadata) ([]KVWithMetadata, error) {
   163  	var correlateWithType []ACLKVWithMetadata
   164  	for _, kvpair := range correlate {
   165  		typedValue, err := castACLValue(kvpair.Key, kvpair.Value)
   166  		if err != nil {
   167  			continue
   168  		}
   169  		typedMetadata, err := castACLMetadata(kvpair.Key, kvpair.Metadata)
   170  		if err != nil {
   171  			continue
   172  		}
   173  		correlateWithType = append(correlateWithType,
   174  			ACLKVWithMetadata{
   175  				Key:      kvpair.Key,
   176  				Value:    typedValue,
   177  				Metadata: typedMetadata,
   178  				Origin:   kvpair.Origin,
   179  			})
   180  	}
   181  
   182  	typedValues, err := da.descriptor.Retrieve(correlateWithType)
   183  	if err != nil {
   184  		return nil, err
   185  	}
   186  	var values []KVWithMetadata
   187  	for _, typedKVWithMetadata := range typedValues {
   188  		kvWithMetadata := KVWithMetadata{
   189  			Key:      typedKVWithMetadata.Key,
   190  			Metadata: typedKVWithMetadata.Metadata,
   191  			Origin:   typedKVWithMetadata.Origin,
   192  		}
   193  		kvWithMetadata.Value = typedKVWithMetadata.Value
   194  		values = append(values, kvWithMetadata)
   195  	}
   196  	return values, err
   197  }
   198  
   199  func (da *ACLDescriptorAdapter) DerivedValues(key string, value proto.Message) []KeyValuePair {
   200  	typedValue, err := castACLValue(key, value)
   201  	if err != nil {
   202  		return nil
   203  	}
   204  	return da.descriptor.DerivedValues(key, typedValue)
   205  }
   206  
   207  func (da *ACLDescriptorAdapter) Dependencies(key string, value proto.Message) []Dependency {
   208  	typedValue, err := castACLValue(key, value)
   209  	if err != nil {
   210  		return nil
   211  	}
   212  	return da.descriptor.Dependencies(key, typedValue)
   213  }
   214  
   215  ////////// Helper methods //////////
   216  
   217  func castACLValue(key string, value proto.Message) (*vpp_acl.ACL, error) {
   218  	typedValue, ok := value.(*vpp_acl.ACL)
   219  	if !ok {
   220  		return nil, ErrInvalidValueType(key, value)
   221  	}
   222  	return typedValue, nil
   223  }
   224  
   225  func castACLMetadata(key string, metadata Metadata) (*aclidx.ACLMetadata, error) {
   226  	if metadata == nil {
   227  		return nil, nil
   228  	}
   229  	typedMetadata, ok := metadata.(*aclidx.ACLMetadata)
   230  	if !ok {
   231  		return nil, ErrInvalidMetadataType(key)
   232  	}
   233  	return typedMetadata, nil
   234  }