Current section
Files
Jump to
Current section
Files
lib/protobuf/protoc/extensions.ex
defmodule Protobuf.Extensions do
@moduledoc """
Module to globally track extensions.
"""
@extension_fields_table :extension_fields_table
@extension_props_table :extension_props_table
@doc """
Initializes a new protobuf extensions table. This function
may be called many as it will have no effect after the first.
"""
def init() do
:ets.new(@extension_fields_table, [:named_table, :public, :bag])
:ets.new(@extension_props_table, [:named_table, :public, :set])
end
@doc """
Adds a prop to a protobuf extensions table.
"""
def add_extension_prop(module, field) do
:ets.insert(@extension_fields_table, {module, field})
fields = for {^module, field} <- :ets.lookup(@extension_fields_table, module), do: field
:ets.insert(@extension_props_table, {module, Protobuf.DSL.generate_msg_props(fields, [], [])})
end
@doc """
Gets message props from a given protobuf extensions table.
"""
def get_extension_props(module) do
case :ets.lookup(@extension_props_table, module) do
[] -> nil
[{^module, message_props}] -> message_props
end
end
end