packages feed

jsonifier-0.1.2.1: bench/Main/Jsonifier.hs

module Main.Jsonifier where

import Jsonifier
import qualified Main.Model as A
import Prelude hiding (bool, null)

resultJson :: A.Result -> Json
resultJson A.Result {..} =
  object
    [ ("results", array (fmap storyJson results)),
      ("max_id", intNumber max_id),
      ("since_id", intNumber since_id),
      ("refresh_url", textString refresh_url),
      ("next_page", textString next_page),
      ("results_per_page", intNumber results_per_page),
      ("page", intNumber page),
      ("completed_in", doubleNumber completed_in),
      ("since_id_str", textString since_id_str),
      ("max_id_str", textString max_id_str),
      ("query", textString query)
    ]

storyJson :: A.Story -> Json
storyJson A.Story {..} =
  object
    [ ("from_user_id_str", textString from_user_id_str),
      ("profile_image_url", textString profile_image_url),
      ("created_at", textString created_at),
      ("from_user", textString from_user),
      ("id_str", textString id_str),
      ("metadata", metadataJson metadata),
      ("to_user_id", maybe null intNumber to_user_id),
      ("text", textString text),
      ("id", intNumber id),
      ("from_user_id", intNumber from_user_id),
      ("geo", maybe null geoJson geo),
      ("iso_language_code", textString iso_language_code),
      ("to_user_id_str", maybe null textString to_user_id_str),
      ("source", textString source)
    ]

geoJson :: A.Geo -> Json
geoJson A.Geo {..} =
  object
    [ ("type_", textString type_),
      ("coordinates", coordinatesJson coordinates)
    ]

coordinatesJson :: (Double, Double) -> Json
coordinatesJson (x, y) =
  array
    [ doubleNumber x,
      doubleNumber y
    ]

metadataJson :: A.Metadata -> Json
metadataJson A.Metadata {..} =
  object
    [ ("result_type", textString result_type)
    ]