12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- package option
- import (
- "bytes"
- "strings"
- "github.com/sagernet/sing-box/common/json"
- E "github.com/sagernet/sing/common/exceptions"
- )
- type _Options struct {
- Schema string `json:"$schema,omitempty"`
- Log *LogOptions `json:"log,omitempty"`
- DNS *DNSOptions `json:"dns,omitempty"`
- NTP *NTPOptions `json:"ntp,omitempty"`
- Inbounds []Inbound `json:"inbounds,omitempty"`
- Outbounds []Outbound `json:"outbounds,omitempty"`
- Route *RouteOptions `json:"route,omitempty"`
- Experimental *ExperimentalOptions `json:"experimental,omitempty"`
- }
- type Options _Options
- func (o *Options) UnmarshalJSON(content []byte) error {
- decoder := json.NewDecoder(json.NewCommentFilter(bytes.NewReader(content)))
- decoder.DisallowUnknownFields()
- err := decoder.Decode((*_Options)(o))
- if err == nil {
- return nil
- }
- if syntaxError, isSyntaxError := err.(*json.SyntaxError); isSyntaxError {
- prefix := string(content[:syntaxError.Offset])
- row := strings.Count(prefix, "\n") + 1
- column := len(prefix) - strings.LastIndex(prefix, "\n") - 1
- return E.Extend(syntaxError, "row ", row, ", column ", column)
- }
- return err
- }
- type LogOptions struct {
- Disabled bool `json:"disabled,omitempty"`
- Level string `json:"level,omitempty"`
- Output string `json:"output,omitempty"`
- Timestamp bool `json:"timestamp,omitempty"`
- DisableColor bool `json:"-"`
- }
|