github.com/yaegashi/msgraph.go@v0.1.4/gen/templates/request_collection_navigation.go.tmpl (about)

     1  {{- $ := . }}
     2  {{- $x := .X }}
     3  {{- $y := .Y }}
     4  {{- $ySymType := $.SymBaseType $y.Type }}
     5  // {{$y.Sym}} returns request builder for {{$ySymType}} collection
     6  func (b *{{$x.Sym}}RequestBuilder) {{$y.Sym}}() *{{$x.Sym}}{{$y.Sym}}CollectionRequestBuilder {
     7  	bb := &{{$x.Sym}}{{$y.Sym}}CollectionRequestBuilder{BaseRequestBuilder: b.BaseRequestBuilder}
     8  	bb.baseURL += "/{{$y.Name}}"
     9  	return bb
    10  }
    11  
    12  // {{$x.Sym}}{{$y.Sym}}CollectionRequestBuilder is request builder for {{$ySymType}} collection
    13  type {{$x.Sym}}{{$y.Sym}}CollectionRequestBuilder struct{ BaseRequestBuilder }
    14  
    15  // Request returns request for {{$ySymType}} collection
    16  func (b *{{$x.Sym}}{{$y.Sym}}CollectionRequestBuilder) Request() *{{$x.Sym}}{{$y.Sym}}CollectionRequest {
    17      return &{{$x.Sym}}{{$y.Sym}}CollectionRequest{
    18          BaseRequest: BaseRequest{ baseURL: b.baseURL, client:  b.client },
    19      }
    20  }
    21  
    22  // ID returns request builder for {{$ySymType}} item
    23  func (b *{{$x.Sym}}{{$y.Sym}}CollectionRequestBuilder) ID(id string) *{{$ySymType}}RequestBuilder {
    24  	bb := &{{$ySymType}}RequestBuilder{BaseRequestBuilder: b.BaseRequestBuilder}
    25  	bb.baseURL += "/" + id
    26  	return bb
    27  }
    28  
    29  // {{$x.Sym}}{{$y.Sym}}CollectionRequest is request for {{$ySymType}} collection
    30  type {{$x.Sym}}{{$y.Sym}}CollectionRequest struct{ BaseRequest }
    31  
    32  // Paging perfoms paging operation for {{$ySymType}} collection
    33  func (r *{{$x.Sym}}{{$y.Sym}}CollectionRequest) Paging(ctx context.Context, method, path string, obj interface{}, n int) ([]{{$ySymType}}, error) {
    34  	req, err := r.NewJSONRequest(method, path, obj)
    35  	if err != nil {
    36  		return nil, err
    37  	}
    38  	if ctx != nil {
    39  		req = req.WithContext(ctx)
    40  	}
    41  	res, err := r.client.Do(req)
    42  	if err != nil {
    43  		return nil, err
    44  	}
    45  	var values []{{$ySymType}}
    46  	for {
    47  		if res.StatusCode != http.StatusOK {
    48  			b, _ := ioutil.ReadAll(res.Body)
    49  			res.Body.Close()
    50  			errRes := &ErrorResponse{Response: res}
    51  			err := jsonx.Unmarshal(b, errRes)
    52  			if err != nil {
    53  				return nil, fmt.Errorf("%s: %s", res.Status, string(b))
    54  			}
    55  			return nil, errRes
    56  		}
    57  		var (
    58  			paging Paging
    59  			value  []{{$ySymType}}
    60  		)
    61  		err := jsonx.NewDecoder(res.Body).Decode(&paging)
    62  		res.Body.Close()
    63  		if err != nil {
    64  			return nil, err
    65  		}
    66  		err = jsonx.Unmarshal(paging.Value, &value)
    67  		if err != nil {
    68  			return nil, err
    69  		}
    70  		values = append(values, value...)
    71  		if n >= 0 {
    72  			n--
    73  		}
    74  		if n == 0 || len(paging.NextLink) == 0 {
    75  			return values, nil
    76  		}
    77  		req, err = http.NewRequest("GET", paging.NextLink, nil)
    78  		if ctx != nil {
    79  			req = req.WithContext(ctx)
    80  		}
    81  		res, err = r.client.Do(req)
    82  		if err != nil {
    83  			return nil, err
    84  		}
    85  	}
    86  }
    87  
    88  // GetN performs GET request for {{$ySymType}} collection, max N pages
    89  func (r *{{$x.Sym}}{{$y.Sym}}CollectionRequest) GetN(ctx context.Context, n int) ([]{{$ySymType}}, error) {
    90  	var query string
    91  	if r.query != nil {
    92  		query = "?" + r.query.Encode()
    93  	}
    94  	return r.Paging(ctx, "GET", query, nil, n)
    95  }
    96  
    97  // Get performs GET request for {{$ySymType}} collection
    98  func (r *{{$x.Sym}}{{$y.Sym}}CollectionRequest) Get(ctx context.Context) ([]{{$ySymType}}, error) {
    99  	return r.GetN(ctx, 0)
   100  }
   101  
   102  // Add performs POST request for {{$ySymType}} collection
   103  func (r *{{$x.Sym}}{{$y.Sym}}CollectionRequest) Add(ctx context.Context, reqObj *{{$ySymType}}) (resObj *{{$ySymType}}, err error) {
   104  	err = r.JSONRequest(ctx, "POST", "", reqObj, &resObj)
   105  	return
   106  }