github.com/line/line-bot-sdk-go/v7@v7.21.0/linebot/audience.go (about) 1 package linebot 2 3 import ( 4 "bytes" 5 "context" 6 "encoding/json" 7 "fmt" 8 "io" 9 "net/url" 10 "strconv" 11 "strings" 12 ) 13 14 // AudienceStatusType type 15 type AudienceStatusType string 16 17 // String method 18 func (a AudienceStatusType) String() string { 19 return string(a) 20 } 21 22 const ( 23 // INPROGRESS const 24 INPROGRESS AudienceStatusType = "IN_PROGRESS" 25 // READY const 26 READY AudienceStatusType = "READY" 27 // FAILED const 28 FAILED AudienceStatusType = "FAILED" 29 // EXPIRED const 30 EXPIRED AudienceStatusType = "EXPIRED" 31 // INACTIVE const 32 INACTIVE AudienceStatusType = "INACTIVE" 33 // ACTIVATING const 34 ACTIVATING AudienceStatusType = "ACTIVATING" 35 ) 36 37 // AudienceAuthorityLevelType type 38 type AudienceAuthorityLevelType string 39 40 // String method 41 func (a AudienceAuthorityLevelType) String() string { 42 return string(a) 43 } 44 45 const ( 46 // PUBLIC const 47 PUBLIC AudienceAuthorityLevelType = "PUBLIC" 48 // PRIVATE const 49 PRIVATE AudienceAuthorityLevelType = "PRIVATE" 50 ) 51 52 // IUploadAudienceGroupOption type 53 type IUploadAudienceGroupOption interface { 54 Apply(call *UploadAudienceGroupCall) 55 } 56 57 // WithUploadAudienceGroupCallIsIfaAudience func 58 func WithUploadAudienceGroupCallIsIfaAudience(isIfaAudience bool) IUploadAudienceGroupOption { 59 return &withUploadAudienceGroupCallIsIfaAudience{ 60 isIfaAudience: isIfaAudience, 61 } 62 } 63 64 type withUploadAudienceGroupCallIsIfaAudience struct { 65 isIfaAudience bool 66 } 67 68 func (w *withUploadAudienceGroupCallIsIfaAudience) Apply(call *UploadAudienceGroupCall) { 69 call.IsIfaAudience = w.isIfaAudience 70 } 71 72 // WithUploadAudienceGroupCallUploadDescription func 73 func WithUploadAudienceGroupCallUploadDescription(uploadDescription string) IUploadAudienceGroupOption { 74 return &withUploadAudienceGroupCallUploadDescription{ 75 uploadDescription: uploadDescription, 76 } 77 } 78 79 type withUploadAudienceGroupCallUploadDescription struct { 80 uploadDescription string 81 } 82 83 func (w *withUploadAudienceGroupCallUploadDescription) Apply(call *UploadAudienceGroupCall) { 84 call.UploadDescription = w.uploadDescription 85 } 86 87 // WithUploadAudienceGroupCallAudiences func 88 func WithUploadAudienceGroupCallAudiences(audiences ...string) IUploadAudienceGroupOption { 89 return &withUploadAudienceGroupCallAudiences{ 90 audiences: audiences, 91 } 92 } 93 94 type withUploadAudienceGroupCallAudiences struct { 95 audiences []string 96 } 97 98 func (w *withUploadAudienceGroupCallAudiences) Apply(call *UploadAudienceGroupCall) { 99 for _, item := range w.audiences { 100 call.Audiences = append(call.Audiences, audience{ID: item}) 101 } 102 } 103 104 // UploadAudienceGroup method 105 func (client *Client) UploadAudienceGroup(description string, options ...IUploadAudienceGroupOption) *UploadAudienceGroupCall { 106 call := &UploadAudienceGroupCall{ 107 c: client, 108 Description: description, 109 } 110 for _, item := range options { 111 item.Apply(call) 112 } 113 return call 114 } 115 116 type audience struct { 117 ID string `json:"id,omitempty"` 118 } 119 120 // UploadAudienceGroupCall type 121 type UploadAudienceGroupCall struct { 122 c *Client 123 ctx context.Context 124 Description string `validate:"required,max=120"` 125 IsIfaAudience bool 126 UploadDescription string 127 Audiences []audience `validate:"max=10000"` 128 } 129 130 // WithContext method 131 func (call *UploadAudienceGroupCall) WithContext(ctx context.Context) *UploadAudienceGroupCall { 132 call.ctx = ctx 133 return call 134 } 135 136 func (call *UploadAudienceGroupCall) encodeJSON(w io.Writer) error { 137 enc := json.NewEncoder(w) 138 return enc.Encode(struct { 139 Description string `json:"description,omitempty"` 140 IsIfaAudience bool `json:"isIfaAudience,omitempty"` 141 UploadDescription string `json:"uploadDescription,omitempty"` 142 Audiences []audience `json:"audiences,omitempty"` 143 }{ 144 Description: call.Description, 145 IsIfaAudience: call.IsIfaAudience, 146 UploadDescription: call.UploadDescription, 147 Audiences: call.Audiences, 148 }) 149 } 150 151 // Do method 152 func (call *UploadAudienceGroupCall) Do() (*UploadAudienceGroupResponse, error) { 153 var buf bytes.Buffer 154 if err := call.encodeJSON(&buf); err != nil { 155 return nil, err 156 } 157 res, err := call.c.post(call.ctx, APIAudienceGroupUpload, &buf) 158 if err != nil { 159 return nil, err 160 } 161 defer closeResponse(res) 162 return decodeToAudienceGroupResponse(res) 163 } 164 165 // IUploadAudienceGroupByFileOption type 166 type IUploadAudienceGroupByFileOption interface { 167 Apply(call *UploadAudienceGroupByFileCall) 168 } 169 170 // WithUploadAudienceGroupByFileCallIsIfaAudience func 171 func WithUploadAudienceGroupByFileCallIsIfaAudience(isIfaAudience bool) IUploadAudienceGroupByFileOption { 172 return &withUploadAudienceGroupByFileCallIsIfaAudience{ 173 isIfaAudience: isIfaAudience, 174 } 175 } 176 177 type withUploadAudienceGroupByFileCallIsIfaAudience struct { 178 isIfaAudience bool 179 } 180 181 func (w *withUploadAudienceGroupByFileCallIsIfaAudience) Apply(call *UploadAudienceGroupByFileCall) { 182 call.IsIfaAudience = w.isIfaAudience 183 } 184 185 // WithUploadAudienceGroupByFileCallUploadDescription func 186 func WithUploadAudienceGroupByFileCallUploadDescription(uploadDescription string) IUploadAudienceGroupByFileOption { 187 return &withUploadAudienceGroupByFileCallUploadDescription{ 188 uploadDescription: uploadDescription, 189 } 190 } 191 192 type withUploadAudienceGroupByFileCallUploadDescription struct { 193 uploadDescription string 194 } 195 196 func (w *withUploadAudienceGroupByFileCallUploadDescription) Apply(call *UploadAudienceGroupByFileCall) { 197 call.UploadDescription = w.uploadDescription 198 } 199 200 // UploadAudienceGroupByFile method 201 func (client *Client) UploadAudienceGroupByFile(description string, audiences []string, options ...IUploadAudienceGroupByFileOption) *UploadAudienceGroupByFileCall { 202 call := &UploadAudienceGroupByFileCall{ 203 c: client, 204 Description: description, 205 Audiences: audiences, 206 } 207 for _, item := range options { 208 item.Apply(call) 209 } 210 return call 211 } 212 213 // UploadAudienceGroupByFileCall type 214 type UploadAudienceGroupByFileCall struct { 215 c *Client 216 ctx context.Context 217 Description string `json:"description,omitempty" validate:"required,max=120"` 218 IsIfaAudience bool `json:"isIfaAudience,omitempty"` 219 UploadDescription string `json:"uploadDescription,omitempty"` 220 Audiences []string `json:"audiences,omitempty" validate:"max=1500000"` 221 } 222 223 // WithContext method 224 func (call *UploadAudienceGroupByFileCall) WithContext(ctx context.Context) *UploadAudienceGroupByFileCall { 225 call.ctx = ctx 226 return call 227 } 228 229 // Do method 230 func (call *UploadAudienceGroupByFileCall) Do() (*UploadAudienceGroupResponse, error) { 231 buf := bytes.NewBuffer([]byte{}) 232 defer buf.Reset() 233 _, errWriteString := buf.WriteString(strings.Join(call.Audiences, "\n")) 234 if errWriteString != nil { 235 return nil, errWriteString 236 } 237 238 form := map[string]io.Reader{ 239 "description": strings.NewReader(call.Description), 240 "file": buf, 241 } 242 if call.IsIfaAudience { 243 form["isIfaAudience"] = strings.NewReader(strconv.FormatBool(call.IsIfaAudience)) 244 } 245 if call.UploadDescription != "" { 246 form["uploadDescription"] = strings.NewReader(call.UploadDescription) 247 } 248 res, err := call.c.postFormFile(call.ctx, APIAudienceGroupUploadByFile, form) 249 if err != nil { 250 return nil, err 251 } 252 defer closeResponse(res) 253 return decodeToAudienceGroupResponse(res) 254 } 255 256 // IAddAudiencesOption type 257 type IAddAudiencesOption interface { 258 Apply(call *AddAudiencesCall) 259 } 260 261 // WithAddAudiencesCallUploadDescription type 262 func WithAddAudiencesCallUploadDescription(uploadDescription string) IAddAudiencesOption { 263 return &withAddAudiencesCallUploadDescription{ 264 uploadDescription: uploadDescription, 265 } 266 } 267 268 type withAddAudiencesCallUploadDescription struct { 269 uploadDescription string 270 } 271 272 func (w *withAddAudiencesCallUploadDescription) Apply(call *AddAudiencesCall) { 273 call.UploadDescription = w.uploadDescription 274 } 275 276 // AddAudiences method 277 func (client *Client) AddAudiences(audienceGroupID int, audiences []string, options ...IAddAudiencesOption) *AddAudiencesCall { 278 call := &AddAudiencesCall{ 279 c: client, 280 AudienceGroupID: audienceGroupID, 281 } 282 for _, item := range audiences { 283 call.Audiences = append(call.Audiences, audience{ID: item}) 284 } 285 for _, item := range options { 286 item.Apply(call) 287 } 288 return call 289 } 290 291 // AddAudiencesCall type 292 type AddAudiencesCall struct { 293 c *Client 294 ctx context.Context 295 AudienceGroupID int `validate:"required"` 296 UploadDescription string 297 Audiences []audience `validate:"required,max=10000"` 298 } 299 300 // WithContext method 301 func (call *AddAudiencesCall) WithContext(ctx context.Context) *AddAudiencesCall { 302 call.ctx = ctx 303 return call 304 } 305 306 func (call *AddAudiencesCall) encodeJSON(w io.Writer) error { 307 enc := json.NewEncoder(w) 308 return enc.Encode(struct { 309 AudienceGroupID int `json:"audienceGroupId,omitempty"` 310 UploadDescription string `json:"uploadDescription,omitempty"` 311 Audiences []audience `json:"audiences,omitempty"` 312 }{ 313 AudienceGroupID: call.AudienceGroupID, 314 UploadDescription: call.UploadDescription, 315 Audiences: call.Audiences, 316 }) 317 } 318 319 // Do method 320 func (call *AddAudiencesCall) Do() (*BasicResponse, error) { 321 var buf bytes.Buffer 322 if err := call.encodeJSON(&buf); err != nil { 323 return nil, err 324 } 325 res, err := call.c.put(call.ctx, APIAudienceGroupUpload, &buf) 326 if err != nil { 327 return nil, err 328 } 329 defer closeResponse(res) 330 return decodeToBasicResponse(res) 331 } 332 333 // IAddAudiencesByFileOption type 334 type IAddAudiencesByFileOption interface { 335 Apply(call *AddAudiencesByFileCall) 336 } 337 338 // WithAddAudiencesByFileCallUploadDescription func 339 func WithAddAudiencesByFileCallUploadDescription(uploadDescription string) IAddAudiencesByFileOption { 340 return &withAddAudiencesByFileCallUploadDescription{ 341 uploadDescription: uploadDescription, 342 } 343 } 344 345 type withAddAudiencesByFileCallUploadDescription struct { 346 uploadDescription string 347 } 348 349 func (w *withAddAudiencesByFileCallUploadDescription) Apply(call *AddAudiencesByFileCall) { 350 call.UploadDescription = w.uploadDescription 351 } 352 353 // AddAudiencesByFile method 354 func (client *Client) AddAudiencesByFile(audienceGroupID int, audiences []string, options ...IAddAudiencesByFileOption) *AddAudiencesByFileCall { 355 call := &AddAudiencesByFileCall{ 356 c: client, 357 AudienceGroupID: audienceGroupID, 358 Audiences: audiences, 359 } 360 for _, item := range options { 361 item.Apply(call) 362 } 363 return call 364 } 365 366 // AddAudiencesByFileCall type 367 type AddAudiencesByFileCall struct { 368 c *Client 369 ctx context.Context 370 AudienceGroupID int `json:"audienceGroupId,omitempty" validate:"required"` 371 UploadDescription string `json:"uploadDescription,omitempty"` 372 Audiences []string `json:"audiences,omitempty" validate:"required,max=1500000"` 373 } 374 375 // WithContext method 376 func (call *AddAudiencesByFileCall) WithContext(ctx context.Context) *AddAudiencesByFileCall { 377 call.ctx = ctx 378 return call 379 } 380 381 // Do method 382 func (call *AddAudiencesByFileCall) Do() (*BasicResponse, error) { 383 buf := bytes.NewBuffer([]byte{}) 384 defer buf.Reset() 385 _, errWriteString := buf.WriteString(strings.Join(call.Audiences, "\n")) 386 if errWriteString != nil { 387 return nil, errWriteString 388 } 389 390 form := map[string]io.Reader{ 391 "audienceGroupId": strings.NewReader(strconv.FormatInt(int64(call.AudienceGroupID), 10)), 392 "file": buf, 393 } 394 if call.UploadDescription != "" { 395 form["uploadDescription"] = strings.NewReader(call.UploadDescription) 396 } 397 res, err := call.c.putFormFile(call.ctx, APIAudienceGroupUploadByFile, form) 398 if err != nil { 399 return nil, err 400 } 401 defer closeResponse(res) 402 return decodeToBasicResponse(res) 403 } 404 405 // IClickAudienceGroupOption type 406 type IClickAudienceGroupOption interface { 407 Apply(call *ClickAudienceGroupCall) 408 } 409 410 // WithClickAudienceGroupCallClickURL func 411 func WithClickAudienceGroupCallClickURL(clickURL string) IClickAudienceGroupOption { 412 return &withClickAudienceGroupCallClickURL{ 413 clickURL: clickURL, 414 } 415 } 416 417 type withClickAudienceGroupCallClickURL struct { 418 clickURL string 419 } 420 421 func (w *withClickAudienceGroupCallClickURL) Apply(call *ClickAudienceGroupCall) { 422 call.ClickURL = w.clickURL 423 } 424 425 // ClickAudienceGroup method 426 func (client *Client) ClickAudienceGroup(description, requestID string, options ...IClickAudienceGroupOption) *ClickAudienceGroupCall { 427 call := &ClickAudienceGroupCall{ 428 c: client, 429 Description: description, 430 RequestID: requestID, 431 } 432 for _, item := range options { 433 item.Apply(call) 434 } 435 return call 436 } 437 438 // ClickAudienceGroupCall type 439 type ClickAudienceGroupCall struct { 440 c *Client 441 ctx context.Context 442 Description string `validate:"required,max=120"` 443 RequestID string `validate:"required"` 444 ClickURL string `validate:"max=2000"` 445 } 446 447 // WithContext method 448 func (call *ClickAudienceGroupCall) WithContext(ctx context.Context) *ClickAudienceGroupCall { 449 call.ctx = ctx 450 return call 451 } 452 453 func (call *ClickAudienceGroupCall) encodeJSON(w io.Writer) error { 454 enc := json.NewEncoder(w) 455 return enc.Encode(struct { 456 Description string `json:"description,omitempty"` 457 RequestID string `json:"requestId,omitempty"` 458 ClickURL string `json:"clickUrl,omitempty"` 459 }{ 460 Description: call.Description, 461 RequestID: call.RequestID, 462 ClickURL: call.ClickURL, 463 }) 464 } 465 466 // Do method 467 func (call *ClickAudienceGroupCall) Do() (*ClickAudienceGroupResponse, error) { 468 var buf bytes.Buffer 469 if err := call.encodeJSON(&buf); err != nil { 470 return nil, err 471 } 472 res, err := call.c.post(call.ctx, APIAudienceGroupClick, &buf) 473 if err != nil { 474 return nil, err 475 } 476 defer closeResponse(res) 477 return decodeToClickAudienceGroupResponse(res) 478 } 479 480 // IMPAudienceGroup method 481 func (client *Client) IMPAudienceGroup(description, requestID string) *IMPAudienceGroupCall { 482 call := &IMPAudienceGroupCall{ 483 c: client, 484 Description: description, 485 RequestID: requestID, 486 } 487 return call 488 } 489 490 // IMPAudienceGroupCall type 491 type IMPAudienceGroupCall struct { 492 c *Client 493 ctx context.Context 494 Description string `validate:"required,max=120"` 495 RequestID string `validate:"required"` 496 } 497 498 // WithContext method 499 func (call *IMPAudienceGroupCall) WithContext(ctx context.Context) *IMPAudienceGroupCall { 500 call.ctx = ctx 501 return call 502 } 503 504 func (call *IMPAudienceGroupCall) encodeJSON(w io.Writer) error { 505 enc := json.NewEncoder(w) 506 return enc.Encode(struct { 507 Description string `json:"description,omitempty"` 508 RequestID string `json:"requestId,omitempty"` 509 }{ 510 Description: call.Description, 511 RequestID: call.RequestID, 512 }) 513 } 514 515 // Do method 516 func (call *IMPAudienceGroupCall) Do() (*IMPAudienceGroupResponse, error) { 517 var buf bytes.Buffer 518 if err := call.encodeJSON(&buf); err != nil { 519 return nil, err 520 } 521 res, err := call.c.post(call.ctx, APIAudienceGroupIMP, &buf) 522 if err != nil { 523 return nil, err 524 } 525 defer closeResponse(res) 526 return decodeToIMPAudienceGroupResponse(res) 527 } 528 529 // UpdateAudienceGroupDescription method 530 func (client *Client) UpdateAudienceGroupDescription(audienceGroupID int, description string) *UpdateAudienceGroupDescriptionCall { 531 call := &UpdateAudienceGroupDescriptionCall{ 532 c: client, 533 AudienceGroupID: audienceGroupID, 534 Description: description, 535 } 536 return call 537 } 538 539 // UpdateAudienceGroupDescriptionCall type 540 type UpdateAudienceGroupDescriptionCall struct { 541 c *Client 542 ctx context.Context 543 AudienceGroupID int `json:"-" validate:"required"` 544 Description string `validate:"required,max=120"` 545 } 546 547 // WithContext method 548 func (call *UpdateAudienceGroupDescriptionCall) WithContext(ctx context.Context) *UpdateAudienceGroupDescriptionCall { 549 call.ctx = ctx 550 return call 551 } 552 553 func (call *UpdateAudienceGroupDescriptionCall) encodeJSON(w io.Writer) error { 554 enc := json.NewEncoder(w) 555 return enc.Encode(struct { 556 Description string `json:"description,omitempty"` 557 }{ 558 Description: call.Description, 559 }) 560 } 561 562 // Do method 563 func (call *UpdateAudienceGroupDescriptionCall) Do() (*BasicResponse, error) { 564 var buf bytes.Buffer 565 if err := call.encodeJSON(&buf); err != nil { 566 return nil, err 567 } 568 res, err := call.c.put(call.ctx, fmt.Sprintf(APIAudienceGroupUpdateDescription, call.AudienceGroupID), &buf) 569 if err != nil { 570 return nil, err 571 } 572 defer closeResponse(res) 573 return decodeToBasicResponse(res) 574 } 575 576 // ActivateAudienceGroup method 577 func (client *Client) ActivateAudienceGroup(audienceGroupID int) *ActivateAudienceGroupCall { 578 call := &ActivateAudienceGroupCall{ 579 c: client, 580 AudienceGroupID: audienceGroupID, 581 } 582 return call 583 } 584 585 // ActivateAudienceGroupCall type 586 type ActivateAudienceGroupCall struct { 587 c *Client 588 ctx context.Context 589 AudienceGroupID int `json:"-" validate:"required"` 590 } 591 592 // WithContext method 593 func (call *ActivateAudienceGroupCall) WithContext(ctx context.Context) *ActivateAudienceGroupCall { 594 call.ctx = ctx 595 return call 596 } 597 598 // Do method 599 func (call *ActivateAudienceGroupCall) Do() (*BasicResponse, error) { 600 res, err := call.c.put(call.ctx, fmt.Sprintf(APIAudienceGroupActivate, call.AudienceGroupID), nil) 601 if err != nil { 602 return nil, err 603 } 604 defer closeResponse(res) 605 return decodeToBasicResponse(res) 606 } 607 608 // DeleteAudienceGroup method 609 func (client *Client) DeleteAudienceGroup(audienceGroupID int) *DeleteAudienceGroupCall { 610 call := &DeleteAudienceGroupCall{ 611 c: client, 612 AudienceGroupID: audienceGroupID, 613 } 614 return call 615 } 616 617 // DeleteAudienceGroupCall type 618 type DeleteAudienceGroupCall struct { 619 c *Client 620 ctx context.Context 621 AudienceGroupID int `json:"-" validate:"required"` 622 } 623 624 // WithContext method 625 func (call *DeleteAudienceGroupCall) WithContext(ctx context.Context) *DeleteAudienceGroupCall { 626 call.ctx = ctx 627 return call 628 } 629 630 // Do method 631 func (call *DeleteAudienceGroupCall) Do() (*BasicResponse, error) { 632 res, err := call.c.delete(call.ctx, fmt.Sprintf(APIAudienceGroup, call.AudienceGroupID)) 633 if err != nil { 634 return nil, err 635 } 636 defer closeResponse(res) 637 return decodeToBasicResponse(res) 638 } 639 640 // GetAudienceGroup method 641 func (client *Client) GetAudienceGroup(audienceGroupID int) *GetAudienceGroupCall { 642 call := &GetAudienceGroupCall{ 643 c: client, 644 AudienceGroupID: audienceGroupID, 645 } 646 return call 647 } 648 649 // GetAudienceGroupCall type 650 type GetAudienceGroupCall struct { 651 c *Client 652 ctx context.Context 653 AudienceGroupID int `json:"-" validate:"required"` 654 } 655 656 // WithContext method 657 func (call *GetAudienceGroupCall) WithContext(ctx context.Context) *GetAudienceGroupCall { 658 call.ctx = ctx 659 return call 660 } 661 662 // Do method 663 func (call *GetAudienceGroupCall) Do() (*GetAudienceGroupResponse, error) { 664 res, err := call.c.get(call.ctx, call.c.endpointBase, fmt.Sprintf(APIAudienceGroup, call.AudienceGroupID), nil) 665 if err != nil { 666 return nil, err 667 } 668 defer closeResponse(res) 669 return decodeToGetAudienceGroupResponse(res) 670 } 671 672 // IListAudienceGroupOption type 673 type IListAudienceGroupOption interface { 674 Apply(call *ListAudienceGroupCall) 675 } 676 677 // WithListAudienceGroupCallDescription func 678 func WithListAudienceGroupCallDescription(description string) IListAudienceGroupOption { 679 return &withListAudienceGroupCallDescription{ 680 description: description, 681 } 682 } 683 684 type withListAudienceGroupCallDescription struct { 685 description string 686 } 687 688 func (w *withListAudienceGroupCallDescription) Apply(call *ListAudienceGroupCall) { 689 call.Description = w.description 690 } 691 692 // WithListAudienceGroupCallStatus func 693 func WithListAudienceGroupCallStatus(status AudienceStatusType) IListAudienceGroupOption { 694 return &withListAudienceGroupCallStatus{ 695 status: status, 696 } 697 } 698 699 type withListAudienceGroupCallStatus struct { 700 status AudienceStatusType 701 } 702 703 func (w *withListAudienceGroupCallStatus) Apply(call *ListAudienceGroupCall) { 704 call.Status = w.status 705 } 706 707 // WithListAudienceGroupCallSize func 708 func WithListAudienceGroupCallSize(size int) IListAudienceGroupOption { 709 return &withListAudienceGroupCallSize{ 710 size: size, 711 } 712 } 713 714 type withListAudienceGroupCallSize struct { 715 size int 716 } 717 718 func (w *withListAudienceGroupCallSize) Apply(call *ListAudienceGroupCall) { 719 call.Size = w.size 720 } 721 722 // WithListAudienceGroupCallIncludesExternalPublicGroups func 723 func WithListAudienceGroupCallIncludesExternalPublicGroups(includesExternalPublicGroups bool) IListAudienceGroupOption { 724 return &withListAudienceGroupCallIncludesExternalPublicGroups{ 725 includesExternalPublicGroups: includesExternalPublicGroups, 726 } 727 } 728 729 type withListAudienceGroupCallIncludesExternalPublicGroups struct { 730 includesExternalPublicGroups bool 731 } 732 733 func (w *withListAudienceGroupCallIncludesExternalPublicGroups) Apply(call *ListAudienceGroupCall) { 734 call.IncludesExternalPublicGroups = w.includesExternalPublicGroups 735 } 736 737 // WithListAudienceGroupCallCreateRoute func 738 func WithListAudienceGroupCallCreateRoute(createRoute string) IListAudienceGroupOption { 739 return &withListAudienceGroupCallCreateRoute{ 740 createRoute: createRoute, 741 } 742 } 743 744 type withListAudienceGroupCallCreateRoute struct { 745 createRoute string 746 } 747 748 func (w *withListAudienceGroupCallCreateRoute) Apply(call *ListAudienceGroupCall) { 749 call.CreateRoute = w.createRoute 750 } 751 752 // ListAudienceGroup method 753 func (client *Client) ListAudienceGroup(page int, options ...IListAudienceGroupOption) *ListAudienceGroupCall { 754 call := &ListAudienceGroupCall{ 755 c: client, 756 Page: page, 757 IncludesExternalPublicGroups: true, 758 } 759 for _, item := range options { 760 item.Apply(call) 761 } 762 return call 763 } 764 765 // ListAudienceGroupCall type 766 type ListAudienceGroupCall struct { 767 c *Client 768 ctx context.Context 769 Page int `json:"-" validate:"required,min=1"` 770 Description string `json:"-"` 771 Status AudienceStatusType `json:"-"` 772 Size int `json:"-" validate:"min=1,max=40"` 773 IncludesExternalPublicGroups bool `json:"-"` 774 CreateRoute string `json:"-"` 775 } 776 777 // WithContext method 778 func (call *ListAudienceGroupCall) WithContext(ctx context.Context) *ListAudienceGroupCall { 779 call.ctx = ctx 780 return call 781 } 782 783 // Do method 784 func (call *ListAudienceGroupCall) Do() (*ListAudienceGroupResponse, error) { 785 u := url.Values{} 786 u.Set("page", strconv.FormatInt(int64(call.Page), 10)) 787 u.Set("size", strconv.FormatInt(int64(call.Size), 10)) 788 if call.Description != "" { 789 u.Set("description", call.Description) 790 } 791 if call.Status != "" { 792 u.Set("status", call.Status.String()) 793 } 794 if !call.IncludesExternalPublicGroups { 795 u.Set("includesExternalPublicGroups", strconv.FormatBool(call.IncludesExternalPublicGroups)) 796 } 797 if call.CreateRoute != "" { 798 u.Set("createRoute", call.CreateRoute) 799 } 800 res, err := call.c.get(call.ctx, call.c.endpointBase, APIAudienceGroupList, u) 801 if err != nil { 802 return nil, err 803 } 804 defer closeResponse(res) 805 return decodeToListAudienceGroupResponse(res) 806 } 807 808 // GetAudienceGroupAuthorityLevel method 809 func (client *Client) GetAudienceGroupAuthorityLevel() *GetAudienceGroupAuthorityLevelCall { 810 return &GetAudienceGroupAuthorityLevelCall{ 811 c: client, 812 } 813 } 814 815 // GetAudienceGroupAuthorityLevelCall type 816 type GetAudienceGroupAuthorityLevelCall struct { 817 c *Client 818 ctx context.Context 819 } 820 821 // WithContext method 822 func (call *GetAudienceGroupAuthorityLevelCall) WithContext(ctx context.Context) *GetAudienceGroupAuthorityLevelCall { 823 call.ctx = ctx 824 return call 825 } 826 827 // Do method 828 func (call *GetAudienceGroupAuthorityLevelCall) Do() (*GetAudienceGroupAuthorityLevelResponse, error) { 829 res, err := call.c.get(call.ctx, call.c.endpointBase, APIAudienceGroupAuthorityLevel, nil) 830 if err != nil { 831 return nil, err 832 } 833 defer closeResponse(res) 834 return decodeToGetAudienceGroupAuthorityLevelResponse(res) 835 } 836 837 // ChangeAudienceGroupAuthorityLevel method 838 func (client *Client) ChangeAudienceGroupAuthorityLevel(authorityLevel AudienceAuthorityLevelType) *ChangeAudienceGroupAuthorityLevelCall { 839 call := &ChangeAudienceGroupAuthorityLevelCall{ 840 c: client, 841 AuthorityLevel: authorityLevel, 842 } 843 return call 844 } 845 846 // ChangeAudienceGroupAuthorityLevelCall type 847 type ChangeAudienceGroupAuthorityLevelCall struct { 848 c *Client 849 ctx context.Context 850 AuthorityLevel AudienceAuthorityLevelType `validate:"required"` 851 } 852 853 // WithContext method 854 func (call *ChangeAudienceGroupAuthorityLevelCall) WithContext(ctx context.Context) *ChangeAudienceGroupAuthorityLevelCall { 855 call.ctx = ctx 856 return call 857 } 858 859 func (call *ChangeAudienceGroupAuthorityLevelCall) encodeJSON(w io.Writer) error { 860 enc := json.NewEncoder(w) 861 return enc.Encode(struct { 862 AuthorityLevel AudienceAuthorityLevelType `json:"authorityLevel,omitempty"` 863 }{ 864 AuthorityLevel: call.AuthorityLevel, 865 }) 866 } 867 868 // Do method 869 func (call *ChangeAudienceGroupAuthorityLevelCall) Do() (*BasicResponse, error) { 870 var buf bytes.Buffer 871 if err := call.encodeJSON(&buf); err != nil { 872 return nil, err 873 } 874 res, err := call.c.put(call.ctx, APIAudienceGroupAuthorityLevel, &buf) 875 if err != nil { 876 return nil, err 877 } 878 defer closeResponse(res) 879 return decodeToBasicResponse(res) 880 }