package decoders

// MapGet retrievs a key from an expected map
// it falls back if the input is not a map
// or the key was not found.
func MapGet(m interface{}, key string, fallback interface{}) interface{} {
	smap, ok := m.(map[string]interface{})
	if !ok {
		return fallback
	}
	val, ok := smap[key]
	if !ok {
		return fallback
	}
	return val
}

// MapGetString retrievs a key from a map and
// asserts its type is a string. Otherwise fallback
// will be returned.
func MapGetString(m interface{}, key string, fallback string) string {
	val := MapGet(m, key, fallback)
	return val.(string)
}

// MapGetBool will retrieve a boolean value
// for a given key.
func MapGetBool(m interface{}, key string, fallback bool) bool {
	val := MapGet(m, key, fallback)
	return val.(bool)
}
