# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
#
# When uploading crates to the registry Cargo will automatically
# "normalize" Cargo.toml files for maximal compatibility
# with all versions of Cargo and also rewrite `path` dependencies
# to registry (e.g., crates.io) dependencies.
#
# If you are reading this file be aware that the original Cargo.toml
# will likely look very different (and much more reasonable).
# See Cargo.toml.orig for the original contents.

[package]
edition = "2024"
name = "mfsk-core"
version = "0.5.9"
build = false
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Pure-Rust WSJT-family decoders and synthesisers (FT8 FT4 FST4 WSPR JT9 JT65 Q65) behind a zero-cost Protocol trait. Host (rustfft) or no_std embedded targets (ESP32-S3, RP2350, Cortex-M) via a pluggable FFT backend; optional fixed-point hot path for FPU-less MCUs."
readme = "README.md"
keywords = [
    "wsjt",
    "ft8",
    "q65",
    "amateur-radio",
    "embedded",
]
categories = [
    "science",
    "encoding",
    "multimedia::audio",
    "embedded",
    "no-std",
]
license = "GPL-3.0-or-later"
repository = "https://github.com/jl1nie/mfsk-core"
resolver = "2"

[package.metadata.docs.rs]
all-features = true
rustdoc-args = [
    "--cfg",
    "docsrs",
]

[features]
alloc = []
default = [
    "std",
    "ft8",
    "ft4",
    "parallel",
    "fft-rustfft",
]
fft-extern = ["alloc"]
fft-rustfft = [
    "std",
    "dep:rustfft",
]
fixed-point = []
fst4 = ["fft-rustfft"]
ft4 = []
ft8 = []
full = [
    "std",
    "fft-rustfft",
    "ft8",
    "ft4",
    "fst4",
    "wspr",
    "jt9",
    "jt65",
    "q65",
    "packet-bytes",
    "uvpacket",
]
jt65 = ["fft-rustfft"]
jt9 = ["fft-rustfft"]
nstep-half = []
packet-bytes = []
parallel = [
    "std",
    "dep:rayon",
]
profile-coarse = ["std"]
q65 = ["fft-rustfft"]
std = ["alloc"]
uvpacket = ["fst4"]
wspr = []

[lib]
name = "mfsk_core"
path = "src/lib.rs"

[[example]]
name = "uvpacket_samples"
path = "examples/uvpacket_samples.rs"

[[test]]
name = "fst4_wsjtx_samples"
path = "tests/fst4_wsjtx_samples.rs"

[[test]]
name = "ft4_diag_low_snr"
path = "tests/ft4_diag_low_snr.rs"

[[test]]
name = "ft4_roundtrip"
path = "tests/ft4_roundtrip.rs"

[[test]]
name = "ft4_snr_sweep"
path = "tests/ft4_snr_sweep.rs"

[[test]]
name = "ft4_timing_budget"
path = "tests/ft4_timing_budget.rs"

[[test]]
name = "ft4_wsjtx_samples"
path = "tests/ft4_wsjtx_samples.rs"

[[test]]
name = "ft8_coarse_sync_concurrent"
path = "tests/ft8_coarse_sync_concurrent.rs"

[[test]]
name = "ft8_decode_block_coarse_diag"
path = "tests/ft8_decode_block_coarse_diag.rs"

[[test]]
name = "ft8_decode_block_depth_sweep"
path = "tests/ft8_decode_block_depth_sweep.rs"

[[test]]
name = "ft8_decode_block_pass1_sweep"
path = "tests/ft8_decode_block_pass1_sweep.rs"

[[test]]
name = "ft8_decode_block_real_qso"
path = "tests/ft8_decode_block_real_qso.rs"

[[test]]
name = "ft8_decode_block_snr_sweep"
path = "tests/ft8_decode_block_snr_sweep.rs"

[[test]]
name = "ft8_protocol_trait"
path = "tests/ft8_protocol_trait.rs"

[[test]]
name = "ft8_qso3_apoff_recall"
path = "tests/ft8_qso3_apoff_recall.rs"

[[test]]
name = "ft8_qso3_apon_recall"
path = "tests/ft8_qso3_apon_recall.rs"

[[test]]
name = "ft8_qso3_jtdx_recall"
path = "tests/ft8_qso3_jtdx_recall.rs"

[[test]]
name = "ft8_reference_suite_recall"
path = "tests/ft8_reference_suite_recall.rs"

[[test]]
name = "ft8_resample"
path = "tests/ft8_resample.rs"

[[test]]
name = "jt9_wsjtx_samples"
path = "tests/jt9_wsjtx_samples.rs"

[[test]]
name = "ldpc_min_sum"
path = "tests/ldpc_min_sum.rs"

[[test]]
name = "protocol_invariants"
path = "tests/protocol_invariants.rs"

[[test]]
name = "q65_ap_list"
path = "tests/q65_ap_list.rs"

[[test]]
name = "q65_ap_sweep"
path = "tests/q65_ap_sweep.rs"

[[test]]
name = "q65_eme_submodes"
path = "tests/q65_eme_submodes.rs"

[[test]]
name = "q65_fast_fading"
path = "tests/q65_fast_fading.rs"

[[test]]
name = "q65_roundtrip"
path = "tests/q65_roundtrip.rs"

[[test]]
name = "q65_snr_sweep"
path = "tests/q65_snr_sweep.rs"

[[test]]
name = "q65_wsjtx_samples"
path = "tests/q65_wsjtx_samples.rs"

[[test]]
name = "uvpacket_fm_channel"
path = "tests/uvpacket_fm_channel.rs"

[[test]]
name = "uvpacket_ldpc_direct"
path = "tests/uvpacket_ldpc_direct.rs"

[[test]]
name = "uvpacket_multichannel"
path = "tests/uvpacket_multichannel.rs"

[[test]]
name = "uvpacket_per_modes_sweep"
path = "tests/uvpacket_per_modes_sweep.rs"

[[test]]
name = "uvpacket_pi4_dqpsk_eq"
path = "tests/uvpacket_pi4_dqpsk_eq.rs"

[[test]]
name = "uvpacket_snr_calibration"
path = "tests/uvpacket_snr_calibration.rs"

[[test]]
name = "uvpacket_ssb_channel"
path = "tests/uvpacket_ssb_channel.rs"

[[test]]
name = "wspr_wsjtx_samples"
path = "tests/wspr_wsjtx_samples.rs"

[dependencies.crc]
version = "3"
default-features = false

[dependencies.num-complex]
version = "0.4"
features = ["libm"]
default-features = false

[dependencies.num-traits]
version = "0.2"
features = ["libm"]
default-features = false

[dependencies.rayon]
version = "1"
optional = true

[dependencies.rustfft]
version = "6"
optional = true

[lints.rust.unexpected_cfgs]
level = "warn"
priority = 0
check-cfg = ['cfg(feature, values("std","alloc","ft8","ft4","fst4","wspr","jt9","jt65","q65","packet-bytes","uvpacket","parallel","full","fft-rustfft","fft-extern","fixed-point","profile-coarse","nstep-half"))']
