// 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 }
// 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), } } }