packageutilimport("encoding/binary""encoding/hex""encoding/json""fmt""math/big""net/url""strings")// Parser provides utility functions for various data manipulations.typeParserstruct{}// DecBin converts a decimal integer to its binary representation with a specified length.funcDecBin(decint,lengthint)[]byte{switchlength{case1:return[]byte{byte(dec)}case2:b:=make([]byte,2)binary.BigEndian.PutUint16(b,uint16(dec))returnbcase3,4:b:=make([]byte,4)binary.BigEndian.PutUint32(b,uint32(dec))returnbdefault:b:=make([]byte,8)binary.BigEndian.PutUint64(b,uint64(dec))returnb}}// BinDec converts a binary string to its decimal representation.funcBinDec(bin[]byte)int{returnint(binary.BigEndian.Uint64(append(make([]byte,8-len(bin)),bin...)))}// HexDec converts a hexadecimal string to its decimal representation.funcHexDec(hexStrstring)*big.Int{i:=new(big.Int)i.SetString(hexStr,16)returni}// DecHex converts a decimal integer to its hexadecimal representation with an optional length.funcDecHex(dec*big.Int,lengthint)string{hexStr:=fmt.Sprintf("%x",dec)iflength>0{hexStr=fmt.Sprintf("%0*s",length,hexStr)}returnhexStr}// ObjectToArray converts a struct to a map.funcObjectToArray(objectinterface{})(map[string]interface{},error){varresultmap[string]interface{}bytes,err:=json.Marshal(object)iferr!=nil{returnnil,err}err=json.Unmarshal(bytes,&result)returnresult,err}// ArrayToObject converts a map to a struct.funcArrayToObject(arraymap[string]interface{},objinterface{})error{bytes,err:=json.Marshal(array)iferr!=nil{returnerr}returnjson.Unmarshal(bytes,obj)}// AlignedString converts a complex structure to an indented string representation.funcAlignedString(targetinterface{},prefixstring)string{varsbstrings.Builderswitchv:=target.(type){casemap[string]interface{}:forkey,item:=rangev{sb.WriteString(fmt.Sprintf("%s%s: ",prefix,key))ifsubMap,ok:=item.(map[string]interface{});ok{sb.WriteString("\n"+AlignedString(subMap,""+prefix))}else{sb.WriteString(fmt.Sprintf("%v\n",item))}}casestruct{}:array,_:=ObjectToArray(v)returnAlignedString(array,prefix)default:returnfmt.Sprintf("%v",target)}returnsb.String()}// Endpoint extracts the host and port from a URL.funcEndpoint(targetstring)string{u,err:=url.Parse(target)iferr!=nil{returntarget}host:=u.Hostname()port:=u.Port()ifport==""{returnhost}returnfmt.Sprintf("%s:%s",host,port)}