func (f *File) decodeStrictTo(x interface{}, drop []string) error {
	var soup interface{}
	err := hjson.Unmarshal([]byte(f.Data), &soup)
	if err != nil {
		return fmt.Errorf("file %s is not valid hjson: %s", f.Name, err)
	}
	m, ok := soup.(map[string]interface{})
	if !ok {
		return fmt.Errorf("file %s is not an object (got %T)", f.Name, soup)
	}
	for _, d := range drop {
		delete(m, d)
	}
	err = populate.Strict(x, m)
	if err != nil {
		return fmt.Errorf("error decoding file %s: %s", f.Name, err)
	}
	return nil
}
populate x with the decoded f. Top level properties in in drop are
dropped before attempting a strict population
package suite
import (
	"fmt"
	"io/ioutil"
	"log"
	"path"
	"path/filepath"
	"strings"
	"github.com/vdobler/ht/cookiejar"
	"github.com/vdobler/ht/errorlist"
	"github.com/vdobler/ht/ht"
	"github.com/vdobler/ht/internal/hjson"
	"github.com/vdobler/ht/mock"
	"github.com/vdobler/ht/populate"
	"github.com/vdobler/ht/scope"
)
func pp(msg string, v interface{}) {
	data, err := hjson.Marshal(v)
	fmt.Println(msg, string(data), err)
}
type File struct {
	Data string
	Name string
}
func LoadFile(filename string) (*File, error) {
	filename = filepath.ToSlash(filename)
	filename = path.Clean(filename)
	data, err := ioutil.ReadFile(filename)
	if err != nil {
		return nil, err
	}
	var soup interface{}
	err = hjson.Unmarshal(data, &soup)
	if err != nil {
		return nil, fmt.Errorf("file %s not valid hjson: %s", filename, err)
	}
	return &File{
		Data: string(data),
		Name: filepath.ToSlash(filename),
	}, nil
}
func (f *File) Dirname() string {
	return path.Dir(f.Name)
}
func (f *File) Basename() string {
	return path.Base(f.Name)
}
func (f *File) decode() (map[string]interface{}, error) {
	var soup interface{}
	err := hjson.Unmarshal([]byte(f.Data), &soup)
	if err != nil {
		return nil, fmt.Errorf("file %s is not valid hjson: %s", f.Name, err)
	}
	m, ok := soup.(map[string]interface{})
	if !ok {
		return nil, fmt.Errorf("file %s is not an object (got %T)", f.Name, soup)
	}
	return m, nil
}
func (f *File) decodeLaxTo(x interface{}) error {
	var soup interface{}
	err := hjson.Unmarshal([]byte(f.Data), &soup)
	if err != nil {
		return fmt.Errorf("file %s is not valid hjson: %s", f.Name, err)
	}
	m, ok := soup.(map[string]interface{})
	if !ok {
		return fmt.Errorf("file %s is not an object (got %T)", f.Name, soup)
	}
	err = populate.Lax(x, m)
	if err != nil {
		return fmt.Errorf("error decoding file %s: %s", f.Name, err)
	}
	return nil
}