Packages
honeybadger
0.16.4
0.28.0
0.27.0
0.26.0
0.25.0
0.24.1
0.24.0
0.23.0
0.22.1
0.22.0
0.21.0
0.20.0
0.19.0
0.18.1
0.18.0
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.0
0.14.1
0.14.0
0.13.1
0.13.0
0.12.1
0.12.0
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.0
0.8.0
0.7.0
0.7.0-beta
0.6.3
0.6.2
0.6.1
0.6.0
0.5.0
0.4.0
0.3.1
0.3.0
0.2.0
0.1.2
0.1.1
0.1.0
Elixir client, Plug and error_logger for integrating with the Honeybadger.io exception tracker"
Current section
Files
Jump to
Current section
Files
lib/honeybadger/breadcrumbs/ring_buffer.ex
defmodule Honeybadger.Breadcrumbs.RingBuffer do
@moduledoc false
@type t :: %__MODULE__{buffer: [any()], size: pos_integer(), ct: non_neg_integer()}
defstruct [:size, buffer: [], ct: 0]
defimpl Jason.Encoder do
def encode(buffer, opts) do
Jason.Encode.list(Honeybadger.Breadcrumbs.RingBuffer.to_list(buffer), opts)
end
end
@spec new(pos_integer()) :: t()
def new(size) do
%__MODULE__{size: size}
end
@spec add(t(), any()) :: t()
def add(ring = %{ct: ct, size: ct, buffer: [_head | rest]}, item) do
%__MODULE__{ring | buffer: rest ++ [item]}
end
def add(ring = %{ct: ct, buffer: buffer}, item) do
%__MODULE__{ring | buffer: buffer ++ [item], ct: ct + 1}
end
@spec to_list(t()) :: [any()]
def to_list(%{buffer: buffer}), do: buffer
end