lib/context.ex
defmodule Z.Context do
@moduledoc """
The Context struct
"""
defstruct parent: nil, type: nil, path: ["."]
@type t :: %Z.Context{
parent: Z.Context.t(),
type: atom(),
path: [String.t()]
}
def new(type \\ nil, path_segment \\ ".", parent \\ nil) do
%Z.Context{
parent: parent,
type: type,
path: path(path_segment, parent)
}
end
defp path(path_segment, nil) do
[path_segment]
end
defp path(path_segment, parent) do
[path_segment | parent.path]
end
end