package collection | |
type Collection []map[string]interface{} | |
// Where filters the collection by a given key / value pair. | |
func (c Collection) Where(key string, values ...interface{}) Collection { | |
var d = make([]map[string]interface{}, 0) | |
if len(values) < 1 { | |
for _, value := range c { | |
if isTrue(value[key]) { | |
d = append(d, value) | |
} | |
} | |
} else if len(values) < 2 { | |
for _, value := range c { | |
if value[key] == values[0] { | |
d = append(d, value) | |
} | |
} | |
} else if values[0].(string) == "=" { | |
for _, value := range c { | |
if value[key] == values[1] { | |
d = append(d, value) | |
} | |
} | |
} | |
return d | |
} | |
func (c Collection) Length() int { | |
return len(c) | |
} | |
func (c Collection) FirstGet(key string) interface{} { | |
return c[0][key] | |
} | |
func isTrue(a interface{}) bool { | |
switch a := a.(type) { | |
case uint: | |
return a != uint(0) | |
case uint8: | |
return a != uint8(0) | |
case uint16: | |
return a != uint16(0) | |
case uint32: | |
return a != uint32(0) | |
case uint64: | |
return a != uint64(0) | |
case int: | |
return a != int(0) | |
case int8: | |
return a != int8(0) | |
case int16: | |
return a != int16(0) | |
case int32: | |
return a != int32(0) | |
case int64: | |
return a != int64(0) | |
case float32: | |
return a != float32(0) | |
case float64: | |
return a != float64(0) | |
case string: | |
return a != "" | |
case bool: | |
return a | |
default: | |
return false | |
} | |
} | |