diff --git a/lib/encoder.ex b/lib/encoder.ex index 95fbf0c..a0e6bd2 100644 --- a/lib/encoder.ex +++ b/lib/encoder.ex @@ -138,6 +138,7 @@ defimpl Jason.Encoder, for: Any do end defp fields_to_encode(struct, opts) do + Keyword.validate!(opts, [:only, :except]) fields = Map.keys(struct) cond do diff --git a/test/encode_test.exs b/test/encode_test.exs index 379d160..b028042 100644 --- a/test/encode_test.exs +++ b/test/encode_test.exs @@ -190,6 +190,19 @@ defmodule Jason.EncoderTest do end end + test "@derive validate `invalid:`" do + message = "unknown keys [:invalid] in [invalid: [:__meta__]], the allowed keys are: [:only, :except]" + + assert_raise ArgumentError, message, fn -> + Code.eval_string(""" + defmodule InvalidOption do + @derive {Jason.Encoder, invalid: [:__meta__]} + defstruct name: "", size: 0 + end + """) + end + end + defmodule KeywordTester do defstruct [:baz, :foo, :quux] end