stream_context.go 643 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package context
  2. import (
  3. "context"
  4. "encoding/json"
  5. )
  6. type StreamContext interface {
  7. context.Context
  8. Serialize(any) ([]byte, error)
  9. }
  10. type streamContext struct {
  11. context.Context
  12. }
  13. type Serialize func(any) ([]byte, error)
  14. var _ StreamContext = (*streamContext)(nil)
  15. var (
  16. // serialize 是全局的自定义序列化器
  17. serialize Serialize
  18. )
  19. func (s *streamContext) Serialize(v any) ([]byte, error) {
  20. if serialize != nil {
  21. return serialize(v)
  22. }
  23. return json.Marshal(v)
  24. }
  25. func NewStreamContext(ctx context.Context) StreamContext {
  26. return &streamContext{
  27. Context: ctx,
  28. }
  29. }
  30. func SetSerializer(s Serialize) {
  31. serialize = s
  32. }