diff --git a/base/elixir/test/inputs/json/misc/050b0.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/050b0.json/default/QuickType.ex
index 56e0770..e1f54a7 100644
--- a/base/elixir/test/inputs/json/misc/050b0.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/050b0.json/default/QuickType.ex
@@ -233,7 +233,7 @@ defmodule OtherName do
   def from_map(m) do
     %OtherName{
       name: m["name"],
-      note: m["note"],
+      note: Map.fetch!(m, "note"),
     }
   end
 
@@ -411,7 +411,7 @@ defmodule TopLevelElement do
       links: Enum.map(m["links"], &Link.from_map/1),
       name: m["name"],
       other_names: Enum.map(m["other_names"], &OtherName.from_map/1),
-      superseded_by: m["superseded_by"],
+      superseded_by: Map.fetch!(m, "superseded_by"),
       text: Enum.map(m["text"], &Text.from_map/1),
     }
   end
diff --git a/base/elixir/test/inputs/json/misc/10be4.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/10be4.json/default/QuickType.ex
index a2da62e..3c05309 100644
--- a/base/elixir/test/inputs/json/misc/10be4.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/10be4.json/default/QuickType.ex
@@ -242,7 +242,7 @@ defmodule OtherName do
   def from_map(m) do
     %OtherName{
       name: m["name"],
-      note: m["note"],
+      note: Map.fetch!(m, "note"),
     }
   end
 
@@ -422,7 +422,7 @@ defmodule TopLevelElement do
       links: Enum.map(m["links"], &Link.from_map/1),
       name: m["name"],
       other_names: Enum.map(m["other_names"], &OtherName.from_map/1),
-      superseded_by: m["superseded_by"],
+      superseded_by: Map.fetch!(m, "superseded_by"),
       text: Enum.map(m["text"], &Text.from_map/1),
     }
   end
diff --git a/base/elixir/test/inputs/json/misc/1b409.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/1b409.json/default/QuickType.ex
index 2ee46f9..4acf242 100644
--- a/base/elixir/test/inputs/json/misc/1b409.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/1b409.json/default/QuickType.ex
@@ -317,10 +317,10 @@ defmodule Person do
       namemod: Namemod.decode(m["namemod"]),
       nickname: m["nickname"],
       osid: m["osid"],
-      pvsid: m["pvsid"],
+      pvsid: Map.fetch!(m, "pvsid"),
       sortname: m["sortname"],
-      twitterid: m["twitterid"],
-      youtubeid: m["youtubeid"],
+      twitterid: Map.fetch!(m, "twitterid"),
+      youtubeid: Map.fetch!(m, "youtubeid"),
     }
   end
 
@@ -536,7 +536,7 @@ defmodule Object do
       enddate: m["enddate"],
       extra: Extra.from_map(m["extra"]),
       id: m["id"],
-      leadership_title: m["leadership_title"],
+      leadership_title: Map.fetch!(m, "leadership_title"),
       party: Party.decode(m["party"]),
       person: Person.from_map(m["person"]),
       phone: m["phone"],
diff --git a/base/elixir/test/inputs/json/misc/27332.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/27332.json/default/QuickType.ex
index ecb3f71..f369b61 100644
--- a/base/elixir/test/inputs/json/misc/27332.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/27332.json/default/QuickType.ex
@@ -645,8 +645,8 @@ defmodule ChildData do
       approved_by: m["approved_by"],
       archived: m["archived"],
       author: m["author"],
-      author_flair_css_class: m["author_flair_css_class"],
-      author_flair_text: m["author_flair_text"],
+      author_flair_css_class: Map.fetch!(m, "author_flair_css_class"),
+      author_flair_text: Map.fetch!(m, "author_flair_text"),
       banned_at_utc: m["banned_at_utc"],
       banned_by: m["banned_by"],
       brand_safe: m["brand_safe"],
@@ -656,7 +656,7 @@ defmodule ChildData do
       contest_mode: m["contest_mode"],
       created: m["created"],
       created_utc: m["created_utc"],
-      distinguished: m["distinguished"],
+      distinguished: Map.fetch!(m, "distinguished"),
       domain: Domain.decode(m["domain"]),
       downs: m["downs"],
       edited: m["edited"],
@@ -667,8 +667,8 @@ defmodule ChildData do
       is_self: m["is_self"],
       is_video: m["is_video"],
       likes: m["likes"],
-      link_flair_css_class: m["link_flair_css_class"],
-      link_flair_text: m["link_flair_text"],
+      link_flair_css_class: Map.fetch!(m, "link_flair_css_class"),
+      link_flair_text: Map.fetch!(m, "link_flair_text"),
       locked: m["locked"],
       media: m["media"] && Media.from_map(m["media"]),
       media_embed: MediaEmbed.from_map(m["media_embed"]),
@@ -688,7 +688,7 @@ defmodule ChildData do
       secure_media: m["secure_media"] && Media.from_map(m["secure_media"]),
       secure_media_embed: MediaEmbed.from_map(m["secure_media_embed"]),
       selftext: m["selftext"],
-      selftext_html: m["selftext_html"],
+      selftext_html: Map.fetch!(m, "selftext_html"),
       spoiler: m["spoiler"],
       stickied: m["stickied"],
       subreddit: Subreddit.decode(m["subreddit"]),
@@ -697,8 +697,8 @@ defmodule ChildData do
       subreddit_type: SubredditType.decode(m["subreddit_type"]),
       suggested_sort: m["suggested_sort"],
       thumbnail: m["thumbnail"],
-      thumbnail_height: m["thumbnail_height"],
-      thumbnail_width: m["thumbnail_width"],
+      thumbnail_height: Map.fetch!(m, "thumbnail_height"),
+      thumbnail_width: Map.fetch!(m, "thumbnail_width"),
       title: m["title"],
       ups: m["ups"],
       url: m["url"],
diff --git a/base/elixir/test/inputs/json/misc/29f47.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/29f47.json/default/QuickType.ex
index 3a0f4ef..bcc51d3 100644
--- a/base/elixir/test/inputs/json/misc/29f47.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/29f47.json/default/QuickType.ex
@@ -630,7 +630,7 @@ defmodule ChildData do
       distinguished: Distinguished.decode(m["distinguished"]),
       domain: Domain.decode(m["domain"]),
       downs: m["downs"],
-      edited: m["edited"],
+      edited: Map.fetch!(m, "edited"),
       gilded: m["gilded"],
       hidden: m["hidden"],
       hide_score: m["hide_score"],
@@ -659,17 +659,17 @@ defmodule ChildData do
       secure_media: m["secure_media"],
       secure_media_embed: MediaEmbed.from_map(m["secure_media_embed"]),
       selftext: m["selftext"],
-      selftext_html: m["selftext_html"],
+      selftext_html: Map.fetch!(m, "selftext_html"),
       spoiler: m["spoiler"],
       stickied: m["stickied"],
       subreddit: Subreddit.decode(m["subreddit"]),
       subreddit_id: SubredditID.decode(m["subreddit_id"]),
       subreddit_name_prefixed: SubredditNamePrefixed.decode(m["subreddit_name_prefixed"]),
       subreddit_type: SubredditType.decode(m["subreddit_type"]),
-      suggested_sort: m["suggested_sort"],
+      suggested_sort: Map.fetch!(m, "suggested_sort"),
       thumbnail: m["thumbnail"],
-      thumbnail_height: m["thumbnail_height"],
-      thumbnail_width: m["thumbnail_width"],
+      thumbnail_height: Map.fetch!(m, "thumbnail_height"),
+      thumbnail_width: Map.fetch!(m, "thumbnail_width"),
       title: m["title"],
       ups: m["ups"],
       url: m["url"],
diff --git a/base/elixir/test/inputs/json/misc/2d4e2.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/2d4e2.json/default/QuickType.ex
index 95c591a..d6c3d4c 100644
--- a/base/elixir/test/inputs/json/misc/2d4e2.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/2d4e2.json/default/QuickType.ex
@@ -318,8 +318,8 @@ defmodule Person do
       osid: m["osid"],
       pvsid: m["pvsid"],
       sortname: m["sortname"],
-      twitterid: m["twitterid"],
-      youtubeid: m["youtubeid"],
+      twitterid: Map.fetch!(m, "twitterid"),
+      youtubeid: Map.fetch!(m, "youtubeid"),
     }
   end
 
@@ -720,7 +720,7 @@ defmodule Object do
       enddate: m["enddate"],
       extra: Extra.from_map(m["extra"]),
       id: m["id"],
-      leadership_title: m["leadership_title"],
+      leadership_title: Map.fetch!(m, "leadership_title"),
       party: Party.decode(m["party"]),
       person: Person.from_map(m["person"]),
       phone: m["phone"],
diff --git a/base/elixir/test/inputs/json/misc/32431.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/32431.json/default/QuickType.ex
index baa9de1..3537d09 100644
--- a/base/elixir/test/inputs/json/misc/32431.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/32431.json/default/QuickType.ex
@@ -263,15 +263,15 @@ defmodule Properties do
       cdi: m["cdi"],
       code: m["code"],
       detail: m["detail"],
-      dmin: m["dmin"],
+      dmin: Map.fetch!(m, "dmin"),
       felt: m["felt"],
-      gap: m["gap"],
+      gap: Map.fetch!(m, "gap"),
       ids: m["ids"],
       mag: m["mag"],
       mag_type: MagType.decode(m["magType"]),
       mmi: m["mmi"],
       net: m["net"],
-      nst: m["nst"],
+      nst: Map.fetch!(m, "nst"),
       place: m["place"],
       rms: m["rms"],
       sig: m["sig"],
diff --git a/base/elixir/test/inputs/json/misc/32d5c.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/32d5c.json/default/QuickType.ex
index be65093..2196bb0 100644
--- a/base/elixir/test/inputs/json/misc/32d5c.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/32d5c.json/default/QuickType.ex
@@ -22,7 +22,7 @@ defmodule TopLevelElement do
 
   def from_map(m) do
     %TopLevelElement{
-      birth_date: m["BirthDate"],
+      birth_date: Map.fetch!(m, "BirthDate"),
       birth_date_is_protected: m["BirthDateIsProtected"],
       gender_type_id: m["GenderTypeID"],
       notes: m["Notes"],
diff --git a/base/elixir/test/inputs/json/misc/337ed.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/337ed.json/default/QuickType.ex
index b60b7c7..0a67ae7 100644
--- a/base/elixir/test/inputs/json/misc/337ed.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/337ed.json/default/QuickType.ex
@@ -268,35 +268,35 @@ defmodule Result do
 
   def from_map(m) do
     %Result{
-      cost_absolute: m["cost_absolute"],
-      cost_max: m["cost_max"],
-      cost_min: m["cost_min"],
+      cost_absolute: Map.fetch!(m, "cost_absolute"),
+      cost_max: Map.fetch!(m, "cost_max"),
+      cost_min: Map.fetch!(m, "cost_min"),
       created_at: m["created_at"],
       custom_incomes: Enum.map(m["customIncomes"], &CustomIncome.from_map/1),
       direct_rep_costs_max: m["direct_rep_costs_max"],
       direct_rep_costs_min: m["direct_rep_costs_min"],
       end_date: m["end_date"],
       eur_sources_grants: m["eur_sources_grants"],
-      eur_sources_grants_src: m["eur_sources_grants_src"],
+      eur_sources_grants_src: Map.fetch!(m, "eur_sources_grants_src"),
       eur_sources_procurement: m["eur_sources_procurement"],
-      eur_sources_procurement_src: m["eur_sources_procurement_src"],
+      eur_sources_procurement_src: Map.fetch!(m, "eur_sources_procurement_src"),
       id: m["id"],
       new_organisation: m["new_organisation"],
-      no_clients: m["no_clients"],
-      other_financial_information: m["other_financial_information"],
-      other_sources_contributions: m["other_sources_contributions"],
-      other_sources_donation: m["other_sources_donation"],
-      other_sources_total: m["other_sources_total"],
-      public_financing_infranational: m["public_financing_infranational"],
-      public_financing_national: m["public_financing_national"],
-      public_financing_total: m["public_financing_total"],
+      no_clients: Map.fetch!(m, "no_clients"),
+      other_financial_information: Map.fetch!(m, "other_financial_information"),
+      other_sources_contributions: Map.fetch!(m, "other_sources_contributions"),
+      other_sources_donation: Map.fetch!(m, "other_sources_donation"),
+      other_sources_total: Map.fetch!(m, "other_sources_total"),
+      public_financing_infranational: Map.fetch!(m, "public_financing_infranational"),
+      public_financing_national: Map.fetch!(m, "public_financing_national"),
+      public_financing_total: Map.fetch!(m, "public_financing_total"),
       representative: m["representative"],
       start_date: m["start_date"],
       status: Status.decode(m["status"]),
-      total_budget: m["total_budget"],
-      turnover_absolute: m["turnover_absolute"],
-      turnover_max: m["turnover_max"],
-      turnover_min: m["turnover_min"],
+      total_budget: Map.fetch!(m, "total_budget"),
+      turnover_absolute: Map.fetch!(m, "turnover_absolute"),
+      turnover_max: Map.fetch!(m, "turnover_max"),
+      turnover_min: Map.fetch!(m, "turnover_min"),
       type: ResultType.decode(m["type"]),
       updated_at: m["updated_at"],
       uri: m["uri"],
diff --git a/base/elixir/test/inputs/json/misc/34702.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/34702.json/default/QuickType.ex
index 0db0bcc..6b5046e 100644
--- a/base/elixir/test/inputs/json/misc/34702.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/34702.json/default/QuickType.ex
@@ -392,7 +392,7 @@ defmodule FeatureProperties do
       latitude: m["latitude"],
       local_govt: m["local_govt"],
       longitude: m["longitude"],
-      no: m["no"],
+      no: Map.fetch!(m, "no"),
       phone: m["phone"],
       postcode: m["postcode"],
       psa: m["psa"],
diff --git a/base/elixir/test/inputs/json/misc/4d6fb.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/4d6fb.json/default/QuickType.ex
index 5991113..d73208e 100644
--- a/base/elixir/test/inputs/json/misc/4d6fb.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/4d6fb.json/default/QuickType.ex
@@ -652,8 +652,8 @@ defmodule ChildData do
       subreddit_type: SubredditType.decode(m["subreddit_type"]),
       suggested_sort: m["suggested_sort"],
       thumbnail: m["thumbnail"],
-      thumbnail_height: m["thumbnail_height"],
-      thumbnail_width: m["thumbnail_width"],
+      thumbnail_height: Map.fetch!(m, "thumbnail_height"),
+      thumbnail_width: Map.fetch!(m, "thumbnail_width"),
       title: m["title"],
       ups: m["ups"],
       url: m["url"],
diff --git a/base/elixir/test/inputs/json/misc/570ec.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/570ec.json/default/QuickType.ex
index 6cabfc4..a97a9f1 100644
--- a/base/elixir/test/inputs/json/misc/570ec.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/570ec.json/default/QuickType.ex
@@ -136,7 +136,7 @@ defmodule OtherName do
   def from_map(m) do
     %OtherName{
       name: m["name"],
-      note: m["note"],
+      note: Map.fetch!(m, "note"),
     }
   end
 
diff --git a/base/elixir/test/inputs/json/misc/66121.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/66121.json/default/QuickType.ex
index 24d4f91..1af1cf4 100644
--- a/base/elixir/test/inputs/json/misc/66121.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/66121.json/default/QuickType.ex
@@ -368,7 +368,7 @@ defmodule TopLevelElement do
       links: Enum.map(m["links"], &Link.from_map/1),
       name: m["name"],
       other_names: m["other_names"],
-      superseded_by: m["superseded_by"],
+      superseded_by: Map.fetch!(m, "superseded_by"),
       text: Enum.map(m["text"], &Text.from_map/1),
     }
   end
diff --git a/base/elixir/test/inputs/json/misc/6de06.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/6de06.json/default/QuickType.ex
index 3ff80b5..d63c9e2 100644
--- a/base/elixir/test/inputs/json/misc/6de06.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/6de06.json/default/QuickType.ex
@@ -511,8 +511,8 @@ defmodule ChildData do
       approved_by: m["approved_by"],
       archived: m["archived"],
       author: m["author"],
-      author_flair_css_class: m["author_flair_css_class"],
-      author_flair_text: m["author_flair_text"],
+      author_flair_css_class: Map.fetch!(m, "author_flair_css_class"),
+      author_flair_text: Map.fetch!(m, "author_flair_text"),
       banned_at_utc: m["banned_at_utc"],
       banned_by: m["banned_by"],
       brand_safe: m["brand_safe"],
@@ -533,8 +533,8 @@ defmodule ChildData do
       is_self: m["is_self"],
       is_video: m["is_video"],
       likes: m["likes"],
-      link_flair_css_class: m["link_flair_css_class"],
-      link_flair_text: m["link_flair_text"],
+      link_flair_css_class: Map.fetch!(m, "link_flair_css_class"),
+      link_flair_text: Map.fetch!(m, "link_flair_text"),
       locked: m["locked"],
       media: m["media"] && Media.from_map(m["media"]),
       media_embed: MediaEmbed.from_map(m["media_embed"]),
@@ -554,17 +554,17 @@ defmodule ChildData do
       secure_media: m["secure_media"] && Media.from_map(m["secure_media"]),
       secure_media_embed: MediaEmbed.from_map(m["secure_media_embed"]),
       selftext: m["selftext"],
-      selftext_html: m["selftext_html"],
+      selftext_html: Map.fetch!(m, "selftext_html"),
       spoiler: m["spoiler"],
       stickied: m["stickied"],
       subreddit: m["subreddit"],
       subreddit_id: m["subreddit_id"],
       subreddit_name_prefixed: m["subreddit_name_prefixed"],
       subreddit_type: SubredditType.decode(m["subreddit_type"]),
-      suggested_sort: m["suggested_sort"],
+      suggested_sort: Map.fetch!(m, "suggested_sort"),
       thumbnail: m["thumbnail"],
-      thumbnail_height: m["thumbnail_height"],
-      thumbnail_width: m["thumbnail_width"],
+      thumbnail_height: Map.fetch!(m, "thumbnail_height"),
+      thumbnail_width: Map.fetch!(m, "thumbnail_width"),
       title: m["title"],
       ups: m["ups"],
       url: m["url"],
diff --git a/base/elixir/test/inputs/json/misc/734ad.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/734ad.json/default/QuickType.ex
index 36b96cc..cbbfd24 100644
--- a/base/elixir/test/inputs/json/misc/734ad.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/734ad.json/default/QuickType.ex
@@ -147,14 +147,14 @@ defmodule Result do
 
   def from_map(m) do
     %Result{
-      acronym: m["acronym"],
+      acronym: Map.fetch!(m, "acronym"),
       activity_consult_committees: m["activity_consult_committees"],
       activity_eu_legislative: m["activity_eu_legislative"],
       activity_expert_groups: m["activity_expert_groups"],
       activity_high_level_groups: m["activity_high_level_groups"],
       activity_industry_forums: m["activity_industry_forums"],
       activity_inter_groups: m["activity_inter_groups"],
-      activity_other: m["activity_other"],
+      activity_other: Map.fetch!(m, "activity_other"),
       activity_relevant_comm: m["activity_relevant_comm"],
       be_office_country: m["be_office_country"],
       be_office_lat: m["be_office_lat"],
@@ -171,11 +171,11 @@ defmodule Result do
       goals: m["goals"],
       head: m["head"],
       head_office_country: m["head_office_country"],
-      head_office_lat: m["head_office_lat"],
-      head_office_lon: m["head_office_lon"],
+      head_office_lat: Map.fetch!(m, "head_office_lat"),
+      head_office_lon: Map.fetch!(m, "head_office_lon"),
       head_office_phone: m["head_office_phone"],
-      head_office_post_code: m["head_office_post_code"],
-      head_office_postbox: m["head_office_postbox"],
+      head_office_post_code: Map.fetch!(m, "head_office_post_code"),
+      head_office_postbox: Map.fetch!(m, "head_office_postbox"),
       head_office_street: m["head_office_street"],
       head_office_town: m["head_office_town"],
       id: m["id"],
@@ -187,16 +187,16 @@ defmodule Result do
       main_category: m["main_category"],
       main_category_title: m["main_category_title"],
       members: m["members"],
-      members_100: m["members_100"],
-      members_25: m["members_25"],
-      members_50: m["members_50"],
-      members_75: m["members_75"],
+      members_100: Map.fetch!(m, "members_100"),
+      members_25: Map.fetch!(m, "members_25"),
+      members_50: Map.fetch!(m, "members_50"),
+      members_75: Map.fetch!(m, "members_75"),
       members_fte: m["members_fte"],
       name: m["name"],
       native_name: m["native_name"],
-      networking: m["networking"],
-      number_of_natural_persons: m["number_of_natural_persons"],
-      other_code_of_conduct: m["other_code_of_conduct"],
+      networking: Map.fetch!(m, "networking"),
+      number_of_natural_persons: Map.fetch!(m, "number_of_natural_persons"),
+      other_code_of_conduct: Map.fetch!(m, "other_code_of_conduct"),
       registration_date: m["registration_date"],
       status: Status.decode(m["status"]),
       structure_members: m["structure_members"],
@@ -204,7 +204,7 @@ defmodule Result do
       sub_category_title: m["sub_category_title"],
       updated_at: m["updated_at"],
       uri: m["uri"],
-      web_site_url: m["web_site_url"],
+      web_site_url: Map.fetch!(m, "web_site_url"),
     }
   end
 
diff --git a/base/elixir/test/inputs/json/misc/7f568.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/7f568.json/default/QuickType.ex
index 5eeef7c..37996bb 100644
--- a/base/elixir/test/inputs/json/misc/7f568.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/7f568.json/default/QuickType.ex
@@ -169,7 +169,7 @@ defmodule TopLevelElement do
       comments_url: m["comments_url"],
       commits_url: m["commits_url"],
       created_at: m["created_at"],
-      description: m["description"],
+      description: Map.fetch!(m, "description"),
       files: m["files"]
       |> Map.new(fn {key, value} -> {key, FileValue.from_map(value)} end),
       forks_url: m["forks_url"],
diff --git a/base/elixir/test/inputs/json/misc/80aff.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/80aff.json/default/QuickType.ex
index 323580f..e6c95a3 100644
--- a/base/elixir/test/inputs/json/misc/80aff.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/80aff.json/default/QuickType.ex
@@ -54,7 +54,7 @@ defmodule Result do
       id: m["id"],
       items: m["items"],
       name: m["name"],
-      parent: m["parent"],
+      parent: Map.fetch!(m, "parent"),
       updated_at: m["updated_at"],
       uri: m["uri"],
     }
diff --git a/base/elixir/test/inputs/json/misc/8592b.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/8592b.json/default/QuickType.ex
index 292c413..ba32c9c 100644
--- a/base/elixir/test/inputs/json/misc/8592b.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/8592b.json/default/QuickType.ex
@@ -499,8 +499,8 @@ defmodule ChildData do
       approved_by: m["approved_by"],
       archived: m["archived"],
       author: m["author"],
-      author_flair_css_class: m["author_flair_css_class"],
-      author_flair_text: m["author_flair_text"],
+      author_flair_css_class: Map.fetch!(m, "author_flair_css_class"),
+      author_flair_text: Map.fetch!(m, "author_flair_text"),
       banned_at_utc: m["banned_at_utc"],
       banned_by: m["banned_by"],
       brand_safe: m["brand_safe"],
@@ -542,7 +542,7 @@ defmodule ChildData do
       secure_media: m["secure_media"],
       secure_media_embed: MediaEmbed.from_map(m["secure_media_embed"]),
       selftext: m["selftext"],
-      selftext_html: m["selftext_html"],
+      selftext_html: Map.fetch!(m, "selftext_html"),
       spoiler: m["spoiler"],
       stickied: m["stickied"],
       subreddit: Subreddit.decode(m["subreddit"]),
@@ -551,8 +551,8 @@ defmodule ChildData do
       subreddit_type: SubredditType.decode(m["subreddit_type"]),
       suggested_sort: SuggestedSort.decode(m["suggested_sort"]),
       thumbnail: m["thumbnail"],
-      thumbnail_height: m["thumbnail_height"],
-      thumbnail_width: m["thumbnail_width"],
+      thumbnail_height: Map.fetch!(m, "thumbnail_height"),
+      thumbnail_width: Map.fetch!(m, "thumbnail_width"),
       title: m["title"],
       ups: m["ups"],
       url: m["url"],
diff --git a/base/elixir/test/inputs/json/misc/996bd.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/996bd.json/default/QuickType.ex
index 3690a16..f2778ed 100644
--- a/base/elixir/test/inputs/json/misc/996bd.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/996bd.json/default/QuickType.ex
@@ -326,7 +326,7 @@ defmodule TopLevelElement do
       links: Enum.map(m["links"], &Link.from_map/1),
       name: m["name"],
       other_names: m["other_names"],
-      superseded_by: m["superseded_by"],
+      superseded_by: Map.fetch!(m, "superseded_by"),
       text: Enum.map(m["text"], &Text.from_map/1),
     }
   end
diff --git a/base/elixir/test/inputs/json/misc/9ac3b.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/9ac3b.json/default/QuickType.ex
index a9040b4..fab0231 100644
--- a/base/elixir/test/inputs/json/misc/9ac3b.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/9ac3b.json/default/QuickType.ex
@@ -152,7 +152,7 @@ defmodule Result do
       id: m["id"],
       last_name: m["last_name"],
       name: m["name"],
-      position: m["position"],
+      position: Map.fetch!(m, "position"),
       status: Status.decode(m["status"]),
       title: m["title"] && Title.decode(m["title"]),
       updated_at: m["updated_at"],
diff --git a/base/elixir/test/inputs/json/misc/ad8be.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/ad8be.json/default/QuickType.ex
index a2da62e..3c05309 100644
--- a/base/elixir/test/inputs/json/misc/ad8be.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/ad8be.json/default/QuickType.ex
@@ -242,7 +242,7 @@ defmodule OtherName do
   def from_map(m) do
     %OtherName{
       name: m["name"],
-      note: m["note"],
+      note: Map.fetch!(m, "note"),
     }
   end
 
@@ -422,7 +422,7 @@ defmodule TopLevelElement do
       links: Enum.map(m["links"], &Link.from_map/1),
       name: m["name"],
       other_names: Enum.map(m["other_names"], &OtherName.from_map/1),
-      superseded_by: m["superseded_by"],
+      superseded_by: Map.fetch!(m, "superseded_by"),
       text: Enum.map(m["text"], &Text.from_map/1),
     }
   end
diff --git a/base/elixir/test/inputs/json/misc/ae7f0.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/ae7f0.json/default/QuickType.ex
index 8c54ca1..fa8f910 100644
--- a/base/elixir/test/inputs/json/misc/ae7f0.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/ae7f0.json/default/QuickType.ex
@@ -354,8 +354,8 @@ defmodule ChildData do
       is_self: m["is_self"],
       is_video: m["is_video"],
       likes: m["likes"],
-      link_flair_css_class: m["link_flair_css_class"],
-      link_flair_text: m["link_flair_text"],
+      link_flair_css_class: Map.fetch!(m, "link_flair_css_class"),
+      link_flair_text: Map.fetch!(m, "link_flair_text"),
       locked: m["locked"],
       media: m["media"],
       media_embed: MediaEmbed.from_map(m["media_embed"]),
diff --git a/base/elixir/test/inputs/json/misc/af2d1.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/af2d1.json/default/QuickType.ex
index bf15b60..3183830 100644
--- a/base/elixir/test/inputs/json/misc/af2d1.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/af2d1.json/default/QuickType.ex
@@ -577,16 +577,16 @@ defmodule FeatureProperties do
       add_improv: m["add_improv"] && AddImprov.decode(m["add_improv"]),
       area: m["area_"],
       asset_numb: m["asset_numb"],
-      comments: m["comments"],
+      comments: Map.fetch!(m, "comments"),
       condition: m["condition"],
-      constructi: m["constructi"],
+      constructi: Map.fetch!(m, "constructi"),
       createdate: m["createdate"],
       createuser: m["createuser"],
       disposal_d: m["disposal_d"],
       documents: m["documents"],
-      drawing_nu: m["drawing_nu"],
-      file_numbe: m["file_numbe"],
-      folder_num: m["folder_num"],
+      drawing_nu: Map.fetch!(m, "drawing_nu"),
+      file_numbe: Map.fetch!(m, "file_numbe"),
+      folder_num: Map.fetch!(m, "folder_num"),
       funding_ba: m["funding_ba"] && FundingBa.decode(m["funding_ba"]),
       historic_c: m["historic_c"],
       inspection: m["inspection"],
@@ -597,11 +597,11 @@ defmodule FeatureProperties do
       mi_prinx: m["mi_prinx"],
       mi_symbolo: MiSymbolo.decode(m["mi_symbolo"]),
       number_lan: m["number_lan"],
-      owner: m["owner"],
+      owner: Map.fetch!(m, "owner"),
       positional: m["positional"] && LevelAccu.decode(m["positional"]),
-      project_nu: m["project_nu"],
+      project_nu: Map.fetch!(m, "project_nu"),
       rec_id: m["rec_id"],
-      record_cre: m["record_cre"],
+      record_cre: Map.fetch!(m, "record_cre"),
       shape_area: m["shape_area"],
       shape_leng: m["shape_leng"],
       status: Status.decode(m["status"]),
diff --git a/base/elixir/test/inputs/json/misc/be234.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/be234.json/default/QuickType.ex
index dc14f1b..5e5b461 100644
--- a/base/elixir/test/inputs/json/misc/be234.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/be234.json/default/QuickType.ex
@@ -690,7 +690,7 @@ defmodule ChildData do
       archived: m["archived"],
       author: m["author"],
       author_flair_css_class: m["author_flair_css_class"],
-      author_flair_text: m["author_flair_text"],
+      author_flair_text: Map.fetch!(m, "author_flair_text"),
       banned_at_utc: m["banned_at_utc"],
       banned_by: m["banned_by"],
       brand_safe: m["brand_safe"],
@@ -700,7 +700,7 @@ defmodule ChildData do
       contest_mode: m["contest_mode"],
       created: m["created"],
       created_utc: m["created_utc"],
-      distinguished: m["distinguished"],
+      distinguished: Map.fetch!(m, "distinguished"),
       domain: Domain.decode(m["domain"]),
       downs: m["downs"],
       edited: m["edited"],
diff --git a/base/elixir/test/inputs/json/misc/d23d5.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/d23d5.json/default/QuickType.ex
index 0684ee9..4238306 100644
--- a/base/elixir/test/inputs/json/misc/d23d5.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/d23d5.json/default/QuickType.ex
@@ -49,7 +49,7 @@ defmodule Result do
 
   def from_map(m) do
     %Result{
-      acronym: m["acronym"],
+      acronym: Map.fetch!(m, "acronym"),
       created_at: m["created_at"],
       id: m["id"],
       name: m["name"],
diff --git a/base/elixir/test/inputs/json/misc/f22f5.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/f22f5.json/default/QuickType.ex
index 49d9d07..3c14697 100644
--- a/base/elixir/test/inputs/json/misc/f22f5.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/f22f5.json/default/QuickType.ex
@@ -309,8 +309,8 @@ defmodule ChildData do
       is_self: m["is_self"],
       is_video: m["is_video"],
       likes: m["likes"],
-      link_flair_css_class: m["link_flair_css_class"],
-      link_flair_text: m["link_flair_text"],
+      link_flair_css_class: Map.fetch!(m, "link_flair_css_class"),
+      link_flair_text: Map.fetch!(m, "link_flair_text"),
       locked: m["locked"],
       media: m["media"],
       media_embed: MediaEmbed.from_map(m["media_embed"]),
diff --git a/base/elixir/test/inputs/json/priority/bug2590.json/default/QuickType.ex b/head/elixir/test/inputs/json/priority/bug2590.json/default/QuickType.ex
index df2b41f..6f04836 100644
--- a/base/elixir/test/inputs/json/priority/bug2590.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/priority/bug2590.json/default/QuickType.ex
@@ -17,8 +17,8 @@ defmodule Invoice do
 
   def from_map(m) do
     %Invoice{
-      created_at: m["createdAt"],
-      due_date: m["dueDate"],
+      created_at: Map.fetch!(m, "createdAt"),
+      due_date: Map.fetch!(m, "dueDate"),
       name: m["name"],
     }
   end
diff --git a/base/elixir/test/inputs/json/priority/nbl-stats.json/default/QuickType.ex b/head/elixir/test/inputs/json/priority/nbl-stats.json/default/QuickType.ex
index 7376ce5..a35ff78 100644
--- a/base/elixir/test/inputs/json/priority/nbl-stats.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/priority/nbl-stats.json/default/QuickType.ex
@@ -875,7 +875,7 @@ defmodule Pl do
       s_free_throws_attempted: m["sFreeThrowsAttempted"],
       s_free_throws_made: m["sFreeThrowsMade"],
       s_free_throws_percentage: m["sFreeThrowsPercentage"],
-      s_minutes: m["sMinutes"],
+      s_minutes: Map.fetch!(m, "sMinutes"),
       s_plus_minus_points: m["sPlusMinusPoints"],
       s_points: m["sPoints"],
       s_points_fast_break: m["sPointsFastBreak"],
diff --git a/base/elixir/test/inputs/json/samples/github-events.json/default/QuickType.ex b/head/elixir/test/inputs/json/samples/github-events.json/default/QuickType.ex
index 15cdbe1..69b48eb 100644
--- a/base/elixir/test/inputs/json/samples/github-events.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/samples/github-events.json/default/QuickType.ex
@@ -389,7 +389,7 @@ defmodule Milestone do
       created_at: m["created_at"],
       creator: User.from_map(m["creator"]),
       description: m["description"],
-      due_on: m["due_on"],
+      due_on: Map.fetch!(m, "due_on"),
       html_url: m["html_url"],
       id: m["id"],
       labels_url: m["labels_url"],
@@ -511,7 +511,7 @@ defmodule Issue do
       assignee: m["assignee"],
       assignees: m["assignees"],
       body: m["body"],
-      closed_at: m["closed_at"],
+      closed_at: Map.fetch!(m, "closed_at"),
       comments: m["comments"],
       comments_url: m["comments_url"],
       created_at: m["created_at"],
diff --git a/base/elixir/test/inputs/json/samples/kitchen-sink.json/default/QuickType.ex b/head/elixir/test/inputs/json/samples/kitchen-sink.json/default/QuickType.ex
index 77eee54..887f780 100644
--- a/base/elixir/test/inputs/json/samples/kitchen-sink.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/samples/kitchen-sink.json/default/QuickType.ex
@@ -50,7 +50,7 @@ defmodule PersonElement do
 
   def from_map(m) do
     %PersonElement{
-      int_or_string: m["intOrString"],
+      int_or_string: Map.fetch!(m, "intOrString"),
       name: m["name"],
       optional_value: m["optionalValue"],
     }
diff --git a/base/elixir/test/inputs/json/samples/null-safe.json/default/QuickType.ex b/head/elixir/test/inputs/json/samples/null-safe.json/default/QuickType.ex
index 9d068c0..de89e2b 100644
--- a/base/elixir/test/inputs/json/samples/null-safe.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/samples/null-safe.json/default/QuickType.ex
@@ -60,7 +60,7 @@ defmodule Item do
       address: m["address"] && Address.from_map(m["address"]),
       created_at: m["created_at"],
       name: m["name"],
-      sex: m["sex"],
+      sex: Map.fetch!(m, "sex"),
     }
   end
 
diff --git a/base/elixir/test/inputs/json/samples/reddit.json/default/QuickType.ex b/head/elixir/test/inputs/json/samples/reddit.json/default/QuickType.ex
index f4b2050..826209a 100644
--- a/base/elixir/test/inputs/json/samples/reddit.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/samples/reddit.json/default/QuickType.ex
@@ -620,8 +620,8 @@ defmodule ChildData do
       approved_by: m["approved_by"],
       archived: m["archived"],
       author: m["author"],
-      author_flair_css_class: m["author_flair_css_class"],
-      author_flair_text: m["author_flair_text"],
+      author_flair_css_class: Map.fetch!(m, "author_flair_css_class"),
+      author_flair_text: Map.fetch!(m, "author_flair_text"),
       banned_at_utc: m["banned_at_utc"],
       banned_by: m["banned_by"],
       brand_safe: m["brand_safe"],
@@ -631,7 +631,7 @@ defmodule ChildData do
       contest_mode: m["contest_mode"],
       created: m["created"],
       created_utc: m["created_utc"],
-      distinguished: m["distinguished"],
+      distinguished: Map.fetch!(m, "distinguished"),
       domain: Domain.decode(m["domain"]),
       downs: m["downs"],
       edited: m["edited"],
@@ -642,8 +642,8 @@ defmodule ChildData do
       is_self: m["is_self"],
       is_video: m["is_video"],
       likes: m["likes"],
-      link_flair_css_class: m["link_flair_css_class"],
-      link_flair_text: m["link_flair_text"],
+      link_flair_css_class: Map.fetch!(m, "link_flair_css_class"),
+      link_flair_text: Map.fetch!(m, "link_flair_text"),
       locked: m["locked"],
       media: m["media"],
       media_embed: MediaEmbed.from_map(m["media_embed"]),
diff --git a/base/elixir/test/inputs/json/samples/us-senators.json/default/QuickType.ex b/head/elixir/test/inputs/json/samples/us-senators.json/default/QuickType.ex
index e53e56e..b93ebc2 100644
--- a/base/elixir/test/inputs/json/samples/us-senators.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/samples/us-senators.json/default/QuickType.ex
@@ -316,8 +316,8 @@ defmodule Person do
       osid: m["osid"],
       pvsid: m["pvsid"],
       sortname: m["sortname"],
-      twitterid: m["twitterid"],
-      youtubeid: m["youtubeid"],
+      twitterid: Map.fetch!(m, "twitterid"),
+      youtubeid: Map.fetch!(m, "youtubeid"),
     }
   end
 
@@ -715,7 +715,7 @@ defmodule Object do
       district: m["district"],
       enddate: m["enddate"],
       extra: Extra.from_map(m["extra"]),
-      leadership_title: m["leadership_title"],
+      leadership_title: Map.fetch!(m, "leadership_title"),
       party: Party.decode(m["party"]),
       person: Person.from_map(m["person"]),
       phone: m["phone"],
diff --git a/base/graphql-elixir/test/inputs/graphql/github1.graphql/default/QuickType.ex b/head/graphql-elixir/test/inputs/graphql/github1.graphql/default/QuickType.ex
index 64994e1..bf2cb0e 100644
--- a/base/graphql-elixir/test/inputs/graphql/github1.graphql/default/QuickType.ex
+++ b/head/graphql-elixir/test/inputs/graphql/github1.graphql/default/QuickType.ex
@@ -17,7 +17,7 @@ defmodule User do
   def from_map(m) do
     %User{
       login: m["login"],
-      real_name: m["realName"],
+      real_name: Map.fetch!(m, "realName"),
     }
   end
 
diff --git a/base/graphql-elixir/test/inputs/graphql/github4.graphql/default/QuickType.ex b/head/graphql-elixir/test/inputs/graphql/github4.graphql/default/QuickType.ex
index 4157aad..45d539d 100644
--- a/base/graphql-elixir/test/inputs/graphql/github4.graphql/default/QuickType.ex
+++ b/head/graphql-elixir/test/inputs/graphql/github4.graphql/default/QuickType.ex
@@ -172,7 +172,7 @@ defmodule User do
   def from_map(m) do
     %User{
       login: m["login"],
-      name: m["name"],
+      name: Map.fetch!(m, "name"),
       repository: m["repository"] && Repository.from_map(m["repository"]),
     }
   end
diff --git a/base/graphql-elixir/test/inputs/graphql/github9.graphql/default/QuickType.ex b/head/graphql-elixir/test/inputs/graphql/github9.graphql/default/QuickType.ex
index ee70a8b..e010d0a 100644
--- a/base/graphql-elixir/test/inputs/graphql/github9.graphql/default/QuickType.ex
+++ b/head/graphql-elixir/test/inputs/graphql/github9.graphql/default/QuickType.ex
@@ -136,7 +136,7 @@ defmodule AddReactionPayload do
 
   def from_map(m) do
     %AddReactionPayload{
-      client_mutation_id: m["clientMutationId"],
+      client_mutation_id: Map.fetch!(m, "clientMutationId"),
       reaction: Reaction.from_map(m["reaction"]),
       subject: Reactable.from_map(m["subject"]),
     }
diff --git a/base/schema-elixir/test/inputs/schema/accessors.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/accessors.schema/default/QuickType.ex
index f6d9cf3..b6a0188 100644
--- a/base/schema-elixir/test/inputs/schema/accessors.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/accessors.schema/default/QuickType.ex
@@ -68,7 +68,7 @@ defmodule TopLevel do
       barre: m["bar"],
       enumerification: EnumEnum.decode(m["enum"]),
       foo: m["foo"],
-      unionization: m["union"],
+      unionization: Map.fetch!(m, "union"),
     }
   end
 
diff --git a/base/schema-elixir/test/inputs/schema/bool-string.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/bool-string.schema/default/QuickType.ex
index 8bd9c99..bbdd0bf 100644
--- a/base/schema-elixir/test/inputs/schema/bool-string.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/bool-string.schema/default/QuickType.ex
@@ -31,11 +31,11 @@ defmodule TopLevel do
     %TopLevel{
       arr_nullable: m["arrNullable"] && Enum.map(m["arrNullable"], &decode_arr_nullable_element/1),
       arr_one: m["arrOne"],
-      nullable: m["nullable"],
+      nullable: Map.fetch!(m, "nullable"),
       one: m["one"],
       optional: m["optional"],
-      union_with_bool: m["unionWithBool"],
-      union_with_bool_and_enum: m["unionWithBoolAndEnum"],
+      union_with_bool: Map.fetch!(m, "unionWithBool"),
+      union_with_bool_and_enum: Map.fetch!(m, "unionWithBoolAndEnum"),
     }
   end
 
diff --git a/base/schema-elixir/test/inputs/schema/description.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/description.schema/default/QuickType.ex
index 933eb3d..ef20c40 100644
--- a/base/schema-elixir/test/inputs/schema/description.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/description.schema/default/QuickType.ex
@@ -125,7 +125,7 @@ defmodule TopLevel do
       enum: EnumEnum.decode(m["enum"]),
       foo: m["foo"],
       object_or_string: decode_object_or_string(m["object-or-string"]),
-      union: m["union"],
+      union: Map.fetch!(m, "union"),
     }
   end
 
diff --git a/base/schema-elixir/test/inputs/schema/integer-string.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/integer-string.schema/default/QuickType.ex
index 55627bf..865c4ee 100644
--- a/base/schema-elixir/test/inputs/schema/integer-string.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/integer-string.schema/default/QuickType.ex
@@ -31,11 +31,11 @@ defmodule TopLevel do
     %TopLevel{
       arr_nullable: m["arrNullable"] && Enum.map(m["arrNullable"], &decode_arr_nullable_element/1),
       arr_one: m["arrOne"],
-      nullable: m["nullable"],
+      nullable: Map.fetch!(m, "nullable"),
       one: m["one"],
       optional: m["optional"],
-      union_with_int: m["unionWithInt"],
-      union_with_int_and_enum: m["unionWithIntAndEnum"],
+      union_with_int: Map.fetch!(m, "unionWithInt"),
+      union_with_int_and_enum: Map.fetch!(m, "unionWithIntAndEnum"),
     }
   end
 
diff --git a/base/schema-elixir/test/inputs/schema/minmaxlength.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/minmaxlength.schema/default/QuickType.ex
index 31656f4..8773200 100644
--- a/base/schema-elixir/test/inputs/schema/minmaxlength.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/minmaxlength.schema/default/QuickType.ex
@@ -23,7 +23,7 @@ defmodule TopLevel do
   def from_map(m) do
     %TopLevel{
       intersection: m["intersection"],
-      in_union: m["inUnion"],
+      in_union: Map.fetch!(m, "inUnion"),
       maxlength: m["maxlength"],
       minlength: m["minlength"],
       min_max_intersection: m["minMaxIntersection"],
diff --git a/head/schema-elixir/test/inputs/schema/strict-optional.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/strict-optional.schema/default/QuickType.ex
new file mode 100644
index 0000000..0961fd1
--- /dev/null
+++ b/head/schema-elixir/test/inputs/schema/strict-optional.schema/default/QuickType.ex
@@ -0,0 +1,39 @@
+# This file was autogenerated using quicktype https://github.com/quicktype/quicktype
+#
+# Add Jason to your mix.exs
+#
+# Decode a JSON string: TopLevel.from_json(data)
+# Encode into a JSON string: TopLevel.to_json(struct)
+
+defmodule TopLevel do
+  @enforce_keys [:foo]
+  defstruct [:foo]
+
+  @type t :: %__MODULE__{
+          foo: float() | nil
+        }
+
+  def from_map(m) do
+    %TopLevel{
+      foo: Map.fetch!(m, "foo"),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "foo" => struct.foo,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
diff --git a/base/schema-elixir/test/inputs/schema/union-int-double.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/union-int-double.schema/default/QuickType.ex
index c40dc2d..bf1832c 100644
--- a/base/schema-elixir/test/inputs/schema/union-int-double.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/union-int-double.schema/default/QuickType.ex
@@ -15,7 +15,7 @@ defmodule TopLevel do
 
   def from_map(m) do
     %TopLevel{
-      value: m["value"],
+      value: Map.fetch!(m, "value"),
     }
   end
 
diff --git a/base/schema-elixir/test/inputs/schema/uuid.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/uuid.schema/default/QuickType.ex
index 602006f..2d2be42 100644
--- a/base/schema-elixir/test/inputs/schema/uuid.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/uuid.schema/default/QuickType.ex
@@ -30,7 +30,7 @@ defmodule TopLevel do
     %TopLevel{
       arr_nullable: m["arrNullable"] && Enum.map(m["arrNullable"], &decode_arr_nullable_element/1),
       arr_one: m["arrOne"],
-      nullable: m["nullable"],
+      nullable: Map.fetch!(m, "nullable"),
       one: m["one"],
       optional: m["optional"],
       union_with_enum: m["unionWithEnum"],
diff --git a/base/schema-elixir/test/inputs/schema/vega-lite.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/vega-lite.schema/default/QuickType.ex
index 0e82e11..95dafd7 100644
--- a/base/schema-elixir/test/inputs/schema/vega-lite.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/vega-lite.schema/default/QuickType.ex
@@ -4504,7 +4504,7 @@ defmodule ConditionalValueDef do
   def from_map(m) do
     %ConditionalValueDef{
       test: decode_test(m["test"]),
-      value: m["value"],
+      value: Map.fetch!(m, "value"),
       selection: decode_selection(m["selection"]),
     }
   end
