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 }