defmodule MyspaceIPFS.Multibase do
@moduledoc """
MyspaceIPFS.Multibase is where the multibase commands of the IPFS API reside.
"""
import MyspaceIPFS.Api
import MyspaceIPFS.Utils
@typep okresult :: MyspaceIPFS.okresult()
@typep opts :: MyspaceIPFS.opts()
# Fixme add _file variants.
@doc """
Decode a multibase encoded string.
## Parameters
`data` - File to decode.
"""
@spec decode(binary) :: okresult
def decode(binary) do
with {:ok, file} <- write_temp_file(binary) do
post_file("/multibase/decode", file)
|> handle_plain_response()
|> remove_temp_file(file)
end
end
@doc """
Encode a string to a multibase encoded string.
## Parameters
`data` - File to encode.
## Options
`b` - Multibase encoding to use.
"""
@spec encode(binary, opts) :: okresult
def encode(binary, opts \\ []) do
with {:ok, file} <- write_temp_file(binary) do
post_file("/multibase/encode", file, query: opts)
|> handle_plain_response()
|> remove_temp_file(file)
end
end
@doc """
List available multibase encodings.
## Options
prefix - Only list encodings with the given prefix.
numeric - Only list encodings with the given numeric code.
"""
@spec list(opts) :: okresult
def list(opts \\ []) do
post_query("/multibase/list", query: opts)
|> handle_json_response()
end
@doc """
Transcode a multibase encoded string.
## Parameters
`data` - Data to transcode.
## Options
`b` - Multibase encoding to use
"""
@spec transcode(binary, opts) :: okresult
def transcode(binary, opts \\ []) do
with {:ok, file} <- write_temp_file(binary) do
post_file("/multibase/transcode", file, query: opts)
|> handle_plain_response()
|> remove_temp_file(file)
end
end
end