code: func (c *Config) SaveVimClient(client *govmomi.Client) error {
  	if !c.Persist {
  		return nil
  	}
  
  	p, err := c.vimSessionFile()
  	if err != nil {
  		return err
  	}
  
  	log.Printf("[DEBUG] Will persist SOAP client session data to %q", p)
  	err = os.MkdirAll(filepath.Dir(p), 0700)
  	if err != nil {
  		return err
  	}
  
  	f, err := os.OpenFile(p, os.O_CREATE|os.O_WRONLY, 0600)
  	if err != nil {
  		return err
  	}
  
  	defer func() {
  		if err = f.Close(); err != nil {
  			log.Printf("[DEBUG] Error closing SOAP client session file %q: %s", p, err)
  		}
  	}()
  
  	err = json.NewEncoder(f).Encode(client.Client)
  	if err != nil {
  		return err
  	}
  
  	return nil
  }
docs: // SaveVimClient saves a client to the supplied path. This facilitates re-use of
  // the session at a later date.
  //
  // Note the logic in this function has been largely adapted from govc and is
  // designed to be compatible with it.