duckling/Duckling/PhoneNumber/Types.hs
Julien Odent 7166286a6f Add type=value to JSON response for Email, PhoneNumber and Url
Summary: For consistency.

Reviewed By: jtliao

Differential Revision: D20524369

fbshipit-source-id: 44031667adccab9bca7b3b6d42c80878bb96ccae
2020-03-18 17:04:42 -07:00

57 lines
1.5 KiB
Haskell

-- Copyright (c) 2016-present, Facebook, Inc.
-- All rights reserved.
--
-- This source code is licensed under the BSD-style license found in the
-- LICENSE file in the root directory of this source tree.
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE NoRebindableSyntax #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}
module Duckling.PhoneNumber.Types where
import Control.DeepSeq
import Data.Aeson
import Data.Hashable
import Data.Monoid
import Data.Text (Text)
import qualified Data.Text as Text
import GHC.Generics
import qualified TextShow as TS
import Prelude
import Duckling.Resolve (Resolve(..))
data PhoneNumberData = PhoneNumberData
{ prefix :: Maybe Integer
, number :: Text
, extension :: Maybe Integer
}
deriving (Eq, Generic, Hashable, Ord, Show, NFData)
instance Resolve PhoneNumberData where
type ResolvedValue PhoneNumberData = PhoneNumberValue
resolve _ _ PhoneNumberData {prefix, number, extension} = Just
(PhoneNumberValue {value = Text.concat [p, number, e]}, False)
where
p = case prefix of
Just p -> "(+" <> TS.showt p <> ") "
Nothing -> ""
e = case extension of
Just e -> " ext " <> TS.showt e
Nothing -> ""
data PhoneNumberValue = PhoneNumberValue { value :: Text }
deriving (Eq, Ord, Show)
instance ToJSON PhoneNumberValue where
toJSON (PhoneNumberValue value) = object
[ "value" .= value
, "type" .= ("value" :: Text)
]