defmodule BitcoinLib.Signing.Psbt.GenericProperties.Proprietary do defstruct [:key_identifier, :key_data, :data] alias BitcoinLib.Signing.Psbt.{CompactInteger, Keypair} alias BitcoinLib.Signing.Psbt.GenericProperties.Proprietary # TODO: document @spec parse(%Keypair{}) :: %Proprietary{} def parse(%Keypair{key: key, value: value}) do %{identifier: key_identifier, key_data: key_data, data: data} = %{key: key, value: value} |> parse_key_identifier |> parse_key_data |> parse_data %Proprietary{key_identifier: key_identifier, key_data: key_data, data: data} end defp parse_key_identifier(%{key: key} = map) do %CompactInteger{value: identifier_size, remaining: remaining} = key |> CompactInteger.extract_from() <> = remaining %{map | key: remaining} |> Map.put(:identifier, identifier) end defp parse_key_data(%{key: key} = map) do %CompactInteger{value: key_data_size, remaining: remaining} = key |> CompactInteger.extract_from() <> = remaining %{map | key: remaining} |> Map.put(:key_data, key_data) end defp parse_data(%{value: value} = map) do <> = value %{map | value: ""} |> Map.put(:data, data) end end