{-|
Description:    Bindings directly mirroring the C interface of libcdio.

Copyright:      (c) 2018-2021 Sam May
License:        GPL-3.0-or-later
Maintainer:     ag@eitilt.life

Stability:      stable
Portability:    non-portable (requires libcdio)

Modules in this tree are designed so users familiar with working with the
original libcdio should be able to write essentially the same code they're
used to, in the 'IO' monad.  There have, however, been some changes made (beyond
mapping the types to ones more native to Haskell), mostly to take advantage of
the type safety.  These have then been adapted further into the modules under
"Sound.Libcdio", which aim to provide much of the same functionality but in a
form the library might have taken if it had been originally written for
Haskell.

As /this/ interface does mirror the structure of the C library, each header
file is translated into a separate module, as follows.  Any changes from those
original headers which might not be easily guessed are noted in the
documentation for each module, along with similar equivalencies to the
higher-level interface.

* @cdio.h@ -> "Foreign.Libcdio"
* @cd_types.h@ -> "Foreign.Libcdio.CdTypes" (not reexported by @cdio.h@, or this module)
* @cdtext.h@ -> "Foreign.Libcdio.CdText"
* @device.h@ -> "Foreign.Libcdio.Device"
* @disc.h@ -> "Foreign.Libcdio.Disc"
* @logging.h@ -> "Foreign.Libcdio.Logging" (not reexported by @cdio.h@, or this module)
* @memory.h@ (removed; the only exported symbol @cdio_free@ is encapsulated
  into the Haskell garbage collection)
* @read.h@ -> "Foreign.Libcdio.Read"
* @sector.h@ -> "Foreign.Libcdio.Sector"
* @track.h@ -> "Foreign.Libcdio.Track"
* @types.h@ -> "Foreign.Libcdio.Types"

    * The original header was an interesting collection of some (but not all)
      types used by the library.  The module is both more universal by
      exporting all types in the interface, and less required as each relevant
      type is exported by the various modules themselves.

* @util.h@ -> "Foreign.Libcdio.Util" (not reexported by @cdio.h@, or this module)
* @version.h@ -> "Foreign.Libcdio.Version"


= @cdio.h@

== Defines
* @CDIO_API_VERSION@                -> 'apiVersion' (primarily exported from "Foreign.Libcdio.Version")

== Types
* @CdIo_t@                          -> 'Cdio' (primarily exported from "Foreign.Libcdio.Device")
-}
module Foreign.Libcdio
    ( module Foreign.Libcdio.CdText
    , module Foreign.Libcdio.Device
    , module Foreign.Libcdio.Disc
    , module Foreign.Libcdio.Read
    , module Foreign.Libcdio.Sector
    , module Foreign.Libcdio.Track
    , module Foreign.Libcdio.Version
    ) where


import Foreign.Libcdio.Version
import Foreign.Libcdio.Sector

import Foreign.Libcdio.Device
import Foreign.Libcdio.CdText
import Foreign.Libcdio.Disc
import Foreign.Libcdio.Read
import Foreign.Libcdio.Track