33 lines
525 B
Go
33 lines
525 B
Go
package orm
|
|
|
|
import (
|
|
"database/sql/driver"
|
|
"fmt"
|
|
"net/netip"
|
|
)
|
|
|
|
type Inet struct {
|
|
netip.Addr
|
|
}
|
|
|
|
func (inet Inet) Value() (driver.Value, error) {
|
|
return inet.MarshalBinary()
|
|
}
|
|
|
|
func (inet *Inet) Scan(value any) (err error) {
|
|
switch value := value.(type) {
|
|
case []byte:
|
|
return inet.UnmarshalBinary(value)
|
|
default:
|
|
return fmt.Errorf("不支持的类型: %T", value)
|
|
}
|
|
}
|
|
|
|
func ParseInet(ip string) (*Inet, error) {
|
|
addr, err := netip.ParseAddr(ip)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &Inet{addr}, nil
|
|
}
|