View Source Absinthe.Relay.Node.IDTranslator behaviour (absinthe_relay v1.5.2)

An ID translator handles encoding and decoding a global ID used in a Relay node.

This module provides the behaviour for implementing an ID Translator. An example use case of this module would be a translator that encrypts the global ID.

To use an ID Translator in your schema there are two methods.

Inline Config

defmodule MyApp.Schema do
  use Absinthe.Schema
  use Absinthe.Relay.Schema, [
    flavor: :modern,
    global_id_translator: MyApp.Absinthe.IDTranslator
  ]

  # ...

end

Mix Config

config Absinthe.Relay, MyApp.Schema,
  global_id_translator: MyApp.Absinthe.IDTranslator

example-id-translator

Example ID Translator

A basic example that encodes the global ID by joining the type_name and source_id with ":".

defmodule MyApp.Absinthe.IDTranslator do
  @behaviour Absinthe.Relay.Node.IDTranslator

  def to_global_id(type_name, source_id, _schema) do
    {:ok, "#{type_name}:#{source_id}"}
  end

  def from_global_id(global_id, _schema) do
    case String.split(global_id, ":", parts: 2) do
      [type_name, source_id] ->
        {:ok, type_name, source_id}
      _ ->
        {:error, "Could not extract value from ID `#{inspect global_id}`"}
    end
  end
end

Link to this section Summary

Callbacks

Converts a globally unique ID to a node's type name and ID.

Converts a node's type name and ID to a globally unique ID.

Link to this section Callbacks

Link to this callback

from_global_id(global_id, schema)

View Source

Specs

from_global_id(
  global_id :: Absinthe.Relay.Node.global_id(),
  schema :: Absinthe.Schema.t() | nil
) :: {:ok, type_name :: binary(), source_id :: binary()} | {:error, binary()}

Converts a globally unique ID to a node's type name and ID.

Returns {:ok, type_name, source_id} on success.

Returns {:error, binary} on failure.

Link to this callback

to_global_id(type_name, source_id, schema)

View Source

Specs

to_global_id(
  type_name :: binary(),
  source_id :: binary() | integer(),
  schema :: Absinthe.Schema.t()
) :: {:ok, global_id :: Absinthe.Relay.Node.global_id()} | {:error, binary()}

Converts a node's type name and ID to a globally unique ID.

Returns {:ok, global_id} on success.

Returns {:error, binary} on failure.