Files
golifehk/utils/shortcuts.go

147 lines
2.7 KiB
Go

package utils
import (
"bytes"
"io"
"net/http"
"os"
"strconv"
"strings"
"time"
)
var MARKDOWN_ESC []string = []string{"_", "*", "[", "]", "(", ")", "~", "`", ">", "#", "+", "-", "=", "|", "{", "}", ".", "!"}
func Contains[T comparable](slice []T, target T) bool {
for _, v := range slice {
if v == target {
return true
}
}
return false
}
func WriteMDv2Text(sb *strings.Builder, t string) {
for _, c := range MARKDOWN_ESC {
t = strings.Replace(t, c, "\\"+c, -1)
}
sb.WriteString(t)
}
func MDv2Text(t string) string {
sb := strings.Builder{}
for _, c := range MARKDOWN_ESC {
t = strings.Replace(t, c, "\\"+c, -1)
}
sb.WriteString(t)
return sb.String()
}
func IsASCIIAlnum(s string) bool {
if s == "" {
return false
}
for i := 0; i < len(s); i++ {
c := s[i]
if !(c >= '0' && c <= '9' ||
c >= 'A' && c <= 'Z' ||
c >= 'a' && c <= 'z') {
return false
}
}
return true
}
func ToPower(t string) string {
for s, r := range POWER_NUMBERS {
t = strings.ReplaceAll(t, s, r)
}
return t
}
func ReadBOM(buff *bytes.Buffer) {
b, _ := buff.ReadByte()
if b != 0xef {
buff.UnreadByte()
return
}
b, _ = buff.ReadByte()
if b != 0xbb {
buff.UnreadByte()
buff.UnreadByte()
return
}
b, _ = buff.ReadByte()
if b != 0xbf {
buff.UnreadByte()
buff.UnreadByte()
buff.UnreadByte()
}
}
func TryGetEnv[T any](name string, fallback T) T {
v := os.Getenv(name)
if v != "" {
switch any(fallback).(type) {
case uint64:
p, err := strconv.ParseUint(v, 10, 64)
if err == nil {
return any(uint64(p)).(T)
}
case uint32:
p, err := strconv.ParseUint(v, 10, 32)
if err == nil {
return any(uint32(p)).(T)
}
case int:
p, err := strconv.ParseInt(v, 10, 32)
if err == nil {
return any(int(p)).(T)
}
case float64:
p, err := strconv.ParseFloat(v, 64)
if err == nil {
return any(float64(p)).(T)
}
case float32:
p, err := strconv.ParseFloat(v, 32)
if err == nil {
return any(float32(p)).(T)
}
default:
return any(v).(T)
}
}
return fallback
}
func HttpGet(url string) (io.ReadCloser, error) {
client := &http.Client{
Timeout: 15 * time.Second,
}
req, err := http.NewRequest("GET", url, nil)
if err != nil {
return nil, err
}
ua := "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36"
req.Header.Set("User-Agent", ua)
req.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8")
req.Header.Set("Accept-Language", "en-US,en;q=0.9")
req.Header.Set("Connection", "keep-alive")
resp, err := client.Do(req)
if err != nil {
return nil, err
}
return resp.Body, nil
}