Current section

Files

Jump to
magical lib magical.ex
Raw

lib/magical.ex

defmodule Magical do
@moduledoc """
Documentation for `Magical`.
"""
alias Magical.Parser
alias Magical.Serializer
@doc """
Parse an iCalendar string and return the result as a Magical.Calendar struct
"""
@callback from_ics(String.t()) :: {:ok, Magical.Calendar.t()} | {:error, :invalid}
@spec from_ics(String.t()) :: {:ok, Magical.Calendar.t()} | {:error, :invalid}
def from_ics(string), do: Parser.parse(string)
@doc """
Parse an iCalendar string and return the result as a Magical.Calendar struct.
This function will throw an ArgumentError if the input is invalid
"""
@callback from_ics!(String.t()) :: Magical.Calendar.t()
@spec from_ics!(String.t()) :: Magical.Calendar.t()
def from_ics!(string) do
case Parser.parse(string) do
{:ok, calendar} -> calendar
_ -> raise %ArgumentError{message: "invalid iCalendar file"}
end
end
@spec to_ics(Magical.Calendar.t()) :: String.t()
def to_ics(%Magical.Calendar{} = calendar) do
Serializer.serialize(calendar)
end
end