Ejemplo n.º 1
0
// Context returns mappings between types that can be parsed using
// strconv package and functions for that conversions.
// All conversion functions meet the following criteria:
// 1. They are exported.
// 2. They expect 3 arguments: url.Values, string, ...int.
// 3. They return 1 argument.
// This is useful for code generation.
func Context() FnMap {
	p, _ := path.ImportToAbsolute("github.com/colegion/goal/strconv")
	fs := FnMap{}
	pkg := reflect.ParseDir(p, false)
	for i := range pkg.Funcs {
		if !strconvFunc(pkg.Funcs[i]) {
			continue
		}
		fs[pkg.Funcs[i].Results[0].Type.String()] = pkg.Funcs[i]
	}
	return fs
}
Ejemplo n.º 2
0
// processPackage gets an import path of a package, processes it, and
// extracts controllers + actions.
func (ps packages) processPackage(importPath string) {
	log.Trace.Printf(`Parsing "%s"...`, importPath)
	dir, err := path.ImportToAbsolute(importPath)
	log.AssertNil(err)
	p := reflect.ParseDir(dir, false)
	cs := ps.extractControllers(p)
	if len(cs.data) > 0 {
		ps[importPath] = controllers{
			data: cs.data,
			init: ps.extractInitFunc(p),
		}
	}
}