message.ex (986B)
1 defmodule EarmarkParser.Message do 2 @moduledoc false 3 4 alias EarmarkParser.Context 5 alias EarmarkParser.Options 6 7 @type message_type :: :error | :warning 8 @type t :: {message_type, number, binary} 9 @type ts :: list(t) 10 @type container_type :: Options.t() | Context.t() 11 12 def add_messages(container, messages), 13 do: Enum.reduce(messages, container, &add_message(&2, &1)) 14 15 def add_message(container, message) 16 17 def add_message(options = %Options{}, message) do 18 %{options | messages: MapSet.put(options.messages, message)} 19 end 20 21 def add_message(context = %Context{}, message) do 22 %{context | options: add_message(context.options, message)} 23 end 24 25 def get_messages(container) 26 def get_messages(%Context{options: %{messages: messages}}), do: messages 27 28 @doc """ 29 For final output 30 """ 31 def sort_messages(container) do 32 container 33 |> get_messages() 34 |> Enum.sort(fn {_, l, _}, {_, r, _} -> r >= l end) 35 end 36 37 end 38 39 # SPDX-License-Identifier: Apache-2.0