defmodule Matcher.MapEmbeds do defstruct [:expected] defimpl Matcher.Protocol do def match(%{expected: expected}, actual, context) do Matcher.Utils.Maps.compare_maps(expected, actual, context, allow_unexpected?: true) end end end defmodule Matcher.MapEquals do defstruct [:expected] defimpl Matcher.Protocol do def match(%{expected: expected}, actual, context) do Matcher.Utils.Maps.compare_maps(expected, actual, context, allow_unexpected?: false) end end end defimpl Matcher.Protocol, for: Map do def match(expected, actual, context) do Matcher.match(%Matcher.MapEmbeds{expected: expected}, actual, context) end end