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 armeventgrid 9 10import ( 11 "context" 12 "errors" 13 "github.com/Azure/azure-sdk-for-go/sdk/armcore" 14 "github.com/Azure/azure-sdk-for-go/sdk/azcore" 15 "net/http" 16 "net/url" 17 "strconv" 18 "strings" 19 "time" 20) 21 22// DomainTopicsClient contains the methods for the DomainTopics group. 23// Don't use this type directly, use NewDomainTopicsClient() instead. 24type DomainTopicsClient struct { 25 con *armcore.Connection 26 subscriptionID string 27} 28 29// NewDomainTopicsClient creates a new instance of DomainTopicsClient with the specified values. 30func NewDomainTopicsClient(con *armcore.Connection, subscriptionID string) *DomainTopicsClient { 31 return &DomainTopicsClient{con: con, subscriptionID: subscriptionID} 32} 33 34// BeginCreateOrUpdate - Asynchronously creates or updates a new domain topic with the specified parameters. 35// If the operation fails it returns a generic error. 36func (client *DomainTopicsClient) BeginCreateOrUpdate(ctx context.Context, resourceGroupName string, domainName string, domainTopicName string, options *DomainTopicsBeginCreateOrUpdateOptions) (DomainTopicsCreateOrUpdatePollerResponse, error) { 37 resp, err := client.createOrUpdate(ctx, resourceGroupName, domainName, domainTopicName, options) 38 if err != nil { 39 return DomainTopicsCreateOrUpdatePollerResponse{}, err 40 } 41 result := DomainTopicsCreateOrUpdatePollerResponse{ 42 RawResponse: resp.Response, 43 } 44 pt, err := armcore.NewLROPoller("DomainTopicsClient.CreateOrUpdate", "", resp, client.con.Pipeline(), client.createOrUpdateHandleError) 45 if err != nil { 46 return DomainTopicsCreateOrUpdatePollerResponse{}, err 47 } 48 poller := &domainTopicsCreateOrUpdatePoller{ 49 pt: pt, 50 } 51 result.Poller = poller 52 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (DomainTopicsCreateOrUpdateResponse, error) { 53 return poller.pollUntilDone(ctx, frequency) 54 } 55 return result, nil 56} 57 58// ResumeCreateOrUpdate creates a new DomainTopicsCreateOrUpdatePoller from the specified resume token. 59// token - The value must come from a previous call to DomainTopicsCreateOrUpdatePoller.ResumeToken(). 60func (client *DomainTopicsClient) ResumeCreateOrUpdate(ctx context.Context, token string) (DomainTopicsCreateOrUpdatePollerResponse, error) { 61 pt, err := armcore.NewLROPollerFromResumeToken("DomainTopicsClient.CreateOrUpdate", token, client.con.Pipeline(), client.createOrUpdateHandleError) 62 if err != nil { 63 return DomainTopicsCreateOrUpdatePollerResponse{}, err 64 } 65 poller := &domainTopicsCreateOrUpdatePoller{ 66 pt: pt, 67 } 68 resp, err := poller.Poll(ctx) 69 if err != nil { 70 return DomainTopicsCreateOrUpdatePollerResponse{}, err 71 } 72 result := DomainTopicsCreateOrUpdatePollerResponse{ 73 RawResponse: resp, 74 } 75 result.Poller = poller 76 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (DomainTopicsCreateOrUpdateResponse, error) { 77 return poller.pollUntilDone(ctx, frequency) 78 } 79 return result, nil 80} 81 82// CreateOrUpdate - Asynchronously creates or updates a new domain topic with the specified parameters. 83// If the operation fails it returns a generic error. 84func (client *DomainTopicsClient) createOrUpdate(ctx context.Context, resourceGroupName string, domainName string, domainTopicName string, options *DomainTopicsBeginCreateOrUpdateOptions) (*azcore.Response, error) { 85 req, err := client.createOrUpdateCreateRequest(ctx, resourceGroupName, domainName, domainTopicName, options) 86 if err != nil { 87 return nil, err 88 } 89 resp, err := client.con.Pipeline().Do(req) 90 if err != nil { 91 return nil, err 92 } 93 if !resp.HasStatusCode(http.StatusCreated) { 94 return nil, client.createOrUpdateHandleError(resp) 95 } 96 return resp, nil 97} 98 99// createOrUpdateCreateRequest creates the CreateOrUpdate request. 100func (client *DomainTopicsClient) createOrUpdateCreateRequest(ctx context.Context, resourceGroupName string, domainName string, domainTopicName string, options *DomainTopicsBeginCreateOrUpdateOptions) (*azcore.Request, error) { 101 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/domains/{domainName}/topics/{domainTopicName}" 102 if client.subscriptionID == "" { 103 return nil, errors.New("parameter client.subscriptionID cannot be empty") 104 } 105 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 106 if resourceGroupName == "" { 107 return nil, errors.New("parameter resourceGroupName cannot be empty") 108 } 109 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 110 if domainName == "" { 111 return nil, errors.New("parameter domainName cannot be empty") 112 } 113 urlPath = strings.ReplaceAll(urlPath, "{domainName}", url.PathEscape(domainName)) 114 if domainTopicName == "" { 115 return nil, errors.New("parameter domainTopicName cannot be empty") 116 } 117 urlPath = strings.ReplaceAll(urlPath, "{domainTopicName}", url.PathEscape(domainTopicName)) 118 req, err := azcore.NewRequest(ctx, http.MethodPut, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 119 if err != nil { 120 return nil, err 121 } 122 req.Telemetry(telemetryInfo) 123 reqQP := req.URL.Query() 124 reqQP.Set("api-version", "2021-06-01-preview") 125 req.URL.RawQuery = reqQP.Encode() 126 req.Header.Set("Accept", "application/json") 127 return req, nil 128} 129 130// createOrUpdateHandleError handles the CreateOrUpdate error response. 131func (client *DomainTopicsClient) createOrUpdateHandleError(resp *azcore.Response) error { 132 body, err := resp.Payload() 133 if err != nil { 134 return azcore.NewResponseError(err, resp.Response) 135 } 136 if len(body) == 0 { 137 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 138 } 139 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 140} 141 142// BeginDelete - Delete existing domain topic. 143// If the operation fails it returns a generic error. 144func (client *DomainTopicsClient) BeginDelete(ctx context.Context, resourceGroupName string, domainName string, domainTopicName string, options *DomainTopicsBeginDeleteOptions) (DomainTopicsDeletePollerResponse, error) { 145 resp, err := client.deleteOperation(ctx, resourceGroupName, domainName, domainTopicName, options) 146 if err != nil { 147 return DomainTopicsDeletePollerResponse{}, err 148 } 149 result := DomainTopicsDeletePollerResponse{ 150 RawResponse: resp.Response, 151 } 152 pt, err := armcore.NewLROPoller("DomainTopicsClient.Delete", "", resp, client.con.Pipeline(), client.deleteHandleError) 153 if err != nil { 154 return DomainTopicsDeletePollerResponse{}, err 155 } 156 poller := &domainTopicsDeletePoller{ 157 pt: pt, 158 } 159 result.Poller = poller 160 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (DomainTopicsDeleteResponse, error) { 161 return poller.pollUntilDone(ctx, frequency) 162 } 163 return result, nil 164} 165 166// ResumeDelete creates a new DomainTopicsDeletePoller from the specified resume token. 167// token - The value must come from a previous call to DomainTopicsDeletePoller.ResumeToken(). 168func (client *DomainTopicsClient) ResumeDelete(ctx context.Context, token string) (DomainTopicsDeletePollerResponse, error) { 169 pt, err := armcore.NewLROPollerFromResumeToken("DomainTopicsClient.Delete", token, client.con.Pipeline(), client.deleteHandleError) 170 if err != nil { 171 return DomainTopicsDeletePollerResponse{}, err 172 } 173 poller := &domainTopicsDeletePoller{ 174 pt: pt, 175 } 176 resp, err := poller.Poll(ctx) 177 if err != nil { 178 return DomainTopicsDeletePollerResponse{}, err 179 } 180 result := DomainTopicsDeletePollerResponse{ 181 RawResponse: resp, 182 } 183 result.Poller = poller 184 result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (DomainTopicsDeleteResponse, error) { 185 return poller.pollUntilDone(ctx, frequency) 186 } 187 return result, nil 188} 189 190// Delete - Delete existing domain topic. 191// If the operation fails it returns a generic error. 192func (client *DomainTopicsClient) deleteOperation(ctx context.Context, resourceGroupName string, domainName string, domainTopicName string, options *DomainTopicsBeginDeleteOptions) (*azcore.Response, error) { 193 req, err := client.deleteCreateRequest(ctx, resourceGroupName, domainName, domainTopicName, options) 194 if err != nil { 195 return nil, err 196 } 197 resp, err := client.con.Pipeline().Do(req) 198 if err != nil { 199 return nil, err 200 } 201 if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent) { 202 return nil, client.deleteHandleError(resp) 203 } 204 return resp, nil 205} 206 207// deleteCreateRequest creates the Delete request. 208func (client *DomainTopicsClient) deleteCreateRequest(ctx context.Context, resourceGroupName string, domainName string, domainTopicName string, options *DomainTopicsBeginDeleteOptions) (*azcore.Request, error) { 209 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/domains/{domainName}/topics/{domainTopicName}" 210 if client.subscriptionID == "" { 211 return nil, errors.New("parameter client.subscriptionID cannot be empty") 212 } 213 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 214 if resourceGroupName == "" { 215 return nil, errors.New("parameter resourceGroupName cannot be empty") 216 } 217 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 218 if domainName == "" { 219 return nil, errors.New("parameter domainName cannot be empty") 220 } 221 urlPath = strings.ReplaceAll(urlPath, "{domainName}", url.PathEscape(domainName)) 222 if domainTopicName == "" { 223 return nil, errors.New("parameter domainTopicName cannot be empty") 224 } 225 urlPath = strings.ReplaceAll(urlPath, "{domainTopicName}", url.PathEscape(domainTopicName)) 226 req, err := azcore.NewRequest(ctx, http.MethodDelete, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 227 if err != nil { 228 return nil, err 229 } 230 req.Telemetry(telemetryInfo) 231 reqQP := req.URL.Query() 232 reqQP.Set("api-version", "2021-06-01-preview") 233 req.URL.RawQuery = reqQP.Encode() 234 return req, nil 235} 236 237// deleteHandleError handles the Delete error response. 238func (client *DomainTopicsClient) deleteHandleError(resp *azcore.Response) error { 239 body, err := resp.Payload() 240 if err != nil { 241 return azcore.NewResponseError(err, resp.Response) 242 } 243 if len(body) == 0 { 244 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 245 } 246 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 247} 248 249// Get - Get properties of a domain topic. 250// If the operation fails it returns a generic error. 251func (client *DomainTopicsClient) Get(ctx context.Context, resourceGroupName string, domainName string, domainTopicName string, options *DomainTopicsGetOptions) (DomainTopicsGetResponse, error) { 252 req, err := client.getCreateRequest(ctx, resourceGroupName, domainName, domainTopicName, options) 253 if err != nil { 254 return DomainTopicsGetResponse{}, err 255 } 256 resp, err := client.con.Pipeline().Do(req) 257 if err != nil { 258 return DomainTopicsGetResponse{}, err 259 } 260 if !resp.HasStatusCode(http.StatusOK) { 261 return DomainTopicsGetResponse{}, client.getHandleError(resp) 262 } 263 return client.getHandleResponse(resp) 264} 265 266// getCreateRequest creates the Get request. 267func (client *DomainTopicsClient) getCreateRequest(ctx context.Context, resourceGroupName string, domainName string, domainTopicName string, options *DomainTopicsGetOptions) (*azcore.Request, error) { 268 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/domains/{domainName}/topics/{domainTopicName}" 269 if client.subscriptionID == "" { 270 return nil, errors.New("parameter client.subscriptionID cannot be empty") 271 } 272 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 273 if resourceGroupName == "" { 274 return nil, errors.New("parameter resourceGroupName cannot be empty") 275 } 276 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 277 if domainName == "" { 278 return nil, errors.New("parameter domainName cannot be empty") 279 } 280 urlPath = strings.ReplaceAll(urlPath, "{domainName}", url.PathEscape(domainName)) 281 if domainTopicName == "" { 282 return nil, errors.New("parameter domainTopicName cannot be empty") 283 } 284 urlPath = strings.ReplaceAll(urlPath, "{domainTopicName}", url.PathEscape(domainTopicName)) 285 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 286 if err != nil { 287 return nil, err 288 } 289 req.Telemetry(telemetryInfo) 290 reqQP := req.URL.Query() 291 reqQP.Set("api-version", "2021-06-01-preview") 292 req.URL.RawQuery = reqQP.Encode() 293 req.Header.Set("Accept", "application/json") 294 return req, nil 295} 296 297// getHandleResponse handles the Get response. 298func (client *DomainTopicsClient) getHandleResponse(resp *azcore.Response) (DomainTopicsGetResponse, error) { 299 result := DomainTopicsGetResponse{RawResponse: resp.Response} 300 if err := resp.UnmarshalAsJSON(&result.DomainTopic); err != nil { 301 return DomainTopicsGetResponse{}, err 302 } 303 return result, nil 304} 305 306// getHandleError handles the Get error response. 307func (client *DomainTopicsClient) getHandleError(resp *azcore.Response) error { 308 body, err := resp.Payload() 309 if err != nil { 310 return azcore.NewResponseError(err, resp.Response) 311 } 312 if len(body) == 0 { 313 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 314 } 315 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 316} 317 318// ListByDomain - List all the topics in a domain. 319// If the operation fails it returns a generic error. 320func (client *DomainTopicsClient) ListByDomain(resourceGroupName string, domainName string, options *DomainTopicsListByDomainOptions) DomainTopicsListByDomainPager { 321 return &domainTopicsListByDomainPager{ 322 client: client, 323 requester: func(ctx context.Context) (*azcore.Request, error) { 324 return client.listByDomainCreateRequest(ctx, resourceGroupName, domainName, options) 325 }, 326 advancer: func(ctx context.Context, resp DomainTopicsListByDomainResponse) (*azcore.Request, error) { 327 return azcore.NewRequest(ctx, http.MethodGet, *resp.DomainTopicsListResult.NextLink) 328 }, 329 } 330} 331 332// listByDomainCreateRequest creates the ListByDomain request. 333func (client *DomainTopicsClient) listByDomainCreateRequest(ctx context.Context, resourceGroupName string, domainName string, options *DomainTopicsListByDomainOptions) (*azcore.Request, error) { 334 urlPath := "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/domains/{domainName}/topics" 335 if client.subscriptionID == "" { 336 return nil, errors.New("parameter client.subscriptionID cannot be empty") 337 } 338 urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID)) 339 if resourceGroupName == "" { 340 return nil, errors.New("parameter resourceGroupName cannot be empty") 341 } 342 urlPath = strings.ReplaceAll(urlPath, "{resourceGroupName}", url.PathEscape(resourceGroupName)) 343 if domainName == "" { 344 return nil, errors.New("parameter domainName cannot be empty") 345 } 346 urlPath = strings.ReplaceAll(urlPath, "{domainName}", url.PathEscape(domainName)) 347 req, err := azcore.NewRequest(ctx, http.MethodGet, azcore.JoinPaths(client.con.Endpoint(), urlPath)) 348 if err != nil { 349 return nil, err 350 } 351 req.Telemetry(telemetryInfo) 352 reqQP := req.URL.Query() 353 reqQP.Set("api-version", "2021-06-01-preview") 354 if options != nil && options.Filter != nil { 355 reqQP.Set("$filter", *options.Filter) 356 } 357 if options != nil && options.Top != nil { 358 reqQP.Set("$top", strconv.FormatInt(int64(*options.Top), 10)) 359 } 360 req.URL.RawQuery = reqQP.Encode() 361 req.Header.Set("Accept", "application/json") 362 return req, nil 363} 364 365// listByDomainHandleResponse handles the ListByDomain response. 366func (client *DomainTopicsClient) listByDomainHandleResponse(resp *azcore.Response) (DomainTopicsListByDomainResponse, error) { 367 result := DomainTopicsListByDomainResponse{RawResponse: resp.Response} 368 if err := resp.UnmarshalAsJSON(&result.DomainTopicsListResult); err != nil { 369 return DomainTopicsListByDomainResponse{}, err 370 } 371 return result, nil 372} 373 374// listByDomainHandleError handles the ListByDomain error response. 375func (client *DomainTopicsClient) listByDomainHandleError(resp *azcore.Response) error { 376 body, err := resp.Payload() 377 if err != nil { 378 return azcore.NewResponseError(err, resp.Response) 379 } 380 if len(body) == 0 { 381 return azcore.NewResponseError(errors.New(resp.Status), resp.Response) 382 } 383 return azcore.NewResponseError(errors.New(string(body)), resp.Response) 384} 385