package key
import (
"crypto/sha1"
"fmt"
"io/fs"
"os"
"path/filepath"
"strconv"
"strings"
)
type Key func () (string , error )
func String (s ...string ) Key {
return func () (string , error ) {
return strings .Join (s , "\n" ), nil
}
}
func FileChecksum (file string ) Key {
return func () (checksum string , err error ) {
var content []byte
if content , err = os .ReadFile (file ); err == nil {
checksum = fmt .Sprintf ("%x" , sha1 .Sum (content ))
}
return
}
}
func FileStats (file string ) Key {
return func () (checksum string , err error ) {
var path string
if path , err = filepath .Abs (file ); err == nil {
var info os .FileInfo
if info , err = os .Stat (file ); err == nil {
return String (path , strconv .FormatInt (info .Size (), 10 ), info .ModTime ().String ())()
}
}
return
}
}
func FolderStats (folder string ) Key {
return func () (string , error ) {
sums := make ([]string , 0 )
err := filepath .Walk (folder , func (path string , info fs .FileInfo , err error ) error {
if !info .IsDir () {
sum , err := String (info .Name (), strconv .FormatInt (info .Size (), 10 ), info .ModTime ().String ())()
if err != nil {
return err
}
sums = append (sums , sum )
}
return nil
})
if err != nil {
return "" , err
}
return strings .Join (sums , "\n" ), nil
}
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .