| package tarsum |
| |
| import ( |
| "errors" |
| "strings" |
| ) |
| |
| // versioning of the TarSum algorithm |
| // based on the prefix of the hash used |
| // i.e. "tarsum+sha256:e58fcf7418d4390dec8e8fb69d88c06ec07039d651fedd3aa72af9972e7d046b" |
| type Version int |
| |
| const ( |
| // Prefix of "tarsum" |
| Version0 Version = iota |
| // Prefix of "tarsum.dev" |
| // NOTE: this variable will be of an unsettled next-version of the TarSum calculation |
| VersionDev |
| ) |
| |
| // Get a list of all known tarsum Version |
| func GetVersions() []Version { |
| v := []Version{} |
| for k := range tarSumVersions { |
| v = append(v, k) |
| } |
| return v |
| } |
| |
| var tarSumVersions = map[Version]string{ |
| 0: "tarsum", |
| 1: "tarsum.dev", |
| } |
| |
| func (tsv Version) String() string { |
| return tarSumVersions[tsv] |
| } |
| |
| // GetVersionFromTarsum returns the Version from the provided string |
| func GetVersionFromTarsum(tarsum string) (Version, error) { |
| tsv := tarsum |
| if strings.Contains(tarsum, "+") { |
| tsv = strings.SplitN(tarsum, "+", 2)[0] |
| } |
| for v, s := range tarSumVersions { |
| if s == tsv { |
| return v, nil |
| } |
| } |
| return -1, ErrNotVersion |
| } |
| |
| var ( |
| ErrNotVersion = errors.New("string does not include a TarSum Version") |
| ErrVersionNotImplemented = errors.New("TarSum Version is not yet implemented") |
| ) |