Current section

Files

Jump to
exq lib exq serializers json_serializer.ex
Raw

lib/exq/serializers/json_serializer.ex

defmodule Exq.Serializers.JsonSerializer do
@behaviour Exq.Serializers.Behaviour
def decode(json) do
Poison.decode(json)
end
def encode(e) do
Poison.encode(e)
end
def decode!(json) do
Poison.decode!(json)
end
def encode!(e) do
Poison.encode!(e)
end
def decode_job(serialized) do
deserialized = decode!(serialized)
%Exq.Support.Job{
args: Dict.get(deserialized, "args"),
class: Dict.get(deserialized, "class"),
enqueued_at: Dict.get(deserialized, "enqueued_at"),
error_message: Dict.get(deserialized, "error_message"),
error_class: Dict.get(deserialized, "error_class"),
failed_at: Dict.get(deserialized, "failed_at"),
finished_at: Dict.get(deserialized, "finished_at"),
jid: Dict.get(deserialized, "jid"),
processor: Dict.get(deserialized, "processor"),
queue: Dict.get(deserialized, "queue"),
retry: Dict.get(deserialized, "retry"),
retry_count: Dict.get(deserialized, "retry_count")}
end
def encode_job(job) do
deserialized = %{
args: job.args,
class: job.class,
enqueued_at: job.enqueued_at,
error_message: job.error_message,
error_class: job.error_class,
failed_at: job.failed_at,
finished_at: job.finished_at,
jid: job.jid,
processor: job.processor,
queue: job.queue,
retry: job.retry,
retry_count: job.retry_count
}
encode!(deserialized)
end
def decode_process(serialized) do
deserialized = decode!(serialized)
%Exq.Support.Process{
pid: Dict.get(deserialized, "pid"),
host: Dict.get(deserialized, "host"),
job: Dict.get(deserialized, "job"),
started_at: Dict.get(deserialized, "started_at")
}
end
def encode_process(process) do
formatted_pid = to_string(:io_lib.format("~p", [process.pid]))
deserialized = Enum.into([
pid: formatted_pid,
host: process.host,
job: process.job,
started_at: process.started_at], HashDict.new)
encode!(deserialized)
end
end