prep_encoder.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package encoding
  2. import "math"
  3. type prepEncoder struct {
  4. length int
  5. }
  6. // primitives
  7. func (pe *prepEncoder) PutInt8(in int8) {
  8. pe.length += 1
  9. }
  10. func (pe *prepEncoder) PutInt16(in int16) {
  11. pe.length += 2
  12. }
  13. func (pe *prepEncoder) PutInt32(in int32) {
  14. pe.length += 4
  15. }
  16. func (pe *prepEncoder) PutInt64(in int64) {
  17. pe.length += 8
  18. }
  19. func (pe *prepEncoder) PutArrayLength(in int) error {
  20. if in > math.MaxInt32 {
  21. return EncodingError
  22. }
  23. pe.length += 4
  24. return nil
  25. }
  26. // arrays
  27. func (pe *prepEncoder) PutBytes(in []byte) error {
  28. pe.length += 4
  29. if in == nil {
  30. return nil
  31. }
  32. if len(in) > math.MaxInt32 {
  33. return EncodingError
  34. }
  35. pe.length += len(in)
  36. return nil
  37. }
  38. func (pe *prepEncoder) PutString(in string) error {
  39. pe.length += 2
  40. if len(in) > math.MaxInt16 {
  41. return EncodingError
  42. }
  43. pe.length += len(in)
  44. return nil
  45. }
  46. func (pe *prepEncoder) PutInt32Array(in []int32) error {
  47. err := pe.PutArrayLength(len(in))
  48. if err != nil {
  49. return err
  50. }
  51. pe.length += 4 * len(in)
  52. return nil
  53. }
  54. // stackable
  55. func (pe *prepEncoder) Push(in PushEncoder) {
  56. pe.length += in.ReserveLength()
  57. }
  58. func (pe *prepEncoder) Pop() error {
  59. return nil
  60. }