github.com/yaegashi/msgraph.go@v0.1.4/beta/RequestSearch.go (about)

     1  // Code generated by msgraph.go/gen DO NOT EDIT.
     2  
     3  package msgraph
     4  
     5  import (
     6  	"context"
     7  	"fmt"
     8  	"io/ioutil"
     9  	"net/http"
    10  
    11  	"github.com/yaegashi/msgraph.go/jsonx"
    12  )
    13  
    14  // SearchRequestBuilder is request builder for Search
    15  type SearchRequestBuilder struct{ BaseRequestBuilder }
    16  
    17  // Request returns SearchRequest
    18  func (b *SearchRequestBuilder) Request() *SearchRequest {
    19  	return &SearchRequest{
    20  		BaseRequest: BaseRequest{baseURL: b.baseURL, client: b.client},
    21  	}
    22  }
    23  
    24  // SearchRequest is request for Search
    25  type SearchRequest struct{ BaseRequest }
    26  
    27  // Get performs GET request for Search
    28  func (r *SearchRequest) Get(ctx context.Context) (resObj *Search, err error) {
    29  	var query string
    30  	if r.query != nil {
    31  		query = "?" + r.query.Encode()
    32  	}
    33  	err = r.JSONRequest(ctx, "GET", query, nil, &resObj)
    34  	return
    35  }
    36  
    37  // Update performs PATCH request for Search
    38  func (r *SearchRequest) Update(ctx context.Context, reqObj *Search) error {
    39  	return r.JSONRequest(ctx, "PATCH", "", reqObj, nil)
    40  }
    41  
    42  // Delete performs DELETE request for Search
    43  func (r *SearchRequest) Delete(ctx context.Context) error {
    44  	return r.JSONRequest(ctx, "DELETE", "", nil, nil)
    45  }
    46  
    47  //
    48  type SearchQueryRequestBuilder struct{ BaseRequestBuilder }
    49  
    50  // Query action undocumented
    51  func (b *SearchRequestBuilder) Query(reqObj *SearchQueryRequestParameter) *SearchQueryRequestBuilder {
    52  	bb := &SearchQueryRequestBuilder{BaseRequestBuilder: b.BaseRequestBuilder}
    53  	bb.BaseRequestBuilder.baseURL += "/query"
    54  	bb.BaseRequestBuilder.requestObject = reqObj
    55  	return bb
    56  }
    57  
    58  //
    59  type SearchQueryRequest struct{ BaseRequest }
    60  
    61  //
    62  func (b *SearchQueryRequestBuilder) Request() *SearchQueryRequest {
    63  	return &SearchQueryRequest{
    64  		BaseRequest: BaseRequest{baseURL: b.baseURL, client: b.client, requestObject: b.requestObject},
    65  	}
    66  }
    67  
    68  //
    69  func (r *SearchQueryRequest) Paging(ctx context.Context, method, path string, obj interface{}, n int) ([]SearchResponse, error) {
    70  	req, err := r.NewJSONRequest(method, path, obj)
    71  	if err != nil {
    72  		return nil, err
    73  	}
    74  	if ctx != nil {
    75  		req = req.WithContext(ctx)
    76  	}
    77  	res, err := r.client.Do(req)
    78  	if err != nil {
    79  		return nil, err
    80  	}
    81  	var values []SearchResponse
    82  	for {
    83  		if res.StatusCode != http.StatusOK {
    84  			b, _ := ioutil.ReadAll(res.Body)
    85  			res.Body.Close()
    86  			errRes := &ErrorResponse{Response: res}
    87  			err := jsonx.Unmarshal(b, errRes)
    88  			if err != nil {
    89  				return nil, fmt.Errorf("%s: %s", res.Status, string(b))
    90  			}
    91  			return nil, errRes
    92  		}
    93  		var (
    94  			paging Paging
    95  			value  []SearchResponse
    96  		)
    97  		err := jsonx.NewDecoder(res.Body).Decode(&paging)
    98  		res.Body.Close()
    99  		if err != nil {
   100  			return nil, err
   101  		}
   102  		err = jsonx.Unmarshal(paging.Value, &value)
   103  		if err != nil {
   104  			return nil, err
   105  		}
   106  		values = append(values, value...)
   107  		if n >= 0 {
   108  			n--
   109  		}
   110  		if n == 0 || len(paging.NextLink) == 0 {
   111  			return values, nil
   112  		}
   113  		req, err = http.NewRequest("GET", paging.NextLink, nil)
   114  		if ctx != nil {
   115  			req = req.WithContext(ctx)
   116  		}
   117  		res, err = r.client.Do(req)
   118  		if err != nil {
   119  			return nil, err
   120  		}
   121  	}
   122  }
   123  
   124  //
   125  func (r *SearchQueryRequest) PostN(ctx context.Context, n int) ([]SearchResponse, error) {
   126  	return r.Paging(ctx, "POST", "", r.requestObject, n)
   127  }
   128  
   129  //
   130  func (r *SearchQueryRequest) Post(ctx context.Context) ([]SearchResponse, error) {
   131  	return r.Paging(ctx, "POST", "", r.requestObject, 0)
   132  }