package httpbinding
import (
)
type URIValue struct {
path, rawPath, buffer *[]byte
key string
}
func ( *[]byte, *[]byte, *[]byte, string) URIValue {
return URIValue{path: , rawPath: , buffer: , key: }
}
func ( URIValue) ( string) ( error) {
*.path, *.buffer, = replacePathElement(*.path, *.buffer, .key, , false)
if != nil {
return
}
*.rawPath, *.buffer, = replacePathElement(*.rawPath, *.buffer, .key, , true)
return
}
func ( URIValue) ( bool) error {
return .modifyURI(strconv.FormatBool())
}
func ( URIValue) ( string) error {
return .modifyURI()
}
func ( URIValue) ( int8) error {
return .Long(int64())
}
func ( URIValue) ( int16) error {
return .Long(int64())
}
func ( URIValue) ( int32) error {
return .Long(int64())
}
func ( URIValue) ( int64) error {
return .modifyURI(strconv.FormatInt(, 10))
}
func ( URIValue) ( float32) error {
return .float(float64(), 32)
}
func ( URIValue) ( float64) error {
return .float(, 64)
}
func ( URIValue) ( float64, int) error {
switch {
case math.IsNaN():
return .String(floatNaN)
case math.IsInf(, 1):
return .String(floatInfinity)
case math.IsInf(, -1):
return .String(floatNegInfinity)
default:
return .modifyURI(strconv.FormatFloat(, 'f', -1, ))
}
}
func ( URIValue) ( *big.Int) error {
return .modifyURI(.String())
}
func ( URIValue) ( *big.Float) error {
if , := .Int64(); == big.Exact {
return .Long()
}
return .modifyURI(.Text('e', -1))
}
func ( string) (, string) {
:= strings.IndexRune(, '?')
if == -1 {
=
return ,
}
= [:]
if +1 >= len() {
return ,
}
= [+1:]
return ,
}