# `Ltix.DeepLinking.ContentItem`
[🔗](https://github.com/DecoyLex/ltix/blob/main/lib/ltix/deep_linking/content_item.ex#L1)

Protocol for serializing content items in Deep Linking responses.

Ltix implements this protocol for the five standard content item types
and for plain maps (as an escape hatch for one-off custom types).
Implement this protocol on your own struct when you need a reusable
custom content item type:

    defmodule MyApp.ProctoredExam do
      defstruct [:url, :title, :duration_minutes]

      defimpl Ltix.DeepLinking.ContentItem do
        def item_type(_item), do: "https://myapp.example.com/proctored_exam"

        def to_json(item) do
          %{
            "type" => "https://myapp.example.com/proctored_exam",
            "url" => item.url,
            "title" => item.title,
            "https://myapp.example.com/duration" => item.duration_minutes
          }
        end
      end
    end

The platform's `accept_types` must include your custom type string.

# `t`

```elixir
@type t() :: term()
```

All the types that implement this protocol.

# `item_type`

```elixir
@spec item_type(t()) :: String.t()
```

Return the content item type string (e.g., `"ltiResourceLink"`).

# `to_json`

```elixir
@spec to_json(t()) :: %{required(String.t()) =&gt; any()}
```

Serialize the content item to a JSON-compatible map.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
