package v2 import ( "context" "forge.cadoles.com/cadoles/go-emlid/reach/client/logger" "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 { logger logger.Logger dial protocol.DialFunc } // 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, nil } 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{ dial: p.dial, addr: addr, logger: p.logger, } } var _ protocol.Protocol = &Protocol{}