diff --git a/benchmarks/options.exs b/benchmarks/options.exs index 1878462..facf1bd 100644 --- a/benchmarks/options.exs +++ b/benchmarks/options.exs @@ -13,20 +13,57 @@ schema = [ ] ] +new_schema = Spark.Options.new!(schema) + defmodule MySchema do use Spark.Options.Validator, schema: schema end # prime Spark.Options.validate!([foo: "foo", bar: "bar", baz: 20], schema) +Spark.Options.validate!([foo: "foo", bar: "bar", baz: 20], new_schema) MySchema.validate!([foo: "foo", bar: "bar", baz: 20]) Benchee.run( %{ "existing" => fn -> - Spark.Options.validate!([foo: "foo", bar: "bar", baz: 20], schema) + options = Spark.Options.validate!([foo: "foo", bar: "bar", baz: 20], schema) + _foo = options[:foo] + _bar = options[:bar] + _foo = options[:foo] + _bar = options[:bar] + _foo = options[:foo] + _bar = options[:bar] + end, + "existing with built schema" => fn -> + options = Spark.Options.validate!([foo: "foo", bar: "bar", baz: 20], new_schema) + + _foo = options[:foo] + _bar = options[:bar] + _foo = options[:foo] + _bar = options[:bar] + _foo = options[:foo] + _bar = options[:bar] end, "validator" => fn -> - MySchema.validate!([foo: "foo", bar: "bar", baz: 20]) |> MySchema.to_options() + %MySchema{} = options = MySchema.validate!([foo: "foo", bar: "bar", baz: 20]) + _foo = options.foo + _bar = options.bar + _foo = options.foo + _bar = options.bar + _foo = options.foo + _bar = options.bar + end, + "validator to options" => fn -> + options = MySchema.validate!([foo: "foo", bar: "bar", baz: 20]) |> MySchema.to_options() + + _foo = options[:foo] + _bar = options[:bar] + _foo = options[:foo] + _bar = options[:bar] + _foo = options[:foo] + _bar = options[:bar] + _foo = options[:foo] + _bar = options[:bar] end }) diff --git a/lib/spark/options/validator.ex b/lib/spark/options/validator.ex index 8c57f35..1a17125 100644 --- a/lib/spark/options/validator.ex +++ b/lib/spark/options/validator.ex @@ -53,6 +53,7 @@ defmodule Spark.Options.Validator do [ quote bind_quoted: [schema: schema, define_deprecated_access?: define_deprecated_access?] do + schema = Spark.Options.new!(schema).schema @schema Keyword.new(schema) struct_fields =