{-# LANGUAGE OverloadedStrings   #-}
{-# LANGUAGE RecordWildCards     #-}
{-# LANGUAGE Safe                #-}
{-# LANGUAGE ScopedTypeVariables #-}

-- |
-- Copyright: © Herbert Valerio Riedel 2015-2018
-- SPDX-License-Identifier: GPL-2.0-or-later
--
-- Predefined YAML 1.2 Schema resolvers and encoders as well as support for defining custom resolvers and encoders.
--
-- @since 0.2.0.0
module Data.YAML.Schema
    ( -- * Schema resolvers
      -- ** YAML 1.2 Schema resolvers
      SchemaResolver(..)
    , failsafeSchemaResolver
    , jsonSchemaResolver
    , coreSchemaResolver

      -- * Schema encoders
      -- ** YAML 1.2 Schema encoders
    , SchemaEncoder(..)
    , failsafeSchemaEncoder
    , jsonSchemaEncoder
    , coreSchemaEncoder

      -- ** Custom Schema encoding
      --
      -- | According to YAML 1.2 the recommended default 'SchemaEncoder' is 'coreSchemaEncoder' under which 'Scalar's are encoded as follows:
      --
      -- * String which are made of Plain Characters (see 'isPlainChar'), unambiguous (see 'isAmbiguous') and do not contain any leading/trailing spaces are encoded as 'Data.YAML.Event.Plain' 'Scalar'.
      --
      -- * Rest of the strings are encoded in DoubleQuotes
      --
      -- * Booleans are encoded using 'encodeBool'
      --
      -- * Double values are encoded using 'encodeDouble'
      --
      -- * Integral values are encoded using 'encodeInt'
      --
    , setScalarStyle
    , isPlainChar
    , isAmbiguous
    , encodeDouble
    , encodeBool
    , encodeInt
    ) where

import           Data.YAML.Schema.Internal