duckling/Duckling/Time/Corpus.hs

58 lines
1.9 KiB
Haskell
Raw Normal View History

-- 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. An additional grant
-- of patent rights can be found in the PATENTS file in the same directory.
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
module Duckling.Time.Corpus
( datetime
, datetimeInterval
, datetimeOpenInterval
, examples
) where
import Data.Aeson
import qualified Data.HashMap.Strict as H
import Data.Text (Text)
import qualified Data.Time.LocalTime.TimeZone.Series as Series
import Prelude
import Data.String
import Duckling.Resolve
import Duckling.Testing.Types hiding (examples)
import Duckling.Time.Types hiding (Month)
import Duckling.TimeGrain.Types hiding (add)
import Duckling.Types hiding (Entity(..))
datetime :: Datetime -> Grain -> Context -> SingleTimeValue
datetime d g ctx =
timeValue tzSeries TimeObject {start = dt d, end = Nothing, grain = g}
where
DucklingTime (Series.ZoneSeriesTime _ tzSeries) = referenceTime ctx
datetimeInterval :: (Datetime, Datetime) -> Grain -> Context -> SingleTimeValue
datetimeInterval (d1, d2) g ctx = timeValue tzSeries TimeObject
{start = dt d1, end = Just $ dt d2, grain = g}
where
DucklingTime (Series.ZoneSeriesTime _ tzSeries) = referenceTime ctx
datetimeOpenInterval
:: IntervalDirection -> Datetime -> Grain -> Context -> SingleTimeValue
datetimeOpenInterval dir d g ctx = openInterval tzSeries dir TimeObject
{start = dt d, end = Nothing, grain = g}
where
DucklingTime (Series.ZoneSeriesTime _ tzSeries) = referenceTime ctx
check :: ToJSON a => (Context -> a) -> TestPredicate
check f context (Resolved {jsonValue}) = case jsonValue of
Object o -> toJSON (f context) == (Object $ H.delete "values" o)
_ -> False
examples :: ToJSON a => (Context -> a) -> [Text] -> [Example]
examples f = examplesCustom (check f)