Replace bracket notation (packet_data[key]) with Map.get/2 to avoid UndefinedFunctionError when processing ParseError structs that don't implement the Access behavior. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
42 lines
1.4 KiB
Elixir
42 lines
1.4 KiB
Elixir
defmodule Aprsme.DeviceParser do
|
|
@moduledoc """
|
|
Extracts device identifiers from APRS packet data.
|
|
"""
|
|
|
|
@doc """
|
|
Extracts a device identifier from packet data.
|
|
Returns the device identifier string or nil if not found.
|
|
"""
|
|
@spec extract_device_identifier(map()) :: String.t() | nil
|
|
def extract_device_identifier(packet_data) do
|
|
extract_from_destination(packet_data) ||
|
|
extract_from_device_identifier(packet_data) ||
|
|
extract_from_data_extended(packet_data)
|
|
end
|
|
|
|
defp extract_from_destination(packet_data) do
|
|
get_field_value(packet_data, :destination) || get_field_value(packet_data, "destination")
|
|
end
|
|
|
|
defp extract_from_device_identifier(packet_data) do
|
|
get_field_value(packet_data, :device_identifier) || get_field_value(packet_data, "device_identifier")
|
|
end
|
|
|
|
defp get_field_value(packet_data, key) do
|
|
if Map.has_key?(packet_data, key) do
|
|
Map.get(packet_data, key)
|
|
end
|
|
end
|
|
|
|
defp extract_from_data_extended(packet_data) do
|
|
data_extended = Map.get(packet_data, :data_extended) || %{}
|
|
|
|
# Try to extract from symbol information
|
|
symbol_table_id = Map.get(data_extended, :symbol_table_id) || Map.get(data_extended, "symbol_table_id")
|
|
symbol_code = Map.get(data_extended, :symbol_code) || Map.get(data_extended, "symbol_code")
|
|
|
|
if symbol_table_id && symbol_code do
|
|
"#{symbol_table_id}#{symbol_code}"
|
|
end
|
|
end
|
|
end
|