github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/openstack/networking/v2/extensions/layer3/extraroutes/requests.go (about) 1 package extraroutes 2 3 import ( 4 "context" 5 6 "github.com/vnpaycloud-console/gophercloud/v2" 7 "github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/extensions/layer3/routers" 8 ) 9 10 // OptsBuilder allows extensions to add additional parameters to the Add or 11 // Remove requests. 12 type OptsBuilder interface { 13 ToExtraRoutesUpdateMap() (map[string]any, error) 14 } 15 16 // Opts contains the values needed to add or remove a list og routes on a 17 // router. 18 type Opts struct { 19 Routes *[]routers.Route `json:"routes,omitempty"` 20 } 21 22 // ToExtraRoutesUpdateMap builds a body based on Opts. 23 func (opts Opts) ToExtraRoutesUpdateMap() (map[string]any, error) { 24 return gophercloud.BuildRequestBody(opts, "router") 25 } 26 27 // Add allows routers to be updated with a list of routes to be added. 28 func Add(ctx context.Context, c *gophercloud.ServiceClient, id string, opts OptsBuilder) (r AddResult) { 29 b, err := opts.ToExtraRoutesUpdateMap() 30 if err != nil { 31 r.Err = err 32 return 33 } 34 resp, err := c.Put(ctx, addExtraRoutesURL(c, id), b, &r.Body, &gophercloud.RequestOpts{ 35 OkCodes: []int{200}, 36 }) 37 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 38 return 39 } 40 41 // Remove allows routers to be updated with a list of routes to be removed. 42 func Remove(ctx context.Context, c *gophercloud.ServiceClient, id string, opts OptsBuilder) (r RemoveResult) { 43 b, err := opts.ToExtraRoutesUpdateMap() 44 if err != nil { 45 r.Err = err 46 return 47 } 48 resp, err := c.Put(ctx, removeExtraRoutesURL(c, id), b, &r.Body, &gophercloud.RequestOpts{ 49 OkCodes: []int{200}, 50 }) 51 _, r.Header, r.Err = gophercloud.ParseResponse(resp, err) 52 return 53 }