package byteutil
import (
"encoding/base64"
"encoding/hex"
)
type BytesEncodeFunc func (src []byte ) []byte
type BytesDecodeFunc func (src []byte ) ([]byte , error )
type BytesEncoder interface {
Encode (src []byte ) []byte
Decode (src []byte ) ([]byte , error )
}
type StdEncoder struct {
encodeFn BytesEncodeFunc
decodeFn BytesDecodeFunc
}
func NewStdEncoder (encFn BytesEncodeFunc , decFn BytesDecodeFunc ) *StdEncoder {
return &StdEncoder {
encodeFn : encFn ,
decodeFn : decFn ,
}
}
func (e *StdEncoder ) Encode (src []byte ) []byte {
return e .encodeFn (src )
}
func (e *StdEncoder ) Decode (src []byte ) ([]byte , error ) {
return e .decodeFn (src )
}
var (
HexEncoder = NewStdEncoder (func (src []byte ) []byte {
dst := make ([]byte , hex .EncodedLen (len (src )))
hex .Encode (dst , src )
return dst
}, func (src []byte ) ([]byte , error ) {
n , err := hex .Decode (src , src )
return src [:n ], err
})
B64Encoder = NewStdEncoder (func (src []byte ) []byte {
b64Dst := make ([]byte , base64 .StdEncoding .EncodedLen (len (src )))
base64 .StdEncoding .Encode (b64Dst , src )
return b64Dst
}, func (src []byte ) ([]byte , error ) {
dBuf := make ([]byte , base64 .StdEncoding .DecodedLen (len (src )))
n , err := base64 .StdEncoding .Decode (dBuf , src )
if err != nil {
return nil , err
}
return dBuf [:n ], err
})
)
The pages are generated with Golds v0.8.4 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .