packages feed

wireform-core-0.2.0.0: wireform-core.cabal

cabal-version: 3.0
name: wireform-core
version: 0.2.0.0
synopsis: Shared FFI primitives for wireform format packages
description:
  Cross-format SWAR / SIMD-accelerated primitives used by every
  @wireform-*@ format package.
  .
  Modules:
  .
  * @Wireform.FFI@ -- C FFI surface: packed-varint pre-scan + decode,
    SWAR UTF-8 validation, SIMD NUL / byte / ASCII / whitespace
    scanners, SIMD JSON escape scanner, SIMD Iceberg bounds compare,
    Arrow IPC buffer validation, endianness helpers.
  * @Wireform.Encode.Direct@ -- shared direct-write encode buffer
    used by the per-format encoders.
  * @Wireform.Hash@ -- SIMD-accelerated hashing helpers.
  .
  Pulls in C sources (@cbits\/fast_decode.c@, @cbits\/fast_scan.c@,
  @cbits\/wireform_hash_simd.c@) and the vendored @simde@ headers.
  Contains no format-specific code.
homepage: https://github.com/iand675/wireform-
bug-reports: https://github.com/iand675/wireform-/issues
license: BSD-3-Clause
license-file: LICENSE
author: Ian Duncan
maintainer: ian@iankduncan.com
copyright: 2026 Ian Duncan
category: Data, Codec, FFI
build-type: Simple
tested-with: GHC == 9.6.4, GHC == 9.8.4
extra-source-files:
  cbits/*.c
  include/**/*.h
extra-doc-files:
  CHANGELOG.md
  README.md

source-repository head
  type:     git
  location: https://github.com/iand675/wireform-

common defaults
  default-language: GHC2021
  ghc-options:
    -Wall
    -Wcompat
    -Widentities
    -Wincomplete-record-updates
    -Wincomplete-uni-patterns
    -Wpartial-fields
    -Wredundant-constraints
    -O2
  default-extensions:
    StrictData
    DerivingStrategies
    DeriveGeneric
    DeriveAnyClass
    OverloadedStrings
    LambdaCase
    BlockArguments

library
  import: defaults
  hs-source-dirs: src
  exposed-modules:
    -- Existing builder modules
    Wireform.Builder
    Wireform.Builder.FastBuilder
    Wireform.Builder.Internal.Prim
    Wireform.Builder.Unsafe
    Wireform.FFI
    Wireform.Encode.Direct
    Wireform.Hash
    Wireform.Base64

    -- Magic ring
    Wireform.Ring
    Wireform.Ring.Internal
    Wireform.Ring.Pool

    -- Transport abstraction (symmetric send / receive)
    Wireform.Transport
    Wireform.Transport.Receive
    Wireform.Transport.Send
    Wireform.Transport.Config
    Wireform.Transport.Capabilities

    -- Parser
    Wireform.Parser
    Wireform.Parser.Internal
    Wireform.Parser.Stateful
    Wireform.Parser.Switch
    Wireform.Parser.Position
    Wireform.Parser.Mark
    Wireform.Parser.Error

    -- Driver
    Wireform.Parser.Driver

    -- External-parser adapter
    Wireform.Parser.Adapter

  c-sources: cbits/fast_decode.c
             cbits/fast_scan.c
             cbits/wireform_hash_simd.c
             cbits/base64.c
             cbits/fast_rng.c
  include-dirs: include/simde
                include
  cc-options: -O3

  if os(linux)
    c-sources: cbits/magic_ring_linux.c
  if os(darwin) || os(freebsd) || os(netbsd) || os(openbsd)
    c-sources: cbits/magic_ring_posix.c
  if os(windows)
    c-sources: cbits/magic_ring_windows.c
    extra-libraries: kernel32

  build-depends:
    base >= 4.18 && < 5,
    bytestring >= 0.11 && < 0.13,
    containers,
    ghc-prim,
    template-haskell,
    text >= 2.0 && < 2.2,
    vector >= 0.13 && < 0.14

test-suite wireform-core-test
  import: defaults
  type: exitcode-stdio-1.0
  hs-source-dirs: test
  main-is: Spec.hs
  other-modules:
    Wireform.Ring.Test
    Wireform.Parser.Test
    Wireform.Transport.SendTest
    Wireform.Base64.Test
  build-depends:
    base,
    bytestring,
    wireform-core,
    sydtest,
    QuickCheck

benchmark parser-bench
  import: defaults
  type: exitcode-stdio-1.0
  hs-source-dirs: bench
  main-is: ParserBench.hs
  other-modules:
    Common
    WFBasic
    FPBasic
  ghc-options: -O2 -rtsopts -threaded
  build-depends:
    base,
    bytestring,
    wireform-core,
    flatparse >= 0.5 && < 0.6,
    criterion >= 1.5 && < 1.7

benchmark send-builder-bench
  import: defaults
  type: exitcode-stdio-1.0
  hs-source-dirs: bench
  main-is: SendBuilderBench.hs
  ghc-options: -O2 -rtsopts -threaded
  build-depends:
    base,
    bytestring,
    wireform-core,
    criterion >= 1.5 && < 1.7