livebook/proto/lib/livebook_proto.ex
2023-01-06 16:14:44 -03:00

31 lines
992 B
Elixir

defmodule LivebookProto do
@moduledoc false
alias LivebookProto.{Request, Response}
@request_mapping (for {_id, field_prop} <- Request.__message_props__().field_props,
into: %{} do
{field_prop.type, field_prop.name_atom}
end)
@response_mapping (for {_id, field_prop} <- Response.__message_props__().field_props,
into: %{} do
{field_prop.type, field_prop.name_atom}
end)
def build_request_frame(%struct{} = data, id \\ -1) do
type = request_type(struct)
message = Request.new!(id: id, type: {type, data})
{:binary, Request.encode(message)}
end
def build_response(%struct{} = data, id \\ -1) do
type = response_type(struct)
Response.new!(id: id, type: {type, data})
end
defp request_type(module), do: Map.fetch!(@request_mapping, module)
defp response_type(module), do: Map.fetch!(@response_mapping, module)
end