github.com/s7techlab/cckit@v0.10.5/state/mapping/event.go (about)

     1  package mapping
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/hyperledger/fabric-chaincode-go/shim"
     7  	"github.com/s7techlab/cckit/state"
     8  )
     9  
    10  type (
    11  	EventImpl struct {
    12  		event    state.Event
    13  		mappings EventMappings
    14  	}
    15  )
    16  
    17  func NewEvent(stub shim.ChaincodeStubInterface, mappings EventMappings) *EventImpl {
    18  	return &EventImpl{
    19  		event:    state.NewEvent(stub),
    20  		mappings: mappings,
    21  	}
    22  }
    23  
    24  func WrapEvent(event state.Event, mappings EventMappings) *EventImpl {
    25  	return &EventImpl{
    26  		event:    event,
    27  		mappings: mappings,
    28  	}
    29  }
    30  
    31  func (e *EventImpl) mapIfMappingExists(entry interface{}) (mapped interface{}, exists bool, err error) {
    32  	if !e.mappings.Exists(entry) {
    33  		return entry, false, nil
    34  	}
    35  	mapped, err = e.mappings.Map(entry)
    36  	return mapped, true, err
    37  }
    38  
    39  func (e *EventImpl) Set(entry interface{}, value ...interface{}) error {
    40  	mapped, exists, err := e.mapIfMappingExists(entry)
    41  	if err != nil {
    42  		return err
    43  	}
    44  
    45  	if !exists && len(value) == 0 {
    46  		return fmt.Errorf(`%s: %s`, ErrEventMappingNotFound, mapKey(entry))
    47  	}
    48  	return e.event.Set(mapped, value...)
    49  }
    50  
    51  func (e *EventImpl) UseNameTransformer(nt state.StringTransformer) state.Event {
    52  	return e.event.UseNameTransformer(nt)
    53  }
    54  
    55  func (e *EventImpl) UseSetTransformer(tb state.ToBytesTransformer) state.Event {
    56  	return e.event.UseSetTransformer(tb)
    57  }