defmodule Immudb.Tx do use Immudb.Grpc, :schema alias Immudb.Socket alias Immudb.Util @spec tx_by_id(Socket.t(), binary()) :: {:error, String.t() | atom()} | {:ok, nil} def tx_by_id(%Socket{channel: %GRPC.Channel{} = channel, token: token}, tx) do channel |> Stub.tx_by_id(Schema.TxRequest.new(tx: tx), metadata: token |> Util.metadata()) |> case do {:ok, v} -> {:ok, v} {:error, %GRPC.RPCError{message: message}} -> {:error, message} _ -> {:error, :unknown} end end def tx_by_id(_, _) do {:error, :invalid_params} end @spec verifiable_tx_by_id(Socket.t(), binary(), binary()) :: {:error, String.t() | atom()} | {:ok, nil} def verifiable_tx_by_id( %Socket{channel: %GRPC.Channel{} = channel, token: token}, tx, prove_since_tx ) do channel |> Stub.verifiable_tx_by_id( Schema.VerifiableTxRequest.new( tx: tx, proveSinceTx: prove_since_tx ), metadata: token |> Util.metadata() ) |> case do {:ok, v} -> {:ok, v} {:error, %GRPC.RPCError{message: message}} -> {:error, message} _ -> {:error, :unknown} end end def verifiable_tx_by_id(_, _, _) do {:error, :invalid_params} end @spec use_snapshot(Socket.t(), integer(), integer()) :: {:error, String.t() | atom()} | {:ok, nil} def use_snapshot( %Socket{channel: %GRPC.Channel{} = channel, token: token}, since_tx, as_before_tx ) do channel |> Stub.use_snapshot( Schema.UseSnapshotRequest.new( sinceTx: since_tx, asBeforeTx: as_before_tx ), metadata: token |> Util.metadata() ) |> case do {:ok, v} -> {:ok, v} {:error, %GRPC.RPCError{message: message}} -> {:error, message} _ -> {:error, :unknown} end end def use_snapshot(_, _, _) do {:error, :invalid_params} end end