pcm-coordinator/pkg/utils/convert.go

133 lines
3.1 KiB
Go

/*
Copyright (c) [2023] [pcm]
[pcm-coordinator] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPaRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
package utils
import (
"encoding/json"
"fmt"
"github.com/robfig/cron/v3"
"io"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
"mime/multipart"
"sigs.k8s.io/yaml"
"strconv"
"strings"
)
// Convert 通过JSON赋值
func Convert(source interface{}, target interface{}) {
jsonByte, _ := json.Marshal(source)
json.Unmarshal(jsonByte, &target)
}
// Int64ToString int64转string
func Int64ToString(value int64) string {
return strconv.FormatInt(value, 10)
}
// EntryIdToString EntryID转string
func EntryIdToString(id cron.EntryID) string {
return strconv.Itoa(int(id))
}
func StringToInt(value string) int {
intValue, _ := strconv.Atoi(value)
return intValue
}
func StringToInt64(value string) int64 {
intValue, _ := strconv.ParseInt(value, 10, 64)
return intValue
}
func StringToFloat64(value string) float64 {
floatValue, _ := strconv.ParseFloat(value, 64)
return floatValue
}
func RunTimeToSeconds(runTime string) int {
time := strings.Split(runTime, ":")
day, _ := strconv.Atoi(time[0])
hour, _ := strconv.Atoi(time[1])
seconds, _ := strconv.Atoi(time[2])
return day*3600 + hour*60 + seconds
}
func Yaml2struct(fileHeader *multipart.FileHeader, req interface{}) error {
file, err := fileHeader.Open()
if err != nil {
return err
}
fileByte, err := io.ReadAll(file)
if err != nil {
return err
}
err = yaml.Unmarshal(fileByte, &req)
if err != nil {
return err
}
return nil
}
func K8sUnstructured(dataString string, target interface{}) {
unstructuredList := unstructured.UnstructuredList{}
json.Unmarshal([]byte(dataString), &unstructuredList)
runtime.DefaultUnstructuredConverter.FromUnstructured(unstructuredList.UnstructuredContent(), target)
}
// removeDuplication_map 去重数组
func RemoveDuplication_map(arr []string) []string {
set := make(map[string]struct{}, len(arr))
j := 0
for _, v := range arr {
_, ok := set[v]
if ok {
continue
}
set[v] = struct{}{}
arr[j] = v
j++
}
return arr[:j]
}
func ConvertStructToMap(in interface{}) map[string]string {
out := make(map[string]string)
b, _ := json.Marshal(&in)
var m map[string]interface{}
_ = json.Unmarshal(b, &m)
for k, v := range m {
out[k] = fmt.Sprintf("%v", v)
}
return out
}
func StringToYaml(in string) *string {
// 将Go字符串转换为字节数组
byteArray := []byte(in)
// 解析YAML数据
var yamlData map[string]interface{}
err := yaml.Unmarshal(byteArray, &yamlData)
// 将解析后的数据转换为YAML格式
yamlString, err := yaml.Marshal(yamlData)
if err != nil {
fmt.Println(err)
}
resp := string(yamlString)
return &resp
}