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

     1  package mapping
     2  
     3  import (
     4  	"github.com/s7techlab/cckit/state"
     5  )
     6  
     7  type (
     8  	StateInstance struct {
     9  		// instance can be instance itself or key for instance
    10  		// key can be proto or Key ( []string )
    11  		instance    interface{}
    12  		stateMapper StateMapper
    13  		serializer  state.Serializer
    14  	}
    15  )
    16  
    17  func NewStateInstance(instance interface{}, stateMapper StateMapper, serializer state.Serializer) *StateInstance {
    18  	return &StateInstance{
    19  		instance:    instance,
    20  		stateMapper: stateMapper,
    21  		serializer:  serializer,
    22  	}
    23  }
    24  
    25  func (si *StateInstance) Key() (state.Key, error) {
    26  	switch instance := si.instance.(type) {
    27  	case []string:
    28  		return instance, nil
    29  	default:
    30  		return si.stateMapper.PrimaryKey(instance)
    31  	}
    32  }
    33  
    34  func (si *StateInstance) Keys() ([]state.KeyValue, error) {
    35  	return si.stateMapper.Keys(si.instance)
    36  }
    37  
    38  func (si *StateInstance) ToBytes() ([]byte, error) {
    39  	return si.serializer.ToBytes(si.instance)
    40  }
    41  
    42  func (si *StateInstance) Mapper() StateMapper {
    43  	return si.stateMapper
    44  }