Files
sing-box/option/udp_over_tcp.go
2026-07-25 22:58:38 +08:00

43 lines
1.0 KiB
Go

package option
import (
"reflect"
"github.com/sagernet/sing-box/schema"
"github.com/sagernet/sing/common/json"
"github.com/sagernet/sing/common/uot"
)
type _UDPOverTCPOptions struct {
Enabled bool `json:"enabled,omitempty"`
Version uint8 `json:"version,omitempty" enum:"1,2"`
}
type UDPOverTCPOptions _UDPOverTCPOptions
func (o UDPOverTCPOptions) MarshalJSON() ([]byte, error) {
switch o.Version {
case 0, uot.Version:
return json.Marshal(o.Enabled)
default:
return json.Marshal(_UDPOverTCPOptions(o))
}
}
func (o *UDPOverTCPOptions) UnmarshalJSON(bytes []byte) error {
err := json.Unmarshal(bytes, &o.Enabled)
if err == nil {
return nil
}
return json.UnmarshalDisallowUnknownFields(bytes, (*_UDPOverTCPOptions)(o))
}
func (o UDPOverTCPOptions) DescribeSchema(builder schema.Builder) (*schema.Node, error) {
objectForm := schema.StrictObject()
err := builder.FlattenStruct(objectForm, reflect.TypeFor[UDPOverTCPOptions]())
if err != nil {
return nil, err
}
return schema.AnyOf(schema.BooleanNode(), objectForm), nil
}