Skip to content

Commit caa2489

Browse files
authored
fix: improve segment to json method. (#86)
1 parent 364ff2a commit caa2489

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

vfs/segment.go

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -327,33 +327,41 @@ func (s *Segment) Payload() ([]byte, uint32) {
327327
return s.Value, uint32(len(s.Value))
328328
}
329329

330-
func (s *Segment) ToJSON() ([]byte, error) {
331-
switch s.Type {
332-
case record:
330+
var jsonHandlers = map[kind]func(*Segment) ([]byte, error){
331+
record: func(s *Segment) ([]byte, error) {
333332
num, err := s.ToRecord()
334333
if err != nil {
335334
return nil, err
336335
}
337336
return num.ToJSON()
338-
case table:
337+
},
338+
table: func(s *Segment) ([]byte, error) {
339339
tab, err := s.ToTable()
340340
if err != nil {
341341
return nil, err
342342
}
343343
return tab.ToJSON()
344-
case variant:
344+
},
345+
variant: func(s *Segment) ([]byte, error) {
345346
variants, err := s.ToVariant()
346347
if err != nil {
347348
return nil, err
348349
}
349350
return variants.ToJSON()
350-
case leaselock:
351+
},
352+
leaselock: func(s *Segment) ([]byte, error) {
351353
leaseLock, err := s.ToLeaseLock()
352354
if err != nil {
353355
return nil, err
354356
}
355357
return leaseLock.ToJSON()
356-
}
358+
},
359+
}
357360

358-
return nil, errors.New("unknown data type")
361+
func (s *Segment) ToJSON() ([]byte, error) {
362+
castfn, ok := jsonHandlers[s.Type]
363+
if !ok {
364+
return nil, errors.New("unknown data type")
365+
}
366+
return castfn(s)
359367
}

0 commit comments

Comments
 (0)