lib/public_key.ex

defmodule NearApi.PublicKey do
  @moduledoc """
  NEAR [Action](https://www.near-sdk.io/zero-to-hero/beginner/actions).
  """
  @ed25519_curve 0

  use Borsh,
    schema: [
      key_type: :u8,
      data: [32]
    ]

  @typedoc """
  Type of the public key struct
  """
  @type t :: %__MODULE__{
          key_type: integer,
          data: String.t()
        }

  defstruct [
    :key_type,
    :data
  ]

  def from_string(encoded_key) do
    encoded_key |> String.split(":") |> compose_key()
  end

  defp compose_key([_curve, key]), do: compose_key([key])
  defp compose_key([key]), do: %__MODULE__{key_type: @ed25519_curve, data: B58.decode58!(key)}
end