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