package v2 import ( "context" "forge.cadoles.com/cadoles/go-emlid/reach/client/protocol" "github.com/Masterminds/semver/v3" "github.com/pkg/errors" ) const Identifier protocol.Identifier = "v2" const compatibleVersionConstraint = ">= 32" type Protocol struct { } // Available implements protocol.Protocol. func (p *Protocol) Available(ctx context.Context, addr string) (bool, error) { ops := p.Operations(addr).(*Operations) info, err := ops.GetInfo(ctx) if err != nil { return false, errors.WithStack(err) } versionConstraint, err := semver.NewConstraint(compatibleVersionConstraint) if err != nil { return false, errors.WithStack(err) } version, err := semver.NewVersion(info.Reachview.Version) if err != nil { return false, errors.WithStack(err) } if !versionConstraint.Check(version) { return false, errors.Errorf("reachview version '%s' does not match constraint '%s'", info.Reachview.Version, compatibleVersionConstraint) } return true, nil } // Identifier implements protocol.Protocol. func (p *Protocol) Identifier() protocol.Identifier { return Identifier } // Operations implements protocol.Protocol. func (p *Protocol) Operations(addr string) protocol.Operations { return &Operations{addr: addr} } var _ protocol.Protocol = &Protocol{}