1package network
2
3import (
4	liquidweb "github.com/liquidweb/liquidweb-go"
5)
6
7// LoadBalancerBackend describes the interface for interactions with the API.
8type LoadBalancerBackend interface {
9	Create(LoadBalancerParams) (*LoadBalancer, error)
10	Details(string) (*LoadBalancer, error)
11	Update(LoadBalancerParams) (*LoadBalancer, error)
12	Delete(string) (*LoadBalancerDeletion, error)
13}
14
15// LoadBalancerClient is the backend implementation for interacting with the API.
16type LoadBalancerClient struct {
17	Backend liquidweb.Backend
18}
19
20// Create creates a new load balancer.
21func (c *LoadBalancerClient) Create(params LoadBalancerParams) (*LoadBalancer, error) {
22	var result LoadBalancer
23	err := c.Backend.CallIntoInterface("v1/Network/LoadBalancer/create", params, &result)
24	if err != nil {
25		return nil, err
26	}
27
28	return &result, nil
29}
30
31// Details returns details about a load balancer.
32func (c *LoadBalancerClient) Details(uniqID string) (*LoadBalancer, error) {
33	var result LoadBalancer
34	params := LoadBalancerParams{UniqID: uniqID}
35
36	err := c.Backend.CallIntoInterface("v1/Network/LoadBalancer/details", params, &result)
37	if err != nil {
38		return nil, err
39	}
40
41	return &result, nil
42}
43
44// Update will update a load balancer.
45func (c *LoadBalancerClient) Update(params LoadBalancerParams) (*LoadBalancer, error) {
46	var result LoadBalancer
47	err := c.Backend.CallIntoInterface("v1/Network/LoadBalancer/update", params, &result)
48	if err != nil {
49		return nil, err
50	}
51	return &result, nil
52}
53
54// Delete will delete a load balancer.
55func (c *LoadBalancerClient) Delete(uniqID string) (*LoadBalancerDeletion, error) {
56	var result LoadBalancerDeletion
57	params := LoadBalancerParams{UniqID: uniqID}
58
59	err := c.Backend.CallIntoInterface("v1/Network/LoadBalancer/delete", params, &result)
60	if err != nil {
61		return nil, err
62	}
63	return &result, nil
64}
65