Files
basics/network/utils/merge.go
spiritlhl 52bb9b9db6 update
2024-05-04 08:17:38 +00:00

55 lines
1.8 KiB
Go

package utils
import (
"fmt"
networkModel "github.com/oneclickvirt/basics/network/model"
)
// chooseString 用于选择非空字符串
func chooseString(src, dst string) string {
if src != "" {
return src
}
return dst
}
// CompareAndMergeIpInfo 用于比较和合并两个 IpInfo 结构体
func CompareAndMergeIpInfo(dst, src *networkModel.IpInfo) (res *networkModel.IpInfo, err error) {
if src == nil {
return nil, fmt.Errorf("Error merge IpInfo")
}
if dst == nil {
dst = &networkModel.IpInfo{}
}
dst.Ip = chooseString(src.Ip, dst.Ip)
dst.ASN = chooseString(src.ASN, dst.ASN)
dst.Org = chooseString(src.Org, dst.Org)
dst.Country = chooseString(src.Country, dst.Country)
dst.Region = chooseString(src.Region, dst.Region)
dst.City = chooseString(src.City, dst.City)
return dst, nil
}
// CompareAndMergeSecurityInfo 用于比较和合并两个 SecurityInfo 结构体
func CompareAndMergeSecurityInfo(dst, src *networkModel.SecurityInfo) (res *networkModel.SecurityInfo, err error) {
if src == nil {
return nil, fmt.Errorf("Error merge SecurityInfo")
}
if dst == nil {
dst = &networkModel.SecurityInfo{}
}
dst.IsAbuser = chooseString(src.IsAbuser, dst.IsAbuser)
dst.IsAttacker = chooseString(src.IsAttacker, dst.IsAttacker)
dst.IsBogon = chooseString(src.IsBogon, dst.IsBogon)
dst.IsCloudProvider = chooseString(src.IsCloudProvider, dst.IsCloudProvider)
dst.IsProxy = chooseString(src.IsProxy, dst.IsProxy)
dst.IsRelay = chooseString(src.IsRelay, dst.IsRelay)
dst.IsTor = chooseString(src.IsTor, dst.IsTor)
dst.IsTorExit = chooseString(src.IsTorExit, dst.IsTorExit)
dst.IsVpn = chooseString(src.IsVpn, dst.IsVpn)
dst.IsAnonymous = chooseString(src.IsAnonymous, dst.IsAnonymous)
dst.IsThreat = chooseString(src.IsThreat, dst.IsThreat)
return dst, nil
}