code: func NewClient(cfg *Config) (*Client, error) {
  	pk, err := PrivateKeyFromString([]byte(cfg.Key))
  	if err != nil {
  		return nil, err
  	}
  
  	baseUrl, _ := url.Parse(cfg.BaseURL)
  
  	tr := &http.Transport{
  		Proxy: http.ProxyFromEnvironment,
  		Dial: (&net.Dialer{
  			Timeout:   30 * time.Second,
  			KeepAlive: 30 * time.Second,
  		}).Dial,
  		TLSClientConfig:     &tls.Config{InsecureSkipVerify: cfg.SkipSSL},
  		TLSHandshakeTimeout: 10 * time.Second,
  	}
  
  	c := &Client{
  		Auth: &AuthConfig{
  			PrivateKey: pk,
  			ClientName: cfg.Name,
  		},
  		client: &http.Client{
  			Transport: tr,
  			Timeout:   cfg.Timeout * time.Second,
  		},
  		BaseURL: baseUrl,
  	}
  	c.ACLs = &ACLService{client: c}
  	c.Clients = &ApiClientService{client: c}
  	c.Cookbooks = &CookbookService{client: c}
  	c.DataBags = &DataBagService{client: c}
  	c.Environments = &EnvironmentService{client: c}
  	c.Nodes = &NodeService{client: c}
  	c.Principals = &PrincipalService{client: c}
  	c.Roles = &RoleService{client: c}
  	c.Sandboxes = &SandboxService{client: c}
  	c.Search = &SearchService{client: c}
  	return c, nil
  }
docs: // NewClient is the client generator used to instantiate a client for talking to a chef-server
  // It is a simple constructor for the Client struct intended as a easy interface for issuing
  // signed requests