code: func run(program string) (*model.Package, error) {
  	f, err := ioutil.TempFile("", "")
  	if err != nil {
  		return nil, err
  	}
  
  	filename := f.Name()
  	defer os.Remove(filename)
  	if err := f.Close(); err != nil {
  		return nil, err
  	}
  
  	// Run the program.
  	cmd := exec.Command(program, "-output", filename)
  	cmd.Stdout = os.Stdout
  	cmd.Stderr = os.Stderr
  	if err := cmd.Run(); err != nil {
  		return nil, err
  	}
  
  	f, err = os.Open(filename)
  	if err != nil {
  		return nil, err
  	}
  
  	// Process output.
  	var pkg model.Package
  	if err := gob.NewDecoder(f).Decode(&pkg); err != nil {
  		return nil, err
  	}
  
  	if err := f.Close(); err != nil {
  		return nil, err
  	}
  
  	return &pkg, nil
  }
docs: // run the given program and parse the output as a model.Package.