package storage import ( "crypto/sha256" "fmt" "io" ) type WalkMode int const ( Folder WalkMode = iota File FileFolder ) type Storage interface { Walk(path string, walkMode WalkMode) <-chan string Get(path string) (io.Reader, error) } func CalculateSHA256(r io.Reader) (string, error) { h := sha256.New() if _, err := io.Copy(h, r); err != nil { return "", err } return fmt.Sprintf("%x", h.Sum(nil)), nil }