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  }