48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
package tmpfile
|
|
|
|
import (
|
|
"math/rand"
|
|
"os"
|
|
"strings"
|
|
|
|
"git.burning.moe/celediel/agedit/pkg/env"
|
|
)
|
|
|
|
const chars string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
|
|
|
|
type Generator struct {
|
|
Prefix, Suffix string
|
|
Length int
|
|
}
|
|
|
|
// GenerateName generates a random temporary filename like agedit_geef0XYC30RGV
|
|
func (g *Generator) GenerateName() string {
|
|
return g.Prefix + randomString(chars, g.Length) + g.Suffix
|
|
}
|
|
|
|
// GenerateFullPath generates a random temporary filename and appends it to the OS's temporary directory
|
|
func (g *Generator) GenerateFullPath() string {
|
|
return env.GetTempDirectory() + string(os.PathSeparator) + g.GenerateName()
|
|
}
|
|
|
|
// NewGenerator returns a new Generator
|
|
func NewGenerator(prefix, suffix string, length int) Generator {
|
|
return Generator{
|
|
Prefix: prefix,
|
|
Suffix: suffix,
|
|
Length: length,
|
|
}
|
|
}
|
|
|
|
func randomString(set string, length int) string {
|
|
out := strings.Builder{}
|
|
for i := 0; i < length; i++ {
|
|
out.WriteByte(randomChar(set))
|
|
}
|
|
return out.String()
|
|
}
|
|
|
|
func randomChar(set string) byte {
|
|
return set[rand.Intn(len(set))]
|
|
}
|