diff --git a/lib/trmnl/api/container.rb b/lib/trmnl/api/container.rb index 6c53c16..44aad0d 100644 --- a/lib/trmnl/api/container.rb +++ b/lib/trmnl/api/container.rb @@ -27,6 +27,7 @@ module TRMNL register :ip_address, Contracts::IPAddress register :model, Contracts::Model register :palette, Contracts::Palette + register :recipe, Contracts::Recipe register :setup, Contracts::Setup end diff --git a/lib/trmnl/api/contracts/recipe.rb b/lib/trmnl/api/contracts/recipe.rb new file mode 100644 index 0000000..cb9a88a --- /dev/null +++ b/lib/trmnl/api/contracts/recipe.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require "dry/schema" + +module TRMNL + module API + module Contracts + # Validates API response. + Recipe = Dry::Schema.JSON do + required(:data).array(:hash) do + required(:id).filled :integer + required(:name).filled :string + required(:screenshot_url).filled :string + required(:published_at).filled :time + optional(:icon_url).maybe :string + optional(:icon_content_type).maybe :string + required(:author_bio).maybe Recipes::Author + required(:custom_fields).array(:hash) + + required(:stats).filled :hash do + required(:installs).filled :integer + required(:forks).filled :integer + end + end + + required(:total).filled :integer + required(:from).filled :integer + required(:to).filled :integer + required(:per_page).filled :integer + required(:current_page).filled :integer + required(:prev_page_url).maybe :string + required(:next_page_url).maybe :string + end + end + end +end