lib/exiffer/png/chunk/BKGD/RGB.ex

defmodule Exiffer.PNG.Chunk.BKGD.RGB do
  defstruct ~w(r g b)a

  require Logger

  alias Exiffer.Binary

  def binary(%__MODULE__{r: r, g: g, b: b}) do
    value = <<r, g, b>>
    Exiffer.PNG.Chunk.binary("BKGD", value)
  end

  def text(%__MODULE__{r: r, g: g, b: b}) do
    """
    BKGD
    ----
    red: #{Binary.to_integer(r)}
    green: #{Binary.to_integer(g)}
    blue: #{Binary.to_integer(b)}
    """
  end

  def write(%__MODULE__{} = rgb, io_device) do
    Logger.debug "Writing BKGD.RGD chunk"
    binary = binary(rgb)
    :ok = IO.binwrite(io_device, binary)
  end

  defimpl Exiffer.Serialize do
    alias Exiffer.PNG.Chunk.BKGD.RGB

    def binary(rgb) do
      RGB.binary(rgb)
    end

    def text(rgb) do
      RGB.text(rgb)
    end

    def write(rgb, io_device) do
      RGB.write(rgb, io_device)
    end
  end
end