lib/exiffer/png/chunk/TIME.ex

defmodule Exiffer.PNG.Chunk.TIME do
  defstruct ~w(year month day hour minute second)a

  alias Exiffer.Binary

  def new(<<
        year_binary::binary-size(2),
        month,
        day,
        hour,
        minute,
        second
      >>) do
    year = Binary.to_integer(year_binary)
    %__MODULE__{year: year, month: month, day: day, hour: hour, minute: minute, second: second}
  end

  def binary(time) do
    value = <<
      Binary.int16u_to_big_endian(time.year),
      time.month,
      time.day,
      time.hour,
      time.minute,
      time.second
    >>
    Exiffer.PNG.Chunk.binary("tIME", value)
  end

  def puts(time) do
    IO.puts """
    tIME
    ----
    Year: #{time.year}
    Month: #{time.month}
    Day: #{time.day}
    Hour: #{time.hour}
    Minute: #{time.minute}
    Second: #{time.second}
    """
  end

  def write(time, io_device) do
    binary = binary(time)
    :ok = IO.binwrite(io_device, binary)
  end

  defimpl Exiffer.Serialize do
    alias Exiffer.PNG.Chunk.TIME

    def binary(time) do
      TIME.binary(time)
    end

    def puts(time) do
      TIME.puts(time)
    end

    def write(time, io_device) do
      TIME.write(time, io_device)
    end
  end
end