2024-05-24 15:05:12 +08:00

33 lines
626 B
Go

package dataver
type SyncResult[T any] struct {
Version uint
DeleteEID []string
Changes []T
Full bool
}
func NewSyncResult[T any](wl *WriteLog, find func(eIds []string) ([]T, error)) (*SyncResult[T], error) {
var findEIDs []string
var res SyncResult[T]
if wl.Full() {
res.Full = true
} else {
for _, l := range wl.Logs {
if l.Deleted {
res.DeleteEID = append(res.DeleteEID, l.EID)
} else {
findEIDs = append(findEIDs, l.EID)
}
}
}
if res.Full || len(findEIDs) > 0 {
var err error
res.Changes, err = find(findEIDs)
if err != nil {
return nil, err
}
}
return &res, nil
}