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