go.ligato.io/vpp-agent/v3@v3.5.0/plugins/vpp/l3plugin/descriptor/adapter/vrftable.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/l3plugin/vrfidx" 9 "go.ligato.io/vpp-agent/v3/proto/ligato/vpp/l3" 10 ) 11 12 ////////// type-safe key-value pair with metadata ////////// 13 14 type VrfTableKVWithMetadata struct { 15 Key string 16 Value *vpp_l3.VrfTable 17 Metadata *vrfidx.VRFMetadata 18 Origin ValueOrigin 19 } 20 21 ////////// type-safe Descriptor structure ////////// 22 23 type VrfTableDescriptor struct { 24 Name string 25 KeySelector KeySelector 26 ValueTypeName string 27 KeyLabel func(key string) string 28 ValueComparator func(key string, oldValue, newValue *vpp_l3.VrfTable) bool 29 NBKeyPrefix string 30 WithMetadata bool 31 MetadataMapFactory MetadataMapFactory 32 Validate func(key string, value *vpp_l3.VrfTable) error 33 Create func(key string, value *vpp_l3.VrfTable) (metadata *vrfidx.VRFMetadata, err error) 34 Delete func(key string, value *vpp_l3.VrfTable, metadata *vrfidx.VRFMetadata) error 35 Update func(key string, oldValue, newValue *vpp_l3.VrfTable, oldMetadata *vrfidx.VRFMetadata) (newMetadata *vrfidx.VRFMetadata, err error) 36 UpdateWithRecreate func(key string, oldValue, newValue *vpp_l3.VrfTable, metadata *vrfidx.VRFMetadata) bool 37 Retrieve func(correlate []VrfTableKVWithMetadata) ([]VrfTableKVWithMetadata, error) 38 IsRetriableFailure func(err error) bool 39 DerivedValues func(key string, value *vpp_l3.VrfTable) []KeyValuePair 40 Dependencies func(key string, value *vpp_l3.VrfTable) []Dependency 41 RetrieveDependencies []string /* descriptor name */ 42 } 43 44 ////////// Descriptor adapter ////////// 45 46 type VrfTableDescriptorAdapter struct { 47 descriptor *VrfTableDescriptor 48 } 49 50 func NewVrfTableDescriptor(typedDescriptor *VrfTableDescriptor) *KVDescriptor { 51 adapter := &VrfTableDescriptorAdapter{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 *VrfTableDescriptorAdapter) ValueComparator(key string, oldValue, newValue proto.Message) bool { 94 typedOldValue, err1 := castVrfTableValue(key, oldValue) 95 typedNewValue, err2 := castVrfTableValue(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 *VrfTableDescriptorAdapter) Validate(key string, value proto.Message) (err error) { 103 typedValue, err := castVrfTableValue(key, value) 104 if err != nil { 105 return err 106 } 107 return da.descriptor.Validate(key, typedValue) 108 } 109 110 func (da *VrfTableDescriptorAdapter) Create(key string, value proto.Message) (metadata Metadata, err error) { 111 typedValue, err := castVrfTableValue(key, value) 112 if err != nil { 113 return nil, err 114 } 115 return da.descriptor.Create(key, typedValue) 116 } 117 118 func (da *VrfTableDescriptorAdapter) Update(key string, oldValue, newValue proto.Message, oldMetadata Metadata) (newMetadata Metadata, err error) { 119 oldTypedValue, err := castVrfTableValue(key, oldValue) 120 if err != nil { 121 return nil, err 122 } 123 newTypedValue, err := castVrfTableValue(key, newValue) 124 if err != nil { 125 return nil, err 126 } 127 typedOldMetadata, err := castVrfTableMetadata(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 *VrfTableDescriptorAdapter) Delete(key string, value proto.Message, metadata Metadata) error { 135 typedValue, err := castVrfTableValue(key, value) 136 if err != nil { 137 return err 138 } 139 typedMetadata, err := castVrfTableMetadata(key, metadata) 140 if err != nil { 141 return err 142 } 143 return da.descriptor.Delete(key, typedValue, typedMetadata) 144 } 145 146 func (da *VrfTableDescriptorAdapter) UpdateWithRecreate(key string, oldValue, newValue proto.Message, metadata Metadata) bool { 147 oldTypedValue, err := castVrfTableValue(key, oldValue) 148 if err != nil { 149 return true 150 } 151 newTypedValue, err := castVrfTableValue(key, newValue) 152 if err != nil { 153 return true 154 } 155 typedMetadata, err := castVrfTableMetadata(key, metadata) 156 if err != nil { 157 return true 158 } 159 return da.descriptor.UpdateWithRecreate(key, oldTypedValue, newTypedValue, typedMetadata) 160 } 161 162 func (da *VrfTableDescriptorAdapter) Retrieve(correlate []KVWithMetadata) ([]KVWithMetadata, error) { 163 var correlateWithType []VrfTableKVWithMetadata 164 for _, kvpair := range correlate { 165 typedValue, err := castVrfTableValue(kvpair.Key, kvpair.Value) 166 if err != nil { 167 continue 168 } 169 typedMetadata, err := castVrfTableMetadata(kvpair.Key, kvpair.Metadata) 170 if err != nil { 171 continue 172 } 173 correlateWithType = append(correlateWithType, 174 VrfTableKVWithMetadata{ 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 *VrfTableDescriptorAdapter) DerivedValues(key string, value proto.Message) []KeyValuePair { 200 typedValue, err := castVrfTableValue(key, value) 201 if err != nil { 202 return nil 203 } 204 return da.descriptor.DerivedValues(key, typedValue) 205 } 206 207 func (da *VrfTableDescriptorAdapter) Dependencies(key string, value proto.Message) []Dependency { 208 typedValue, err := castVrfTableValue(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 castVrfTableValue(key string, value proto.Message) (*vpp_l3.VrfTable, error) { 218 typedValue, ok := value.(*vpp_l3.VrfTable) 219 if !ok { 220 return nil, ErrInvalidValueType(key, value) 221 } 222 return typedValue, nil 223 } 224 225 func castVrfTableMetadata(key string, metadata Metadata) (*vrfidx.VRFMetadata, error) { 226 if metadata == nil { 227 return nil, nil 228 } 229 typedMetadata, ok := metadata.(*vrfidx.VRFMetadata) 230 if !ok { 231 return nil, ErrInvalidMetadataType(key) 232 } 233 return typedMetadata, nil 234 }