HephaestusEcto.Serializer (hephaestus_ecto v0.3.0)

Copy Markdown View Source

Converts between Hephaestus.Core.Instance structs and database-safe values.

Handles the type conversions required to persist Elixir-specific types (atoms, MapSets, module references, DateTimes) into PostgreSQL JSONB.

All deserialization uses String.to_existing_atom/1 to prevent arbitrary atom creation from database values.

The serialized form is a 5-tuple so the database layer can persist workflow_version separately from the JSONB state payload:

{id, workflow_string, status_string, workflow_version, state_map}

Summary

Functions

Reconstructs an Instance struct from database values.

Serializes an Instance struct into a tuple of database-safe values.

Functions

from_db(id, workflow, status, workflow_version, state)

Reconstructs an Instance struct from database values.

Converts string module names back to atoms (via String.to_existing_atom/1), sorted lists back to MapSets, and ISO 8601 timestamps back to DateTime.

This is the inverse of to_db/1 and expects the same 5 arguments returned there:

HephaestusEcto.Serializer.from_db(id, workflow, status, workflow_version, state)

to_db(instance)

Serializes an Instance struct into a tuple of database-safe values.

Returns {id, workflow_string, status_string, workflow_version, state_map} where state_map contains the serialized context, step configs, active/completed steps, and execution history.

This tuple is intended for HephaestusEcto.Storage.put/2, which stores workflow_version in its own column and the remaining state in JSONB.