lib/submission.ex

defmodule Breddit.Submission do
  @keys ~W(approved_at_utc category clicked gildings id is_original_content
  is_self media_embed name num_comments over_18 permalink post_hint
  preview score subreddit subreddit_id thumbnail thumbnail_height
  thumbnail_width title upvote_ratio url view_count)a
  defstruct @keys

  @type image :: %{height: integer(), width: integer(), url: String.t()}

  @type t() :: %Breddit.Submission{
          approved_at_utc: float(),
          category: any(),
          clicked: boolean(),
          # TODO type
          gildings: list(),
          id: String.t(),
          is_original_content: boolean(),
          is_self: boolean(),
          media_embed: %{
            content: String.t(),
            height: number(),
            scrolling: boolean(),
            width: integer()
          },
          name: String.t(),
          num_comments: integer(),
          over_18: boolean(),
          permalink: String.t(),
          post_hint: String.t(),
          preview: %{
            enabled: boolean(),
            images: list(%{id: String.t(), resolutions: list(image()), source: image()}),
            # TODO type
            variants: map()
          },
          score: integer(),
          subreddit: String.t(),
          subreddit_id: String.t(),
          thumbnail: String.t(),
          thumbnail_height: integer(),
          thumbnail_width: integer(),
          title: String.t(),
          upvote_ratio: float(),
          url: String.t(),
          view_count: integer()
        }
end