package multiaddr

import (
	
	
	

	
)

func ( *string,  *netip.AddrPort) ( meg.Pattern) {
	var  netip.Addr
	 := func( meg.Matchable) error {
		switch .Code() {
		case P_UDP:
			* = "udp"
		case P_TCP:
			* = "tcp"
		default:
			return fmt.Errorf("invalid network: %s", .Value())
		}

		 := binary.BigEndian.Uint16(.RawValue())
		* = netip.AddrPortFrom(, )
		return nil
	}

	 := meg.Cat(
		meg.Or(
			meg.CaptureWithF(P_IP4, func( meg.Matchable) error {
				var  bool
				,  = netip.AddrFromSlice(.RawValue())
				if ! {
					return fmt.Errorf("invalid ip4 address: %s", .Value())
				}
				return nil
			}),
			meg.CaptureWithF(P_IP6, func( meg.Matchable) error {
				var  bool
				,  = netip.AddrFromSlice(.RawValue())
				if ! {
					return fmt.Errorf("invalid ip6 address: %s", .Value())
				}
				return nil
			}),
		),
		meg.Or(
			meg.CaptureWithF(P_UDP, ),
			meg.CaptureWithF(P_TCP, ),
		),
	)

	return 
}