bash_go_service/config-loader/internal/models/config.go

74 lines
1.9 KiB
Go

package models
import (
"bash_go_service/shared/pkg/constants"
"encoding/json"
"strings"
)
// Rule 映射 C 结构体
type Rule struct {
Cmd [constants.MaxRuleCmdLength]byte // 命令
Type [constants.MaxRuleTypeLength]byte // 类型
Msg [constants.MaxRuleMsgLength]byte // 消息
Args [constants.MaxArgs][constants.MaxArgLength]byte // 参数
ArgCount int32 // 参数数量
}
// ConfigData 映射 C 结构体
type ConfigData struct {
Enabled bool // 是否启用
Rules [constants.MaxRules]Rule // 规则列表
RuleCount int32 // 规则数量
}
// JSONRule 表示 JSON 配置中的一条规则
type JSONRule struct {
Cmd string `json:"cmd"` // 命令
Type string `json:"type"` // 类型
Msg string `json:"msg"` // 消息
Args []string `json:"args"` // 参数列表
}
// JSONConfig 表示整个 JSON 配置
type JSONConfig struct {
Enabled bool `json:"enabled"` // 是否启用
Rules []JSONRule `json:"rules"` // 规则列表
}
func (c *ConfigData) ToJSON() (string, error) {
jsonConfig := JSONConfig{
Enabled: c.Enabled,
Rules: make([]JSONRule, c.RuleCount),
}
for i := 0; i < int(c.RuleCount); i++ {
jsonConfig.Rules[i] = c.Rules[i].ToJSONRule()
}
jsonData, err := json.Marshal(jsonConfig)
if err != nil {
return "", err
}
return string(jsonData), nil
}
func (r *Rule) ToJSONRule() JSONRule {
// 处理C字符串到Go字符串的转换,去除末尾的空字符
cmd := strings.TrimRight(string(r.Cmd[:]), "\x00")
typ := strings.TrimRight(string(r.Type[:]), "\x00")
msg := strings.TrimRight(string(r.Msg[:]), "\x00")
// 处理参数数组
args := make([]string, r.ArgCount)
for i := 0; i < int(r.ArgCount); i++ {
args[i] = strings.TrimRight(string(r.Args[i][:]), "\x00")
}
return JSONRule{
Cmd: cmd,
Type: typ,
Msg: msg,
Args: args,
}
}