// 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 }