63 lines
1.8 KiB
Go
63 lines
1.8 KiB
Go
package config
|
||
|
||
import (
|
||
"fmt"
|
||
"strings"
|
||
|
||
"github.com/any-hub/any-hub/internal/hubmodule"
|
||
"github.com/any-hub/any-hub/internal/hubmodule/legacy"
|
||
)
|
||
|
||
// parseRolloutFlag 将配置中的 rollout 字段标准化,并结合模块类型输出最终状态。
|
||
func parseRolloutFlag(raw string, moduleKey string) (legacy.RolloutFlag, error) {
|
||
normalized := strings.ToLower(strings.TrimSpace(raw))
|
||
if normalized == "" {
|
||
return defaultRolloutFlag(moduleKey), nil
|
||
}
|
||
|
||
switch normalized {
|
||
case string(legacy.RolloutLegacyOnly):
|
||
return legacy.RolloutLegacyOnly, nil
|
||
case string(legacy.RolloutDual):
|
||
if moduleKey == hubmodule.DefaultModuleKey() {
|
||
return legacy.RolloutLegacyOnly, nil
|
||
}
|
||
return legacy.RolloutDual, nil
|
||
case string(legacy.RolloutModular):
|
||
if moduleKey == hubmodule.DefaultModuleKey() {
|
||
return legacy.RolloutLegacyOnly, nil
|
||
}
|
||
return legacy.RolloutModular, nil
|
||
default:
|
||
return "", fmt.Errorf("不支持的 rollout 值: %s", raw)
|
||
}
|
||
}
|
||
|
||
func defaultRolloutFlag(moduleKey string) legacy.RolloutFlag {
|
||
if strings.TrimSpace(moduleKey) == "" || moduleKey == hubmodule.DefaultModuleKey() {
|
||
return legacy.RolloutLegacyOnly
|
||
}
|
||
return legacy.RolloutModular
|
||
}
|
||
|
||
// EffectiveModuleKey 根据 rollout 状态计算真实运行的模块。
|
||
func EffectiveModuleKey(moduleKey string, flag legacy.RolloutFlag) string {
|
||
if flag == legacy.RolloutLegacyOnly {
|
||
return hubmodule.DefaultModuleKey()
|
||
}
|
||
normalized := strings.ToLower(strings.TrimSpace(moduleKey))
|
||
if normalized == "" {
|
||
return hubmodule.DefaultModuleKey()
|
||
}
|
||
return normalized
|
||
}
|
||
|
||
// RolloutFlagValue 返回当前 Hub 的 rollout flag(假定 Validate 已经通过)。
|
||
func (h HubConfig) RolloutFlagValue() legacy.RolloutFlag {
|
||
flag := legacy.RolloutFlag(strings.ToLower(strings.TrimSpace(h.Rollout)))
|
||
if flag == "" {
|
||
return defaultRolloutFlag(h.Module)
|
||
}
|
||
return flag
|
||
}
|