shithub: furgit

ref: 01d15bccf3b1dcc51516b1f64d50950b31d7f8fb
dir: /mergebase/seq.go/

View raw version
package mergebase

import (
	"errors"
	"iter"

	"codeberg.org/lindenii/furgit/objectid"
)

// Seq returns the merge-base sequence. It is single-use.
func (query *Bases) Seq() iter.Seq[objectid.ObjectID] {
	if query.seqUsed {
		return func(yield func(objectid.ObjectID) bool) {
			_ = yield

			if query.err == nil {
				query.err = errors.New("mergebase: sequence already consumed")
			}
		}
	}

	query.seqUsed = true

	return func(yield func(objectid.ObjectID) bool) {
		if query.err != nil {
			return
		}

		bases, err := query.compute()
		if err != nil {
			query.err = err

			return
		}

		for _, id := range bases {
			if !yield(id) {
				return
			}
		}
	}
}

// Err returns the terminal error, if any, once Seq has been consumed.
func (query *Bases) Err() error {
	return query.err
}