github.com/gophercloud/gophercloud@v1.11.0/openstack/networking/v2/extensions/layer3/extraroutes/requests.go (about)

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