    {-|
    Module      : Toml.Schema
    Description : Infrastructure for converting between TOML and application values
    Copyright   : (c) Eric Mertens, 2024
    License     : ISC
    Maintainer  : emertens@gmail.com

    -}
    module Toml.Schema (
        -- * FromValue
        FromValue(..),
        mapOf,
        listOf,

        -- ** Matcher
        Matcher,
        runMatcher,
        runMatcherFatalWarn,
        runMatcherIgnoreWarn,
        Result(..),
        MatchMessage(..),
        Scope(..),
        parseTableFromValue,
        parseTable,
        getScope,
        warn,
        warnAt,
        failAt,
        getTable,
        setTable,

        -- ** Tables
        ParseTable,
        reqKey,
        optKey,
        reqKeyOf,
        optKeyOf,
        pickKey,
        KeyAlt(..),
        warnTable,
        warnTableAt,
        failTableAt,
        liftMatcher,

        -- * ToValue
        ToValue(..),
        ToTable(..),

        table,
        (.=),
        defaultTableToValue,

        -- * Types
        Value, Value'(..),
        Table, Table'(..),

        -- * Generics
        GenericTomlArray(..),
        GenericTomlTable(..),
        genericFromTable,
        genericFromArray,
        genericToArray,
        genericToTable,

    ) where

    import Toml.Schema.FromValue
    import Toml.Schema.Generic
    import Toml.Schema.ParseTable
    import Toml.Schema.Matcher
    import Toml.Schema.ToValue
    import Toml.Semantics