github.com/twilio/twilio-go@v1.20.1/rest/ip_messaging/v2/services_channels_members.go (about)

     1  /*
     2   * This code was generated by
     3   * ___ _ _ _ _ _    _ ____    ____ ____ _    ____ ____ _  _ ____ ____ ____ ___ __   __
     4   *  |  | | | | |    | |  | __ |  | |__| | __ | __ |___ |\ | |___ |__/ |__|  | |  | |__/
     5   *  |  |_|_| | |___ | |__|    |__| |  | |    |__] |___ | \| |___ |  \ |  |  | |__| |  \
     6   *
     7   * Twilio - Ip_messaging
     8   * This is the public Twilio REST API.
     9   *
    10   * NOTE: This class is auto generated by OpenAPI Generator.
    11   * https://openapi-generator.tech
    12   * Do not edit the class manually.
    13   */
    14  
    15  package openapi
    16  
    17  import (
    18  	"encoding/json"
    19  	"fmt"
    20  	"net/url"
    21  	"strings"
    22  	"time"
    23  
    24  	"github.com/twilio/twilio-go/client"
    25  )
    26  
    27  // Optional parameters for the method 'CreateMember'
    28  type CreateMemberParams struct {
    29  	// The X-Twilio-Webhook-Enabled HTTP request header
    30  	XTwilioWebhookEnabled *string `json:"X-Twilio-Webhook-Enabled,omitempty"`
    31  	//
    32  	Identity *string `json:"Identity,omitempty"`
    33  	//
    34  	RoleSid *string `json:"RoleSid,omitempty"`
    35  	//
    36  	LastConsumedMessageIndex *int `json:"LastConsumedMessageIndex,omitempty"`
    37  	//
    38  	LastConsumptionTimestamp *time.Time `json:"LastConsumptionTimestamp,omitempty"`
    39  	//
    40  	DateCreated *time.Time `json:"DateCreated,omitempty"`
    41  	//
    42  	DateUpdated *time.Time `json:"DateUpdated,omitempty"`
    43  	//
    44  	Attributes *string `json:"Attributes,omitempty"`
    45  }
    46  
    47  func (params *CreateMemberParams) SetXTwilioWebhookEnabled(XTwilioWebhookEnabled string) *CreateMemberParams {
    48  	params.XTwilioWebhookEnabled = &XTwilioWebhookEnabled
    49  	return params
    50  }
    51  func (params *CreateMemberParams) SetIdentity(Identity string) *CreateMemberParams {
    52  	params.Identity = &Identity
    53  	return params
    54  }
    55  func (params *CreateMemberParams) SetRoleSid(RoleSid string) *CreateMemberParams {
    56  	params.RoleSid = &RoleSid
    57  	return params
    58  }
    59  func (params *CreateMemberParams) SetLastConsumedMessageIndex(LastConsumedMessageIndex int) *CreateMemberParams {
    60  	params.LastConsumedMessageIndex = &LastConsumedMessageIndex
    61  	return params
    62  }
    63  func (params *CreateMemberParams) SetLastConsumptionTimestamp(LastConsumptionTimestamp time.Time) *CreateMemberParams {
    64  	params.LastConsumptionTimestamp = &LastConsumptionTimestamp
    65  	return params
    66  }
    67  func (params *CreateMemberParams) SetDateCreated(DateCreated time.Time) *CreateMemberParams {
    68  	params.DateCreated = &DateCreated
    69  	return params
    70  }
    71  func (params *CreateMemberParams) SetDateUpdated(DateUpdated time.Time) *CreateMemberParams {
    72  	params.DateUpdated = &DateUpdated
    73  	return params
    74  }
    75  func (params *CreateMemberParams) SetAttributes(Attributes string) *CreateMemberParams {
    76  	params.Attributes = &Attributes
    77  	return params
    78  }
    79  
    80  //
    81  func (c *ApiService) CreateMember(ServiceSid string, ChannelSid string, params *CreateMemberParams) (*IpMessagingV2Member, error) {
    82  	path := "/v2/Services/{ServiceSid}/Channels/{ChannelSid}/Members"
    83  	path = strings.Replace(path, "{"+"ServiceSid"+"}", ServiceSid, -1)
    84  	path = strings.Replace(path, "{"+"ChannelSid"+"}", ChannelSid, -1)
    85  
    86  	data := url.Values{}
    87  	headers := make(map[string]interface{})
    88  
    89  	if params != nil && params.Identity != nil {
    90  		data.Set("Identity", *params.Identity)
    91  	}
    92  	if params != nil && params.RoleSid != nil {
    93  		data.Set("RoleSid", *params.RoleSid)
    94  	}
    95  	if params != nil && params.LastConsumedMessageIndex != nil {
    96  		data.Set("LastConsumedMessageIndex", fmt.Sprint(*params.LastConsumedMessageIndex))
    97  	}
    98  	if params != nil && params.LastConsumptionTimestamp != nil {
    99  		data.Set("LastConsumptionTimestamp", fmt.Sprint((*params.LastConsumptionTimestamp).Format(time.RFC3339)))
   100  	}
   101  	if params != nil && params.DateCreated != nil {
   102  		data.Set("DateCreated", fmt.Sprint((*params.DateCreated).Format(time.RFC3339)))
   103  	}
   104  	if params != nil && params.DateUpdated != nil {
   105  		data.Set("DateUpdated", fmt.Sprint((*params.DateUpdated).Format(time.RFC3339)))
   106  	}
   107  	if params != nil && params.Attributes != nil {
   108  		data.Set("Attributes", *params.Attributes)
   109  	}
   110  
   111  	if params != nil && params.XTwilioWebhookEnabled != nil {
   112  		headers["X-Twilio-Webhook-Enabled"] = *params.XTwilioWebhookEnabled
   113  	}
   114  	resp, err := c.requestHandler.Post(c.baseURL+path, data, headers)
   115  	if err != nil {
   116  		return nil, err
   117  	}
   118  
   119  	defer resp.Body.Close()
   120  
   121  	ps := &IpMessagingV2Member{}
   122  	if err := json.NewDecoder(resp.Body).Decode(ps); err != nil {
   123  		return nil, err
   124  	}
   125  
   126  	return ps, err
   127  }
   128  
   129  // Optional parameters for the method 'DeleteMember'
   130  type DeleteMemberParams struct {
   131  	// The X-Twilio-Webhook-Enabled HTTP request header
   132  	XTwilioWebhookEnabled *string `json:"X-Twilio-Webhook-Enabled,omitempty"`
   133  }
   134  
   135  func (params *DeleteMemberParams) SetXTwilioWebhookEnabled(XTwilioWebhookEnabled string) *DeleteMemberParams {
   136  	params.XTwilioWebhookEnabled = &XTwilioWebhookEnabled
   137  	return params
   138  }
   139  
   140  //
   141  func (c *ApiService) DeleteMember(ServiceSid string, ChannelSid string, Sid string, params *DeleteMemberParams) error {
   142  	path := "/v2/Services/{ServiceSid}/Channels/{ChannelSid}/Members/{Sid}"
   143  	path = strings.Replace(path, "{"+"ServiceSid"+"}", ServiceSid, -1)
   144  	path = strings.Replace(path, "{"+"ChannelSid"+"}", ChannelSid, -1)
   145  	path = strings.Replace(path, "{"+"Sid"+"}", Sid, -1)
   146  
   147  	data := url.Values{}
   148  	headers := make(map[string]interface{})
   149  
   150  	if params != nil && params.XTwilioWebhookEnabled != nil {
   151  		headers["X-Twilio-Webhook-Enabled"] = *params.XTwilioWebhookEnabled
   152  	}
   153  	resp, err := c.requestHandler.Delete(c.baseURL+path, data, headers)
   154  	if err != nil {
   155  		return err
   156  	}
   157  
   158  	defer resp.Body.Close()
   159  
   160  	return nil
   161  }
   162  
   163  //
   164  func (c *ApiService) FetchMember(ServiceSid string, ChannelSid string, Sid string) (*IpMessagingV2Member, error) {
   165  	path := "/v2/Services/{ServiceSid}/Channels/{ChannelSid}/Members/{Sid}"
   166  	path = strings.Replace(path, "{"+"ServiceSid"+"}", ServiceSid, -1)
   167  	path = strings.Replace(path, "{"+"ChannelSid"+"}", ChannelSid, -1)
   168  	path = strings.Replace(path, "{"+"Sid"+"}", Sid, -1)
   169  
   170  	data := url.Values{}
   171  	headers := make(map[string]interface{})
   172  
   173  	resp, err := c.requestHandler.Get(c.baseURL+path, data, headers)
   174  	if err != nil {
   175  		return nil, err
   176  	}
   177  
   178  	defer resp.Body.Close()
   179  
   180  	ps := &IpMessagingV2Member{}
   181  	if err := json.NewDecoder(resp.Body).Decode(ps); err != nil {
   182  		return nil, err
   183  	}
   184  
   185  	return ps, err
   186  }
   187  
   188  // Optional parameters for the method 'ListMember'
   189  type ListMemberParams struct {
   190  	//
   191  	Identity *[]string `json:"Identity,omitempty"`
   192  	// How many resources to return in each list page. The default is 50, and the maximum is 1000.
   193  	PageSize *int `json:"PageSize,omitempty"`
   194  	// Max number of records to return.
   195  	Limit *int `json:"limit,omitempty"`
   196  }
   197  
   198  func (params *ListMemberParams) SetIdentity(Identity []string) *ListMemberParams {
   199  	params.Identity = &Identity
   200  	return params
   201  }
   202  func (params *ListMemberParams) SetPageSize(PageSize int) *ListMemberParams {
   203  	params.PageSize = &PageSize
   204  	return params
   205  }
   206  func (params *ListMemberParams) SetLimit(Limit int) *ListMemberParams {
   207  	params.Limit = &Limit
   208  	return params
   209  }
   210  
   211  // Retrieve a single page of Member records from the API. Request is executed immediately.
   212  func (c *ApiService) PageMember(ServiceSid string, ChannelSid string, params *ListMemberParams, pageToken, pageNumber string) (*ListMemberResponse, error) {
   213  	path := "/v2/Services/{ServiceSid}/Channels/{ChannelSid}/Members"
   214  
   215  	path = strings.Replace(path, "{"+"ServiceSid"+"}", ServiceSid, -1)
   216  	path = strings.Replace(path, "{"+"ChannelSid"+"}", ChannelSid, -1)
   217  
   218  	data := url.Values{}
   219  	headers := make(map[string]interface{})
   220  
   221  	if params != nil && params.Identity != nil {
   222  		for _, item := range *params.Identity {
   223  			data.Add("Identity", item)
   224  		}
   225  	}
   226  	if params != nil && params.PageSize != nil {
   227  		data.Set("PageSize", fmt.Sprint(*params.PageSize))
   228  	}
   229  
   230  	if pageToken != "" {
   231  		data.Set("PageToken", pageToken)
   232  	}
   233  	if pageNumber != "" {
   234  		data.Set("Page", pageNumber)
   235  	}
   236  
   237  	resp, err := c.requestHandler.Get(c.baseURL+path, data, headers)
   238  	if err != nil {
   239  		return nil, err
   240  	}
   241  
   242  	defer resp.Body.Close()
   243  
   244  	ps := &ListMemberResponse{}
   245  	if err := json.NewDecoder(resp.Body).Decode(ps); err != nil {
   246  		return nil, err
   247  	}
   248  
   249  	return ps, err
   250  }
   251  
   252  // Lists Member records from the API as a list. Unlike stream, this operation is eager and loads 'limit' records into memory before returning.
   253  func (c *ApiService) ListMember(ServiceSid string, ChannelSid string, params *ListMemberParams) ([]IpMessagingV2Member, error) {
   254  	response, errors := c.StreamMember(ServiceSid, ChannelSid, params)
   255  
   256  	records := make([]IpMessagingV2Member, 0)
   257  	for record := range response {
   258  		records = append(records, record)
   259  	}
   260  
   261  	if err := <-errors; err != nil {
   262  		return nil, err
   263  	}
   264  
   265  	return records, nil
   266  }
   267  
   268  // Streams Member records from the API as a channel stream. This operation lazily loads records as efficiently as possible until the limit is reached.
   269  func (c *ApiService) StreamMember(ServiceSid string, ChannelSid string, params *ListMemberParams) (chan IpMessagingV2Member, chan error) {
   270  	if params == nil {
   271  		params = &ListMemberParams{}
   272  	}
   273  	params.SetPageSize(client.ReadLimits(params.PageSize, params.Limit))
   274  
   275  	recordChannel := make(chan IpMessagingV2Member, 1)
   276  	errorChannel := make(chan error, 1)
   277  
   278  	response, err := c.PageMember(ServiceSid, ChannelSid, params, "", "")
   279  	if err != nil {
   280  		errorChannel <- err
   281  		close(recordChannel)
   282  		close(errorChannel)
   283  	} else {
   284  		go c.streamMember(response, params, recordChannel, errorChannel)
   285  	}
   286  
   287  	return recordChannel, errorChannel
   288  }
   289  
   290  func (c *ApiService) streamMember(response *ListMemberResponse, params *ListMemberParams, recordChannel chan IpMessagingV2Member, errorChannel chan error) {
   291  	curRecord := 1
   292  
   293  	for response != nil {
   294  		responseRecords := response.Members
   295  		for item := range responseRecords {
   296  			recordChannel <- responseRecords[item]
   297  			curRecord += 1
   298  			if params.Limit != nil && *params.Limit < curRecord {
   299  				close(recordChannel)
   300  				close(errorChannel)
   301  				return
   302  			}
   303  		}
   304  
   305  		record, err := client.GetNext(c.baseURL, response, c.getNextListMemberResponse)
   306  		if err != nil {
   307  			errorChannel <- err
   308  			break
   309  		} else if record == nil {
   310  			break
   311  		}
   312  
   313  		response = record.(*ListMemberResponse)
   314  	}
   315  
   316  	close(recordChannel)
   317  	close(errorChannel)
   318  }
   319  
   320  func (c *ApiService) getNextListMemberResponse(nextPageUrl string) (interface{}, error) {
   321  	if nextPageUrl == "" {
   322  		return nil, nil
   323  	}
   324  	resp, err := c.requestHandler.Get(nextPageUrl, nil, nil)
   325  	if err != nil {
   326  		return nil, err
   327  	}
   328  
   329  	defer resp.Body.Close()
   330  
   331  	ps := &ListMemberResponse{}
   332  	if err := json.NewDecoder(resp.Body).Decode(ps); err != nil {
   333  		return nil, err
   334  	}
   335  	return ps, nil
   336  }
   337  
   338  // Optional parameters for the method 'UpdateMember'
   339  type UpdateMemberParams struct {
   340  	// The X-Twilio-Webhook-Enabled HTTP request header
   341  	XTwilioWebhookEnabled *string `json:"X-Twilio-Webhook-Enabled,omitempty"`
   342  	//
   343  	RoleSid *string `json:"RoleSid,omitempty"`
   344  	//
   345  	LastConsumedMessageIndex *int `json:"LastConsumedMessageIndex,omitempty"`
   346  	//
   347  	LastConsumptionTimestamp *time.Time `json:"LastConsumptionTimestamp,omitempty"`
   348  	//
   349  	DateCreated *time.Time `json:"DateCreated,omitempty"`
   350  	//
   351  	DateUpdated *time.Time `json:"DateUpdated,omitempty"`
   352  	//
   353  	Attributes *string `json:"Attributes,omitempty"`
   354  }
   355  
   356  func (params *UpdateMemberParams) SetXTwilioWebhookEnabled(XTwilioWebhookEnabled string) *UpdateMemberParams {
   357  	params.XTwilioWebhookEnabled = &XTwilioWebhookEnabled
   358  	return params
   359  }
   360  func (params *UpdateMemberParams) SetRoleSid(RoleSid string) *UpdateMemberParams {
   361  	params.RoleSid = &RoleSid
   362  	return params
   363  }
   364  func (params *UpdateMemberParams) SetLastConsumedMessageIndex(LastConsumedMessageIndex int) *UpdateMemberParams {
   365  	params.LastConsumedMessageIndex = &LastConsumedMessageIndex
   366  	return params
   367  }
   368  func (params *UpdateMemberParams) SetLastConsumptionTimestamp(LastConsumptionTimestamp time.Time) *UpdateMemberParams {
   369  	params.LastConsumptionTimestamp = &LastConsumptionTimestamp
   370  	return params
   371  }
   372  func (params *UpdateMemberParams) SetDateCreated(DateCreated time.Time) *UpdateMemberParams {
   373  	params.DateCreated = &DateCreated
   374  	return params
   375  }
   376  func (params *UpdateMemberParams) SetDateUpdated(DateUpdated time.Time) *UpdateMemberParams {
   377  	params.DateUpdated = &DateUpdated
   378  	return params
   379  }
   380  func (params *UpdateMemberParams) SetAttributes(Attributes string) *UpdateMemberParams {
   381  	params.Attributes = &Attributes
   382  	return params
   383  }
   384  
   385  //
   386  func (c *ApiService) UpdateMember(ServiceSid string, ChannelSid string, Sid string, params *UpdateMemberParams) (*IpMessagingV2Member, error) {
   387  	path := "/v2/Services/{ServiceSid}/Channels/{ChannelSid}/Members/{Sid}"
   388  	path = strings.Replace(path, "{"+"ServiceSid"+"}", ServiceSid, -1)
   389  	path = strings.Replace(path, "{"+"ChannelSid"+"}", ChannelSid, -1)
   390  	path = strings.Replace(path, "{"+"Sid"+"}", Sid, -1)
   391  
   392  	data := url.Values{}
   393  	headers := make(map[string]interface{})
   394  
   395  	if params != nil && params.RoleSid != nil {
   396  		data.Set("RoleSid", *params.RoleSid)
   397  	}
   398  	if params != nil && params.LastConsumedMessageIndex != nil {
   399  		data.Set("LastConsumedMessageIndex", fmt.Sprint(*params.LastConsumedMessageIndex))
   400  	}
   401  	if params != nil && params.LastConsumptionTimestamp != nil {
   402  		data.Set("LastConsumptionTimestamp", fmt.Sprint((*params.LastConsumptionTimestamp).Format(time.RFC3339)))
   403  	}
   404  	if params != nil && params.DateCreated != nil {
   405  		data.Set("DateCreated", fmt.Sprint((*params.DateCreated).Format(time.RFC3339)))
   406  	}
   407  	if params != nil && params.DateUpdated != nil {
   408  		data.Set("DateUpdated", fmt.Sprint((*params.DateUpdated).Format(time.RFC3339)))
   409  	}
   410  	if params != nil && params.Attributes != nil {
   411  		data.Set("Attributes", *params.Attributes)
   412  	}
   413  
   414  	if params != nil && params.XTwilioWebhookEnabled != nil {
   415  		headers["X-Twilio-Webhook-Enabled"] = *params.XTwilioWebhookEnabled
   416  	}
   417  	resp, err := c.requestHandler.Post(c.baseURL+path, data, headers)
   418  	if err != nil {
   419  		return nil, err
   420  	}
   421  
   422  	defer resp.Body.Close()
   423  
   424  	ps := &IpMessagingV2Member{}
   425  	if err := json.NewDecoder(resp.Body).Decode(ps); err != nil {
   426  		return nil, err
   427  	}
   428  
   429  	return ps, err
   430  }