1.4.5.2
This commit is contained in:
58
EdgeDNS/internal/models/ranges.go
Normal file
58
EdgeDNS/internal/models/ranges.go
Normal file
@@ -0,0 +1,58 @@
|
||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
||||
//go:build plus
|
||||
|
||||
package models
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/dnsconfigs"
|
||||
"github.com/iwind/TeaGo/maps"
|
||||
)
|
||||
|
||||
// InitRangesFromJSON 从JSON中初始化线路范围
|
||||
func InitRangesFromJSON(rangesJSON []byte) (ranges []dnsconfigs.NSRouteRangeInterface, err error) {
|
||||
if len(rangesJSON) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
var rangeMaps = []maps.Map{}
|
||||
err = json.Unmarshal(rangesJSON, &rangeMaps)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, rangeMap := range rangeMaps {
|
||||
var rangeType = rangeMap.GetString("type")
|
||||
paramsJSON, err := json.Marshal(rangeMap.Get("params"))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var r dnsconfigs.NSRouteRangeInterface
|
||||
|
||||
switch rangeType {
|
||||
case dnsconfigs.NSRouteRangeTypeIP:
|
||||
r = &dnsconfigs.NSRouteRangeIPRange{}
|
||||
case dnsconfigs.NSRouteRangeTypeCIDR:
|
||||
r = &dnsconfigs.NSRouteRangeCIDR{}
|
||||
case dnsconfigs.NSRouteRangeTypeRegion:
|
||||
r = &dnsconfigs.NSRouteRangeRegion{
|
||||
Connector: rangeMap.GetString("connector"),
|
||||
}
|
||||
r.SetRegionResolver(DefaultRegionResolver)
|
||||
default:
|
||||
return nil, errors.New("invalid route line type '" + rangeType + "'")
|
||||
}
|
||||
|
||||
err = json.Unmarshal(paramsJSON, r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = r.Init()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
ranges = append(ranges, r)
|
||||
}
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user