regions_availability.go raw

   1  package linodego
   2  
   3  import (
   4  	"context"
   5  )
   6  
   7  // RegionAvailability represents a linode region object
   8  type RegionAvailability struct {
   9  	Region    string `json:"region"`
  10  	Plan      string `json:"plan"`
  11  	Available bool   `json:"available"`
  12  }
  13  
  14  // ListRegionsAvailability lists Regions. This endpoint is cached by default.
  15  func (c *Client) ListRegionsAvailability(ctx context.Context, opts *ListOptions) ([]RegionAvailability, error) {
  16  	e := "regions/availability"
  17  
  18  	endpoint, err := generateListCacheURL(e, opts)
  19  	if err != nil {
  20  		return nil, err
  21  	}
  22  
  23  	if result := c.getCachedResponse(endpoint); result != nil {
  24  		return result.([]RegionAvailability), nil
  25  	}
  26  
  27  	response, err := getPaginatedResults[RegionAvailability](ctx, c, e, opts)
  28  	if err != nil {
  29  		return nil, err
  30  	}
  31  
  32  	c.addCachedResponse(endpoint, response, &cacheExpiryTime)
  33  
  34  	return response, nil
  35  }
  36  
  37  // GetRegionAvailability gets the template with the provided ID. This endpoint is cached by default.
  38  func (c *Client) GetRegionAvailability(ctx context.Context, regionID string) (*RegionAvailability, error) {
  39  	e := formatAPIPath("regions/%s/availability", regionID)
  40  
  41  	if result := c.getCachedResponse(e); result != nil {
  42  		result := result.(RegionAvailability)
  43  		return &result, nil
  44  	}
  45  
  46  	response, err := doGETRequest[RegionAvailability](ctx, c, e)
  47  	if err != nil {
  48  		return nil, err
  49  	}
  50  
  51  	c.addCachedResponse(e, response, &cacheExpiryTime)
  52  
  53  	return response, nil
  54  }
  55