● Based on my research, here are the key features missing from the adif
crate compared to other ADIF parsers:
Missing Features in the adif Crate
1. ADX (XML) Format Support ❌
The adif crate only supports ADI (text-based) format. Other parsers
support ADX:
- adif-multitool (Go): Full ADX read/write support
- Dart adif package: Full ADX import/export (ADI support planned but not
yet implemented)
- hamutils (Python): Supports both ADI and ADX
- PyADIF-File (Python): ADX import/export with schema validation
2. Field Enumeration & Validation ❌
The adif crate doesn't validate field names or values against the ADIF
specification:
- Dart adif package: Enforces mode/band enumerations from ADIF 3.1.5 spec
- adif-multitool: Validates fields and can automatically fix formatting
errors
- ADIF spec: Defines standard fields, enumerations, and validation rules
that aren't enforced
3. Multiple Format Conversion ❌
The adif crate only handles ADIF. Other tools support multiple formats:
- adif-multitool: 6 formats (ADI, ADX, Cabrillo, CSV, JSON, TSV)
- Allows conversion between amateur radio formats beyond just ADIF
4. User-Defined Field Metadata ❌
The ADIF specification allows defining custom field types, ranges, and
enumerations via USERDEF headers:
- adif-multitool: Validates user-defined fields with
type/range/enumeration
- Dart adif package: Supports APP/user-defined fields with type
specifications
- adif crate: Parses any field name without metadata validation
5. Version-Specific Validation ❌
The adif crate is format-agnostic and doesn't enforce version-specific
rules:
- Different ADIF versions (1.0, 2.x, 3.0.x, 3.1.x) have different
fields/enumerations
- No deprecation handling (import-only fields that shouldn't be exported)
6. Geographic Coordinate Conversion ❌
- adif-multitool: Converts decimal coordinates to Maidenhead locator
format
- Useful for inferring grid squares from lat/lon data
7. More Advanced Transformations ❌
The adif crate has basic normalizers, but adif-multitool offers more:
- Infer band from frequency automatically
- Flatten comma-separated values into multiple records
- Complex conditional filtering with AND/OR logic
- Edit fields with conditional expressions
8. Cabrillo Contest Format Support ❌
- adif-multitool: Reads/writes Cabrillo contest logs with exchange field
mapping
9. Structured Export Formats ❌
- adif-multitool: JSON export with typed data (not just strings)
- CSV/TSV export with customizable delimiters
- The adif crate only writes ADI format
What the adif Crate Does Well ✅
To be fair, the adif crate excels in areas other parsers lack:
- Async streaming architecture: Memory-efficient processing of large files
- Type-safe parsing: Strong typing with 6 ADIF data types (many others
treat everything as strings)
- Exceptional test coverage: 100% code coverage with property-based
testing
- Flexible input handling: Handles partial data, leading text, chunked
input
- Production-grade error handling: Detailed position information for
debugging
Summary
The adif crate is a high-quality, type-safe, streaming parser focused on
doing ADI parsing extremely well. The main gaps compared to other parsers
are:
1. ADX support (most significant)
2. Field validation against ADIF spec
3. Multi-format conversion (CSV, JSON, etc.)
4. User-defined field metadata handling
If your use case only requires robust ADI parsing with type safety and
streaming performance, the adif crate is excellent. For broader format
support or strict spec validation, tools like adif-multitool would be
complementary.
Sources:
- https://github.com/flwyd/adif-multitool
- https://github.com/k0swe/adif-parser-ts
- https://pub.dev/packages/adif
- https://pypi.org/project/adif-io/
- https://github.com/Matir/adifparser
- https://www.adif.org/304/ADIF_304.htm
- https://adif.org/312/ADIF_312.htm
- https://pypi.org/project/hamutils/
- https://pypi.org/project/PyADIF-File/