OnlineLibrary
75 строк · 1.6 Кб
1package util
2
3import (
4"encoding/xml"
5"fmt"
6"os"
7"strings"
8"time"
9)
10
11// Replaces all forbidden characters in s string with sign "_"
12func ReplaceForbiddenCharacters(s string) string {
13chars := []string{"/", "\\", "?", "%", "*", ":", "|", "\"", "<", ">"}
14for _, ch := range chars {
15s = strings.ReplaceAll(s, ch, "_")
16}
17return s
18}
19
20// Formatting duration as HH:MM:SS
21func FmtDuration(d time.Duration) string {
22h := d / time.Hour
23m := (d % time.Hour) / time.Minute
24s := (d % time.Minute) / time.Second
25return fmt.Sprintf("%02d:%02d:%02d", int(h), int(m), int(s))
26}
27
28// Parsing of duration from string HH:MM:SS
29func ParseDuration(s string) (time.Duration, error) {
30var hh, mm, ss time.Duration
31_, err := fmt.Sscanf(s, "%d:%d:%d", &hh, &mm, &ss)
32if err != nil {
33return 0, err
34}
35return time.Hour*hh + time.Minute*mm + time.Second*ss, nil
36}
37
38// StringInSlice checks if a string exists in the specified slice of strings
39func StringInSlice(str string, slc []string) bool {
40for _, s := range slc {
41if str == s {
42return true
43}
44}
45return false
46}
47
48// FileIsExist checks that path points to an existing file with the specified size
49func FileIsExist(path string, size int64) bool {
50if info, err := os.Stat(path); err == nil {
51if !info.IsDir() && info.Size() == size {
52return true
53}
54}
55return false
56}
57
58func SaveXMLFile(path string, v any) error {
59f, err := CreateSecureFile(path)
60if err != nil {
61return err
62}
63enc := xml.NewEncoder(f)
64enc.Indent("", "\t") // for readability
65err = enc.Encode(v)
66if err == nil {
67err = enc.Close()
68}
69if err != nil {
70f.Corrupted()
71f.Close()
72return err
73}
74return f.Close()
75}
76