37 lines
832 B
Go
37 lines
832 B
Go
package storage
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
// SaveRequest writes rf to .greq/requests/<folder>/<slug>.yaml.
|
|
// folder may be empty (places the file directly in requests/).
|
|
func SaveRequest(rf RequestFile, folder string) (string, error) {
|
|
dir := filepath.Join(RootDir, "requests")
|
|
if folder != "" {
|
|
dir = filepath.Join(dir, folder)
|
|
}
|
|
if err := os.MkdirAll(dir, 0o755); err != nil {
|
|
return "", err
|
|
}
|
|
|
|
slug := strings.ToLower(strings.ReplaceAll(rf.Name, " ", "_"))
|
|
slug = strings.Map(func(r rune) rune {
|
|
if (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '_' || r == '-' {
|
|
return r
|
|
}
|
|
return '_'
|
|
}, slug)
|
|
path := filepath.Join(dir, slug+".yaml")
|
|
|
|
data, err := yaml.Marshal(&rf)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return path, os.WriteFile(path, data, 0o644)
|
|
}
|