func ToStructs[T any]()

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
}