Current section

Files

Jump to
magical lib ical parser event_parser.ex
Raw

lib/ical/parser/event_parser.ex

defmodule Magical.Parser.EventParser do
@moduledoc false
alias Magical.Parser.DateParser
@spec parse_event({String.t(), String.t(), String.t()}, Event.t()) :: Event.t()
def parse_event({"dtstart", dtstart, args}, event) do
Map.put(event, :dtstart, parse_date(dtstart, args))
end
def parse_event({"dtend", dtend, args}, event) do
Map.put(event, :dtend, parse_date(dtend, args))
end
def parse_event({"dtstamp", dtstamp, _}, event),
do: Map.put(event, :dtstamp, DateParser.parse(dtstamp))
def parse_event({field, value, _}, event) do
keys =
Magical.Event.__struct__()
|> Map.keys()
|> Enum.filter(fn k -> k != :__struct__ end)
|> Enum.map(&to_string/1)
case Enum.member?(keys, field) do
true -> Map.put(event, String.to_atom(field), value)
false -> event
end
end
def parse_date(date, %{"tzid" => time_zone}) do
case DateParser.parse(date) do
%NaiveDateTime{} = ndt ->
{:ok, dt} = DateTime.from_naive(ndt, time_zone)
dt
dt ->
dt
end
end
def parse_date(date, _) do
DateParser.parse(date)
end
end