1// +build go1.13
2
3// Copyright (c) Microsoft Corporation. All rights reserved.
4// Licensed under the MIT License. See License.txt in the project root for license information.
5// Code generated by Microsoft (R) AutoRest Code Generator.
6// Changes may cause incorrect behavior and will be lost if the code is regenerated.
7
8package armnetwork
9
10import (
11	"context"
12	"errors"
13	"fmt"
14	"github.com/Azure/azure-sdk-for-go/sdk/armcore"
15	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
16	"net/http"
17	"net/url"
18	"strings"
19)
20
21// LoadBalancerOutboundRulesClient contains the methods for the LoadBalancerOutboundRules group.
22// Don't use this type directly, use NewLoadBalancerOutboundRulesClient() instead.
23type LoadBalancerOutboundRulesClient struct {
24	con            *armcore.Connection
25	subscriptionID string
26}
27
28// NewLoadBalancerOutboundRulesClient creates a new instance of LoadBalancerOutboundRulesClient with the specified values.
29func NewLoadBalancerOutboundRulesClient(con *armcore.Connection, subscriptionID string) *LoadBalancerOutboundRulesClient {
30	return &LoadBalancerOutboundRulesClient{con: con, subscriptionID: subscriptionID}
31}
32
33// Get - Gets the specified load balancer outbound rule.
34// If the operation fails it returns the *CloudError error type.
35func (client *LoadBalancerOutboundRulesClient) Get(ctx context.Context, resourceGroupName string, loadBalancerName string, outboundRuleName string, options *LoadBalancerOutboundRulesGetOptions) (OutboundRuleResponse, error) {
36	req, err := client.getCreateRequest(ctx, resourceGroupName, loadBalancerName, outboundRuleName, options)
37	if err != nil {
38		return OutboundRuleResponse{}, err
39	}
40	resp, err := client.con.Pipeline().Do(req)
41	if err != nil {
42		return OutboundRuleResponse{}, err
43	}
44	if !resp.HasStatusCode(http.StatusOK) {
45		return OutboundRuleResponse{}, client.getHandleError(resp)
46	}
47	return client.getHandleResponse(resp)
48}
49
50// getCreateRequest creates the Get request.
51func (client *LoadBalancerOutboundRulesClient) getCreateRequest(ctx context.Context, resourceGroupName string, loadBalancerName string, outboundRuleName string, options *LoadBalancerOutboundRulesGetOptions) (*azcore.Request, error) {
52	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/outboundRules/{outboundRuleName}"
53	if resourceGroupName == "" {
54		return nil, errors.New("parameter resourceGroupName cannot be empty")
55	}
56	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
57	if loadBalancerName == "" {
58		return nil, errors.New("parameter loadBalancerName cannot be empty")
59	}
60	urlPath = strings.ReplaceAll(urlPath, "{loadBalancerName}", url.PathEscape(loadBalancerName))
61	if outboundRuleName == "" {
62		return nil, errors.New("parameter outboundRuleName cannot be empty")
63	}
64	urlPath = strings.ReplaceAll(urlPath, "{outboundRuleName}", url.PathEscape(outboundRuleName))
65	if client.subscriptionID == "" {
66		return nil, errors.New("parameter client.subscriptionID cannot be empty")
67	}
68	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
69	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
70	if err != nil {
71		return nil, err
72	}
73	req.Telemetry(telemetryInfo)
74	reqQP := req.URL.Query()
75	reqQP.Set("api-version", "2021-02-01")
76	req.URL.RawQuery = reqQP.Encode()
77	req.Header.Set("Accept", "application/json")
78	return req, nil
79}
80
81// getHandleResponse handles the Get response.
82func (client *LoadBalancerOutboundRulesClient) getHandleResponse(resp *azcore.Response) (OutboundRuleResponse, error) {
83	var val *OutboundRule
84	if err := resp.UnmarshalAsJSON(&val); err != nil {
85		return OutboundRuleResponse{}, err
86	}
87	return OutboundRuleResponse{RawResponse: resp.Response, OutboundRule: val}, nil
88}
89
90// getHandleError handles the Get error response.
91func (client *LoadBalancerOutboundRulesClient) getHandleError(resp *azcore.Response) error {
92	body, err := resp.Payload()
93	if err != nil {
94		return azcore.NewResponseError(err, resp.Response)
95	}
96	errType := CloudError{raw: string(body)}
97	if err := resp.UnmarshalAsJSON(&errType); err != nil {
98		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
99	}
100	return azcore.NewResponseError(&errType, resp.Response)
101}
102
103// List - Gets all the outbound rules in a load balancer.
104// If the operation fails it returns the *CloudError error type.
105func (client *LoadBalancerOutboundRulesClient) List(resourceGroupName string, loadBalancerName string, options *LoadBalancerOutboundRulesListOptions) LoadBalancerOutboundRuleListResultPager {
106	return &loadBalancerOutboundRuleListResultPager{
107		pipeline: client.con.Pipeline(),
108		requester: func(ctx context.Context) (*azcore.Request, error) {
109			return client.listCreateRequest(ctx, resourceGroupName, loadBalancerName, options)
110		},
111		responder: client.listHandleResponse,
112		errorer:   client.listHandleError,
113		advancer: func(ctx context.Context, resp LoadBalancerOutboundRuleListResultResponse) (*azcore.Request, error) {
114			return azcore.NewRequest(ctx, http.MethodGet, *resp.LoadBalancerOutboundRuleListResult.NextLink)
115		},
116		statusCodes: []int{http.StatusOK},
117	}
118}
119
120// listCreateRequest creates the List request.
121func (client *LoadBalancerOutboundRulesClient) listCreateRequest(ctx context.Context, resourceGroupName string, loadBalancerName string, options *LoadBalancerOutboundRulesListOptions) (*azcore.Request, error) {
122	urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/outboundRules"
123	if resourceGroupName == "" {
124		return nil, errors.New("parameter resourceGroupName cannot be empty")
125	}
126	urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName))
127	if loadBalancerName == "" {
128		return nil, errors.New("parameter loadBalancerName cannot be empty")
129	}
130	urlPath = strings.ReplaceAll(urlPath, "{loadBalancerName}", url.PathEscape(loadBalancerName))
131	if client.subscriptionID == "" {
132		return nil, errors.New("parameter client.subscriptionID cannot be empty")
133	}
134	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
135	req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath))
136	if err != nil {
137		return nil, err
138	}
139	req.Telemetry(telemetryInfo)
140	reqQP := req.URL.Query()
141	reqQP.Set("api-version", "2021-02-01")
142	req.URL.RawQuery = reqQP.Encode()
143	req.Header.Set("Accept", "application/json")
144	return req, nil
145}
146
147// listHandleResponse handles the List response.
148func (client *LoadBalancerOutboundRulesClient) listHandleResponse(resp *azcore.Response) (LoadBalancerOutboundRuleListResultResponse, error) {
149	var val *LoadBalancerOutboundRuleListResult
150	if err := resp.UnmarshalAsJSON(&val); err != nil {
151		return LoadBalancerOutboundRuleListResultResponse{}, err
152	}
153	return LoadBalancerOutboundRuleListResultResponse{RawResponse: resp.Response, LoadBalancerOutboundRuleListResult: val}, nil
154}
155
156// listHandleError handles the List error response.
157func (client *LoadBalancerOutboundRulesClient) listHandleError(resp *azcore.Response) error {
158	body, err := resp.Payload()
159	if err != nil {
160		return azcore.NewResponseError(err, resp.Response)
161	}
162	errType := CloudError{raw: string(body)}
163	if err := resp.UnmarshalAsJSON(&errType); err != nil {
164		return azcore.NewResponseError(fmt.Errorf("%s\n%s", string(body), err), resp.Response)
165	}
166	return azcore.NewResponseError(&errType, resp.Response)
167}
168