code: func (c *Connector) Range(ctx context.Context, ei *dosa.EntityInfo, columnConditions map[string][]*dosa.Condition, minimumFields []string, token string, limit int) ([]map[string]dosa.FieldValue, string, error) {
  	limit32 := int32(limit)
  	rpcMinimumFields := makeRPCminimumFields(minimumFields)
  	rpcConditions, err := createRPCConditions(columnConditions)
  	if err != nil {
  		return nil, "", errors.Wrap(err, "failed to Range: invalid column conditions")
  	}
  	rangeRequest := dosarpc.RangeRequest{
  		Ref:          entityInfoToSchemaRef(ei),
  		Token:        &token,
  		Limit:        &limit32,
  		Conditions:   rpcConditions,
  		FieldsToRead: rpcMinimumFields,
  	}
  	response, err := c.client.Range(ctx, &rangeRequest, getHeaders(c.headers)...)
  	if err != nil {
  		if !dosarpc.Dosa_Range_Helper.IsException(err) {
  			return nil, "", errors.Wrap(err, "failed to Range due to network issue")
  		}
  
  		return nil, "", errors.Wrap(err, "failed to Range")
  	}
  	results := make([]map[string]dosa.FieldValue, len(response.Entities))
  	for idx, entity := range response.Entities {
  		results[idx] = decodeResults(ei, entity)
  	}
  	return results, *response.NextToken, nil
  }
docs: // Range does a scan across a range