code: func (f *JoinFunc) UnmarshalJSON(data []byte) error {
  	v := struct {
  		FnJoin []json.RawMessage `json:"Fn::Join"`
  	}{}
  	if err := json.Unmarshal(data, &v); err != nil {
  		return err
  	}
  	if len(v.FnJoin) != 2 {
  		return &json.UnsupportedValueError{Str: string(data)}
  	}
  	if err := json.Unmarshal(v.FnJoin[0], &f.Separator); err != nil {
  		return err
  	}
  	if err := json.Unmarshal(v.FnJoin[1], &f.Items); err != nil {
  		return err
  	}
  
  	return nil
  }
docs: // UnmarshalJSON sets the object from the provided JSON representation