...

Source file src/github.com/ory/go-convenience/mapx/type_assert.go

Documentation: github.com/ory/go-convenience/mapx

     1  package mapx
     2  
     3  import (
     4  	"errors"
     5  	"time"
     6  )
     7  
     8  var ErrKeyDoesNotExist = errors.New("key is not present in map")
     9  var ErrKeyCanNotBeTypeAsserted = errors.New("key could not be type asserted")
    10  
    11  func GetString(values map[interface{}]interface{}, key interface{}) (string, error) {
    12  	if v, ok := values[key]; !ok {
    13  		return "", ErrKeyDoesNotExist
    14  	} else if sv, ok := v.(string); !ok {
    15  		return "", ErrKeyCanNotBeTypeAsserted
    16  	} else {
    17  		return sv, nil
    18  	}
    19  }
    20  
    21  func GetStringSlice(values map[interface{}]interface{}, key interface{}) ([]string, error) {
    22  	if v, ok := values[key]; !ok {
    23  		return []string{}, ErrKeyDoesNotExist
    24  	} else if sv, ok := v.([]string); ok {
    25  		return sv, nil
    26  	} else if sv, ok := v.([]interface{}); ok {
    27  		vs := make([]string, len(sv))
    28  		for k, v := range sv {
    29  			if vv, ok := v.(string); !ok {
    30  				return []string{}, ErrKeyCanNotBeTypeAsserted
    31  			} else {
    32  				vs[k] = vv
    33  			}
    34  		}
    35  		return vs, nil
    36  	} else {
    37  		return []string{}, ErrKeyCanNotBeTypeAsserted
    38  	}
    39  }
    40  
    41  func GetTime(values map[interface{}]interface{}, key interface{}) (time.Time, error) {
    42  	v, ok := values[key]
    43  	if !ok {
    44  		return time.Time{}, ErrKeyDoesNotExist
    45  	}
    46  
    47  	if sv, ok := v.(time.Time); ok {
    48  		return sv, nil
    49  	} else if sv, ok := v.(int64); ok {
    50  		return time.Unix(sv, 0), nil
    51  	} else if sv, ok := v.(int32); ok {
    52  		return time.Unix(int64(sv), 0), nil
    53  	} else if sv, ok := v.(int); ok {
    54  		return time.Unix(int64(sv), 0), nil
    55  	} else if sv, ok := v.(float64); ok {
    56  		return time.Unix(int64(sv), 0), nil
    57  	} else if sv, ok := v.(float32); ok {
    58  		return time.Unix(int64(sv), 0), nil
    59  	}
    60  
    61  	return time.Time{}, ErrKeyCanNotBeTypeAsserted
    62  }
    63  
    64  func GetInt64(values map[interface{}]interface{}, key interface{}) (int64, error) {
    65  	if v, ok := values[key]; !ok {
    66  		return 0, ErrKeyDoesNotExist
    67  	} else if sv, ok := v.(int64); !ok {
    68  		return 0, ErrKeyCanNotBeTypeAsserted
    69  	} else {
    70  		return sv, nil
    71  	}
    72  }
    73  
    74  func GetInt32(values map[interface{}]interface{}, key interface{}) (int32, error) {
    75  	if v, ok := values[key]; !ok {
    76  		return 0, ErrKeyDoesNotExist
    77  	} else if sv, ok := v.(int32); ok {
    78  		return sv, nil
    79  	} else if sv, ok := v.(int); ok {
    80  		return int32(sv), nil
    81  	} else {
    82  		return 0, ErrKeyCanNotBeTypeAsserted
    83  	}
    84  }
    85  
    86  func GetInt(values map[interface{}]interface{}, key interface{}) (int, error) {
    87  	if v, ok := values[key]; !ok {
    88  		return 0, ErrKeyDoesNotExist
    89  	} else if sv, ok := v.(int32); ok {
    90  		return int(sv), nil
    91  	} else if sv, ok := v.(int); ok {
    92  		return sv, nil
    93  	} else {
    94  		return 0, ErrKeyCanNotBeTypeAsserted
    95  	}
    96  }
    97  
    98  func GetFloat32(values map[interface{}]interface{}, key interface{}) (float32, error) {
    99  	if v, ok := values[key]; !ok {
   100  		return 0, ErrKeyDoesNotExist
   101  	} else if sv, ok := v.(float32); !ok {
   102  		return 0, ErrKeyCanNotBeTypeAsserted
   103  	} else {
   104  		return sv, nil
   105  	}
   106  }
   107  
   108  func GetFloat64(values map[interface{}]interface{}, key interface{}) (float64, error) {
   109  	if v, ok := values[key]; !ok {
   110  		return 0, ErrKeyDoesNotExist
   111  	} else if sv, ok := v.(float64); !ok {
   112  		return 0, ErrKeyCanNotBeTypeAsserted
   113  	} else {
   114  		return sv, nil
   115  	}
   116  }
   117  
   118  func GetStringDefault(values map[interface{}]interface{}, key interface{}, defaultValue string) string {
   119  	if s, err := GetString(values, key); err == nil {
   120  		return s
   121  	}
   122  	return defaultValue
   123  }
   124  
   125  func GetStringSliceDefault(values map[interface{}]interface{}, key interface{}, defaultValue []string) []string {
   126  	if s, err := GetStringSlice(values, key); err == nil {
   127  		return s
   128  	}
   129  	return defaultValue
   130  }
   131  

View as plain text