package pgtype
import (
)
type MacaddrCodec struct{}
func (MacaddrCodec) ( int16) bool {
return == TextFormatCode || == BinaryFormatCode
}
func (MacaddrCodec) () int16 {
return BinaryFormatCode
}
func (MacaddrCodec) ( *Map, uint32, int16, any) EncodePlan {
switch {
case BinaryFormatCode:
switch .(type) {
case net.HardwareAddr:
return encodePlanMacaddrCodecBinaryHardwareAddr{}
case TextValuer:
return encodePlanMacAddrCodecTextValuer{}
}
case TextFormatCode:
switch .(type) {
case net.HardwareAddr:
return encodePlanMacaddrCodecTextHardwareAddr{}
case TextValuer:
return encodePlanTextCodecTextValuer{}
}
}
return nil
}
type encodePlanMacaddrCodecBinaryHardwareAddr struct{}
func (encodePlanMacaddrCodecBinaryHardwareAddr) ( any, []byte) ( []byte, error) {
:= .(net.HardwareAddr)
if == nil {
return nil, nil
}
return append(, ...), nil
}
type encodePlanMacAddrCodecTextValuer struct{}
func (encodePlanMacAddrCodecTextValuer) ( any, []byte) ( []byte, error) {
, := .(TextValuer).TextValue()
if != nil {
return nil,
}
if !.Valid {
return nil, nil
}
, := net.ParseMAC(.String)
if != nil {
return nil,
}
return append(, ...), nil
}
type encodePlanMacaddrCodecTextHardwareAddr struct{}
func (encodePlanMacaddrCodecTextHardwareAddr) ( any, []byte) ( []byte, error) {
:= .(net.HardwareAddr)
if == nil {
return nil, nil
}
return append(, .String()...), nil
}
func (MacaddrCodec) ( *Map, uint32, int16, any) ScanPlan {
switch {
case BinaryFormatCode:
switch .(type) {
case *net.HardwareAddr:
return scanPlanBinaryMacaddrToHardwareAddr{}
case TextScanner:
return scanPlanBinaryMacaddrToTextScanner{}
}
case TextFormatCode:
switch .(type) {
case *net.HardwareAddr:
return scanPlanTextMacaddrToHardwareAddr{}
case TextScanner:
return scanPlanTextAnyToTextScanner{}
}
}
return nil
}
type scanPlanBinaryMacaddrToHardwareAddr struct{}
func (scanPlanBinaryMacaddrToHardwareAddr) ( []byte, any) error {
:= .(*net.HardwareAddr)
if == nil {
* = nil
return nil
}
* = make([]byte, len())
copy(*, )
return nil
}
type scanPlanBinaryMacaddrToTextScanner struct{}
func (scanPlanBinaryMacaddrToTextScanner) ( []byte, any) error {
:= ().(TextScanner)
if == nil {
return .ScanText(Text{})
}
return .ScanText(Text{String: net.HardwareAddr().String(), Valid: true})
}
type scanPlanTextMacaddrToHardwareAddr struct{}
func (scanPlanTextMacaddrToHardwareAddr) ( []byte, any) error {
:= .(*net.HardwareAddr)
if == nil {
* = nil
return nil
}
, := net.ParseMAC(string())
if != nil {
return
}
* =
return nil
}
func ( MacaddrCodec) ( *Map, uint32, int16, []byte) (driver.Value, error) {
return codecDecodeToTextFormat(, , , , )
}
func ( MacaddrCodec) ( *Map, uint32, int16, []byte) (any, error) {
if == nil {
return nil, nil
}
var net.HardwareAddr
:= codecScan(, , , , , &)
if != nil {
return nil,
}
return , nil
}