options.go raw

   1  /**
   2   * Copyright 2016 IBM Corp.
   3   *
   4   * Licensed under the Apache License, Version 2.0 (the "License");
   5   * you may not use this file except in compliance with the License.
   6   * You may obtain a copy of the License at
   7   *
   8   *    http://www.apache.org/licenses/LICENSE-2.0
   9   *
  10   * Unless required by applicable law or agreed to in writing, software
  11   * distributed under the License is distributed on an "AS IS" BASIS,
  12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13   * See the License for the specific language governing permissions and
  14   * limitations under the License.
  15   */
  16  
  17  package sl
  18  
  19  import (
  20  	"math"
  21  )
  22  
  23  var DefaultLimit = 50
  24  
  25  // Options contains the individual query parameters that can be applied to a request.
  26  type Options struct {
  27  	Id         *int
  28  	Mask       string
  29  	Filter     string
  30  	Limit      *int
  31  	Offset     *int
  32  	TotalItems int
  33  }
  34  
  35  // returns Math.Ciel((TotalItems - Limit) / Limit)
  36  func (opt *Options) GetRemainingAPICalls() int {
  37  	Total := float64(opt.TotalItems)
  38  	Limit := float64(*opt.Limit)
  39  	return int(math.Ceil((Total - Limit) / Limit))
  40  }
  41  
  42  // Makes sure the limit is set to something, not 0 or 1. Will set to default if no other limit is set.
  43  func (opt *Options) ValidateLimit() int {
  44  	if opt.Limit == nil || *opt.Limit < 2 {
  45  		opt.Limit = &DefaultLimit
  46  	}
  47  	return *opt.Limit
  48  }
  49  
  50  func (opt *Options) SetTotalItems(total int) {
  51  	opt.TotalItems = total
  52  }
  53  
  54  func (opt *Options) SetOffset(offset int) {
  55  	opt.Offset = &offset
  56  }
  57  
  58  func (opt *Options) SetLimit(limit int) {
  59  	opt.Limit = &limit
  60  }
  61