code: func Process(pkg, outdir string, newType string, optset ...func(*Options)) error {
  	opts := DefaultOptions
  	for _, fn := range optset {
  		fn(&opts)
  	}
  
  	p, err := findPackage(pkg)
  	if err != nil {
  		return err
  	}
  
  	if outdir == "" {
  		outdir = path.Base(pkg)
  	}
  
  	if err := os.MkdirAll(outdir, os.ModePerm); err != nil {
  		return err
  	}
  
  	t := parseTargetType(newType)
  
  	files, err := processFiles(p, p.GoFiles, t)
  	if err != nil {
  		return err
  	}
  
  	if err := write(outdir, files); err != nil {
  		return err
  	}
  
  	if opts.SkipTestFiles {
  		return nil
  	}
  
  	files, err = processFiles(p, p.TestGoFiles, t)
  	if err != nil {
  		return err
  	}
  
  	return write(outdir, files)
  }
docs: // Process creates a specific package from the generic specified in pkg