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  }