buildr/modules/json_state_encoder.go
Peter 1261932bdc
All checks were successful
continuous-integration/drone/push Build is passing
refactor: apply golangci-lint findings
2023-06-22 19:16:00 +02:00

49 lines
994 B
Go

package modules
import (
"context"
"encoding/json"
"code.icb4dc0.de/buildr/buildr/modules/state"
)
var _ StateEncoder[struct{}] = (*JSONStateEncoder[struct{}])(nil)
func NewJSONStateEncoder[T any](ctx ExecutionContext) *JSONStateEncoder[T] {
return &JSONStateEncoder[T]{
Context: ctx,
}
}
type JSONStateEncoder[T any] struct {
Context ExecutionContext
}
func (j JSONStateEncoder[T]) Get(ctx context.Context, key string) (val T, ok bool, meta state.Metadata, err error) {
var data []byte
data, meta, err = j.Context.GetState(ctx, key)
if err != nil {
return val, false, state.Metadata{}, err
}
if len(data) == 0 {
return val, false, meta, nil
}
if err := json.Unmarshal(data, &val); err != nil {
return val, false, state.Metadata{}, err
}
return val, true, meta, nil
}
func (j JSONStateEncoder[T]) Set(ctx context.Context, key string, val T) error {
data, err := json.Marshal(val)
if err != nil {
return err
}
return j.Context.SetState(ctx, key, data)
}