sing-box/config/address.go
2022-07-01 16:58:18 +08:00

51 lines
987 B
Go

package config
import (
"encoding/json"
"net/netip"
E "github.com/sagernet/sing/common/exceptions"
M "github.com/sagernet/sing/common/metadata"
)
type ListenAddress netip.Addr
func (a *ListenAddress) MarshalJSON() ([]byte, error) {
value := netip.Addr(*a).String()
return json.Marshal(value)
}
func (a *ListenAddress) UnmarshalJSON(bytes []byte) error {
var value string
err := json.Unmarshal(bytes, &value)
if err != nil {
return err
}
addr, err := netip.ParseAddr(value)
if err != nil {
return err
}
*a = ListenAddress(addr)
return nil
}
type ServerAddress M.Socksaddr
func (a *ServerAddress) MarshalJSON() ([]byte, error) {
value := M.Socksaddr(*a).String()
return json.Marshal(value)
}
func (a *ServerAddress) UnmarshalJSON(bytes []byte) error {
var value string
err := json.Unmarshal(bytes, &value)
if err != nil {
return err
}
if value == "" {
return E.New("empty server address")
}
*a = ServerAddress(M.ParseSocksaddr(value))
return nil
}