package vals
import (
)
type Assocer interface {
Assoc(k, v interface{}) (interface{}, error)
}
var (
errAssocUnsupported = errors.New("assoc is not supported")
errReplacementMustBeString = errors.New("replacement must be string")
errAssocWithSlice = errors.New("assoc with slice not yet supported")
)
func (, , interface{}) (interface{}, error) {
switch a := .(type) {
case string:
return assocString(, , )
case List:
return assocList(, , )
case Map:
return .Assoc(, ), nil
case Assocer:
return .Assoc(, )
}
return nil, errAssocUnsupported
}
func ( string, , interface{}) (interface{}, error) {
, , := convertStringIndex(, )
if != nil {
return nil,
}
, := .(string)
if ! {
return nil, errReplacementMustBeString
}
return [:] + + [:], nil
}
func ( List, , interface{}) (interface{}, error) {
, := ConvertListIndex(, .Len())
if != nil {
return nil,
}
if .Slice {
return nil, errAssocWithSlice
}
return .Assoc(.Lower, ), nil
}