package operator import ( "context" "goflink/core" ) type KeySelector[IN any] func(in IN) string type KeyByOperator[IN any] struct { selector KeySelector[IN] } func NewKeyByOperator[IN any](selector KeySelector[IN]) *KeyByOperator[IN] { return &KeyByOperator[IN]{selector: selector} } func (k *KeyByOperator[IN]) Open(ctx context.Context) error { return nil } func (k *KeyByOperator[IN]) Process(ctx context.Context, record core.StreamRecord[IN], out Emitter[IN]) error { if record.Type != core.RecordData { return out.Emit(ctx, record) } record.Key = k.selector(record.Value) return out.Emit(ctx, record) } func (k *KeyByOperator[IN]) Close(ctx context.Context) error { return nil }