package conf import ( "encoding/json" ) type CoreConfig struct { Type string `json:"Type"` Name string `json:"Name"` XrayConfig *XrayConfig `json:"-"` SingConfig *SingConfig `json:"-"` Hysteria2Config *Hysteria2Config `json:"-"` } type _CoreConfig CoreConfig func (c *CoreConfig) UnmarshalJSON(b []byte) error { err := json.Unmarshal(b, (*_CoreConfig)(c)) if err != nil { return err } switch c.Type { case "xray": c.XrayConfig = NewXrayConfig() return json.Unmarshal(b, c.XrayConfig) case "sing": c.SingConfig = NewSingConfig() return json.Unmarshal(b, c.SingConfig) case "hysteria2": c.Hysteria2Config = NewHysteria2Config() return json.Unmarshal(b, c.Hysteria2Config) } return nil }