55 lines
838 B
Go
55 lines
838 B
Go
|
package wmo
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
)
|
||
|
|
||
|
func (c *Coll[TData]) decodeSingle(ctx context.Context, dec Decodable) (TData, error) {
|
||
|
if c.customDecoder != nil {
|
||
|
|
||
|
return (*c.customDecoder)(ctx, dec)
|
||
|
|
||
|
} else {
|
||
|
|
||
|
var res TData
|
||
|
|
||
|
err := dec.Decode(&res)
|
||
|
if err != nil {
|
||
|
return *new(TData), err
|
||
|
}
|
||
|
|
||
|
return res, nil
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (c *Coll[TData]) decodeAll(ctx context.Context, cursor Cursorable) ([]TData, error) {
|
||
|
if c.customDecoder != nil {
|
||
|
|
||
|
res := make([]TData, 0, cursor.RemainingBatchLength())
|
||
|
|
||
|
for cursor.Next(ctx) {
|
||
|
entry, err := (*c.customDecoder)(ctx, cursor)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
res = append(res, entry)
|
||
|
}
|
||
|
|
||
|
return res, nil
|
||
|
|
||
|
} else {
|
||
|
|
||
|
res := make([]TData, 0, cursor.RemainingBatchLength())
|
||
|
|
||
|
err := cursor.All(ctx, &res)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return res, nil
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|