code: func NewFromReader(reader io.Reader) (GCSCli, error) {
  
  	dec := json.NewDecoder(reader)
  	var c GCSCli
  	if err := dec.Decode(&c); err != nil {
  		return GCSCli{}, err
  	}
  
  	if c.BucketName == "" {
  		return GCSCli{}, ErrEmptyBucketName
  	}
  
  	if c.CredentialsSource == ServiceAccountFileCredentialsSource &&
  		c.ServiceAccountFile == "" {
  		return GCSCli{}, ErrEmptyServiceAccountFile
  	}
  
  	if len(c.EncryptionKey) != 32 && c.EncryptionKey != nil {
  		return GCSCli{}, ErrWrongLengthEncryptionKey
  	}
  
  	return c, nil
  }
docs: // NewFromReader returns the new gcscli configuration struct from the
  // contents of the reader.
  //
  // reader.Read() is expected to return valid JSON.