From b77d03265fcbb6d878c5bf3b3dcc5230cc5314e7 Mon Sep 17 00:00:00 2001 From: Leon Ding Date: Sun, 21 Dec 2025 00:33:51 +0800 Subject: [PATCH] fix: improve segment to json method. --- vfs/segment.go | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/vfs/segment.go b/vfs/segment.go index bb1b2ef..7904395 100644 --- a/vfs/segment.go +++ b/vfs/segment.go @@ -327,33 +327,41 @@ func (s *Segment) Payload() ([]byte, uint32) { return s.Value, uint32(len(s.Value)) } -func (s *Segment) ToJSON() ([]byte, error) { - switch s.Type { - case record: +var jsonHandlers = map[kind]func(*Segment) ([]byte, error){ + record: func(s *Segment) ([]byte, error) { num, err := s.ToRecord() if err != nil { return nil, err } return num.ToJSON() - case table: + }, + table: func(s *Segment) ([]byte, error) { tab, err := s.ToTable() if err != nil { return nil, err } return tab.ToJSON() - case variant: + }, + variant: func(s *Segment) ([]byte, error) { variants, err := s.ToVariant() if err != nil { return nil, err } return variants.ToJSON() - case leaselock: + }, + leaselock: func(s *Segment) ([]byte, error) { leaseLock, err := s.ToLeaseLock() if err != nil { return nil, err } return leaseLock.ToJSON() - } + }, +} - return nil, errors.New("unknown data type") +func (s *Segment) ToJSON() ([]byte, error) { + castfn, ok := jsonHandlers[s.Type] + if !ok { + return nil, errors.New("unknown data type") + } + return castfn(s) }