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 }