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  }