in azkustodata/query/row_impl.go [224:270]
func ToStructs[T any](data interface{}) ([]T, error) {
var rows []Row
var errs error
switch v := data.(type) {
case Table:
rows = v.Rows()
case IterativeTable:
full, err := v.ToTable()
if err != nil {
return nil, err
}
rows = full.Rows()
case []Row:
rows = v
case Row:
rows = []Row{v}
case Dataset:
tables := v.Tables()
if len(tables) == 0 {
return nil, errors.ES(errors.OpUnknown, errors.KInternal, "dataset does not contain any tables")
}
if !tables[0].IsPrimaryResult() {
return nil, errors.ES(errors.OpUnknown, errors.KInternal, "dataset contains no primary results")
}
rows = tables[0].Rows()
default:
return nil, errors.ES(errors.OpUnknown, errors.KInternal, "invalid data type - expected Dataset, Table, BaseTable or []Row")
}
if rows == nil || len(rows) == 0 {
return nil, errs
}
out := make([]T, len(rows))
for i, r := range rows {
if err := r.ToStruct(&out[i]); err != nil {
out = out[:i]
if len(out) == 0 {
out = nil
}
return out, err
}
}
return out, errs
}