github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/resource/resourcev1/controller/resource_service_binding.go (about) 1 package controller 2 3 import ( 4 "net/url" 5 6 "github.com/IBM-Cloud/bluemix-go/client" 7 "github.com/IBM-Cloud/bluemix-go/crn" 8 "github.com/IBM-Cloud/bluemix-go/helpers" 9 "github.com/IBM-Cloud/bluemix-go/models" 10 "github.com/IBM-Cloud/bluemix-go/rest" 11 ) 12 13 type CreateServiceBindingRequest struct { 14 SourceCRN crn.CRN `json:"source_crn"` 15 TargetCRN crn.CRN `json:"target_crn"` 16 Parameters map[string]interface{} `json:"parameters,omitempty"` 17 } 18 19 type ResourceServiceBindingRepository interface { 20 ListBindings(cb func(models.ServiceBinding) bool) error 21 GetBinding(bindingID string) (models.ServiceBinding, error) 22 CreateBinding(CreateServiceBindingRequest) (models.ServiceBinding, error) 23 DeleteBinding(bindingID string) error 24 } 25 26 type serviceBindingRepository struct { 27 client *client.Client 28 } 29 30 func newServiceBindingRepository(c *client.Client) ResourceServiceBindingRepository { 31 return &serviceBindingRepository{ 32 client: c, 33 } 34 } 35 36 func (r *serviceBindingRepository) ListBindings(cb func(models.ServiceBinding) bool) error { 37 listRequest := rest.GetRequest("/v1/resource_bindings") 38 req, err := listRequest.Build() 39 if err != nil { 40 return err 41 } 42 43 _, err = r.client.GetPaginated( 44 req.URL.String(), 45 NewRCPaginatedResources(models.ServiceBinding{}), 46 func(resource interface{}) bool { 47 if binding, ok := resource.(models.ServiceBinding); ok { 48 return cb(binding) 49 } 50 return false 51 }) 52 53 return err 54 } 55 56 func (r *serviceBindingRepository) CreateBinding(createBindingRequest CreateServiceBindingRequest) (models.ServiceBinding, error) { 57 resp := models.ServiceBinding{} 58 _, err := r.client.Post("/v1/resource_bindings", createBindingRequest, &resp) 59 if err != nil { 60 return resp, err 61 } 62 return resp, nil 63 } 64 65 func (r *serviceBindingRepository) GetBinding(bindingID string) (models.ServiceBinding, error) { 66 resp := models.ServiceBinding{} 67 request := rest.GetRequest(helpers.GetFullURL(*r.client.Config.Endpoint, "/v1/resource_bindings/"+url.PathEscape(bindingID))) 68 _, err := r.client.SendRequest(request, &resp) 69 if err != nil { 70 return resp, err 71 } 72 return resp, nil 73 74 } 75 76 func (r *serviceBindingRepository) DeleteBinding(bindingID string) error { 77 request := rest.DeleteRequest(helpers.GetFullURL(*r.client.Config.Endpoint, "/v1/resource_bindings/"+url.PathEscape(bindingID))).Query("id", url.PathEscape(bindingID)) 78 _, err := r.client.SendRequest(request, nil) 79 return err 80 }