{-|
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