2022-11-04 00:49:07 +08:00
|
|
|
defmodule LivebookProto do
|
|
|
|
@moduledoc false
|
|
|
|
|
2023-01-07 03:14:44 +08:00
|
|
|
alias LivebookProto.{Request, Response}
|
2022-12-21 22:28:27 +08:00
|
|
|
|
2023-01-07 03:14:44 +08:00
|
|
|
@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)
|
2022-11-04 00:49:07 +08:00
|
|
|
|
2022-12-21 22:28:27 +08:00
|
|
|
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
|
|
|
|
|
2023-01-07 03:14:44 +08:00
|
|
|
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)
|
2022-11-04 00:49:07 +08:00
|
|
|
end
|