github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/evm/watcher/marshal.go (about) 1 package watcher 2 3 import "encoding/json" 4 5 var ( 6 _ LazyValueMarshaler = (*baseLazyMarshal)(nil) 7 ) 8 9 type LazyValueMarshaler interface { 10 GetValue() string 11 } 12 13 type baseLazyMarshal struct { 14 origin interface{} 15 value string 16 } 17 18 func newBaseLazyMarshal(o interface{}) *baseLazyMarshal { 19 return &baseLazyMarshal{ 20 origin: o, 21 } 22 } 23 24 func (b *baseLazyMarshal) GetValue() string { 25 if b.origin != nil { 26 vs, err := json.Marshal(b.origin) 27 if err != nil { 28 panic("cant happen") 29 } 30 b.value = string(vs) 31 b.origin = nil 32 } 33 return b.value 34 }