all repos — telegram-bot-api @ cb3a14a3b5d4216fd32fd6554cf3477616c697ed

Golang bindings for the Telegram Bot API

params.go (view raw)

  1package tgbotapi
  2
  3import (
  4	"encoding/json"
  5	"reflect"
  6	"strconv"
  7)
  8
  9// Params represents a set of parameters that gets passed to a request.
 10type Params map[string]string
 11
 12// AddNonEmpty adds a value if it not an empty string.
 13func (p Params) AddNonEmpty(key, value string) {
 14	if value != "" {
 15		p[key] = value
 16	}
 17}
 18
 19// AddNonZero adds a value if it is not zero.
 20func (p Params) AddNonZero(key string, value int) {
 21	if value != 0 {
 22		p[key] = strconv.Itoa(value)
 23	}
 24}
 25
 26// AddNonZero64 is the same as AddNonZero except uses an int64.
 27func (p Params) AddNonZero64(key string, value int64) {
 28	if value != 0 {
 29		p[key] = strconv.FormatInt(value, 10)
 30	}
 31}
 32
 33// AddBool adds a value of a bool if it is true.
 34func (p Params) AddBool(key string, value bool) {
 35	if value {
 36		p[key] = strconv.FormatBool(value)
 37	}
 38}
 39
 40// AddNonNilBool adds the value of a bool pointer if not nil.
 41func (p Params) AddNonNilBool(key string, value *bool) {
 42	if value != nil {
 43		p[key] = strconv.FormatBool(*value)
 44	}
 45}
 46
 47// AddNonZeroFloat adds a floating point value that is not zero.
 48func (p Params) AddNonZeroFloat(key string, value float64) {
 49	if value != 0 {
 50		p[key] = strconv.FormatFloat(value, 'f', 6, 64)
 51	}
 52}
 53
 54// AddInterface adds an interface if it is not nill and can be JSON marshalled.
 55func (p Params) AddInterface(key string, value interface{}) error {
 56	if value == nil || (reflect.ValueOf(value).Kind() == reflect.Ptr && reflect.ValueOf(value).IsNil()) {
 57		return nil
 58	}
 59
 60	b, err := json.Marshal(value)
 61	if err != nil {
 62		return err
 63	}
 64
 65	p[key] = string(b)
 66
 67	return nil
 68}
 69
 70// AddFirstValid attempts to add the first item that is not a default value.
 71//
 72// For example, AddFirstValid(0, "", "test") would add "test".
 73func (p Params) AddFirstValid(key string, args ...interface{}) error {
 74	for _, arg := range args {
 75		switch v := arg.(type) {
 76		case int:
 77			if v != 0 {
 78				p[key] = strconv.Itoa(v)
 79			}
 80		case int64:
 81			if v != 0 {
 82				p[key] = strconv.FormatInt(v, 10)
 83			}
 84		case string:
 85			if v != "" {
 86				p[key] = v
 87			}
 88		case nil:
 89		default:
 90			b, err := json.Marshal(arg)
 91			if err != nil {
 92				return err
 93			}
 94
 95			p[key] = string(b)
 96		}
 97	}
 98
 99	return nil
100}