package common import ( "context" "github.com/blang/semver/v4" "github.com/pkg/errors" ) type VersionHandlerFunc func(ctx context.Context, version string, stable bool) error type VersionHandler struct { Range string Handler VersionHandlerFunc } func NewVersionHandler(versionRange string, h VersionHandlerFunc) *VersionHandler { return &VersionHandler{ Range: versionRange, Handler: h, } } func (c *Client) HandleVersion(ctx context.Context, handlers ...*VersionHandler) error { rawVersion, stable, err := c.ReachViewVersion(ctx) if err != nil { return errors.Wrap(err, "could not retrieve reachview version") } version, err := semver.ParseTolerant(rawVersion) if err != nil { return errors.Wrap(err, "could not parse reachview version") } for _, h := range handlers { versionRange, err := semver.ParseRange(h.Range) if err != nil { return errors.Wrap(err, "could not parse handler version range") } if !versionRange(version) { continue } if err := h.Handler(ctx, rawVersion, stable); err != nil { return errors.WithStack(err) } } return nil }