diff --git a/lib/harald/hci/arrayed_data.ex b/lib/harald/hci/arrayed_data.ex index c8038df..a668ed7 100644 --- a/lib/harald/hci/arrayed_data.ex +++ b/lib/harald/hci/arrayed_data.ex @@ -60,6 +60,10 @@ defmodule Harald.HCI.ArrayedData do @doc """ Deserializes the binary representation of a list of structs according to `schema`. """ + def deserialize(schema, length, struct_module, bin) + + def deserialize(_, length, _, <<>>) when length > 0, do: {:error, :incomplete} + def deserialize(schema, length, struct_module, bin) do schema |> deserialize(bin, %{ diff --git a/test/harald/hci/arrayed_data_test.exs b/test/harald/hci/arrayed_data_test.exs new file mode 100644 index 0000000..3210aae --- /dev/null +++ b/test/harald/hci/arrayed_data_test.exs @@ -0,0 +1,12 @@ +defmodule Harald.HCI.ArrayedDataTest do + use ExUnit.Case, async: true + alias Harald.HCI.{ArrayedData, Event.LEMeta.AdvertisingReport.Device} + + doctest ArrayedData, import: true + + describe "deserialize/4" do + test "an empty binary results in an error" do + assert {:error, :incomplete} == ArrayedData.deserialize([], 1, Device, <<>>) + end + end +end