You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
package codec
import (
"fmt"
codecpkg "github.com/noahlann/nnet/pkg/codec"
)
// PlainCodec 直接透传的编解码器
// Encode: 支持 []byte、string、fmt.Stringer 和 nil
// Decode: 支持 *([]byte) 和 *string
type PlainCodec struct { }
// NewPlainCodec 创建新的 Plain 编解码器
func NewPlainCodec ( ) codecpkg . Codec {
return & PlainCodec { }
}
// Name 获取编解码器名称
func ( c * PlainCodec ) Name ( ) string {
return "plain"
}
// Encode 将数据编码为字节
func ( c * PlainCodec ) Encode ( v interface { } ) ( [ ] byte , error ) {
if v == nil {
return nil , nil
}
switch value := v . ( type ) {
case [ ] byte :
return value , nil
case string :
return [ ] byte ( value ) , nil
case fmt . Stringer :
return [ ] byte ( value . String ( ) ) , nil
default :
return nil , codecpkg . NewErrorf ( "plain codec only supports []byte, string or fmt.Stringer, got %T" , v )
}
}
// Decode 将字节解码为目标类型
func ( c * PlainCodec ) Decode ( data [ ] byte , v interface { } ) error {
if v == nil {
return codecpkg . NewError ( "decode target cannot be nil" )
}
switch target := v . ( type ) {
case * [ ] byte :
if data == nil {
* target = nil
} else {
* target = append ( ( * target ) [ : 0 ] , data ... )
}
return nil
case * string :
if data == nil {
* target = ""
} else {
* target = string ( data )
}
return nil
default :
return codecpkg . NewErrorf ( "plain codec only supports *[]byte or *string, got %T" , v )
}
}