func (h Hash) Scheme() HashScheme {
	colon := strings.Index(string(h), ":")
	if colon < 0 {
		panic(fmt.Sprintf("invalid hash string %q", h))
	}
	return HashScheme(h[:colon+1])
}
Scheme returns the scheme of the recieving hash. If the receiver is not
using valid syntax then this method will panic.
package getproviders
import (
	"crypto/sha256"
	"fmt"
	"io"
	"os"
	"path/filepath"
	"strings"
	"golang.org/x/mod/sumdb/dirhash"
)
type Hash string
const NilHash = Hash("")
func ParseHash(s string) (Hash, error) {
	colon := strings.Index(s, ":")
	if colon < 1 {  
		return NilHash, fmt.Errorf("hash string must start with a scheme keyword followed by a colon")
	}
	return Hash(s), nil
}
func MustParseHash(s string) Hash {
	hash, err := ParseHash(s)
	if err != nil {
		panic(err.Error())
	}
	return hash
}