lib/calex.ex

defmodule Calex do
  @moduledoc """
  Calex is a library for encoding and decoding [iCalendar (iCal)](https://datatracker.ietf.org/doc/html/rfc5545) data.
  """

  @doc """
  Decodes a string of iCal data.
  """
  @spec decode!(data :: String.t()) :: Keyword.t() | no_return()
  def decode!(data) when is_binary(data) do
    Calex.Decoder.decode!(data)
  end

  def decode!(_) do
    raise(ArgumentError, message: "argument must be string")
  end

  @doc """
  Encodes iCal data into a string.
  """
  @spec encode!(data :: Keyword.t()) :: String.t() | no_return()
  def encode!(data) when is_list(data) do
    Calex.Encoder.encode!(data)
  end

  def encode!(_) do
    raise(ArgumentError, message: "argument must be keyword list")
  end
end