1 unstable release
new 0.1.0 | Apr 3, 2025 |
---|
#4 in #delimiter
20KB
277 lines
x12-delimiters
A high-performance, zero-copy Rust library for handling X12 EDI delimiters.
Features
- ⚡ Fast: Optimized for performance with benchmarked operations
- 🛡️ Safe: Fully tested with unit tests and property-based tests
- 🧩 Simple API: Easy-to-use interface for working with X12 delimiters
- 📦 No dependencies: Zero runtime dependencies
- 📄 Well-documented: Comprehensive documentation
- 🔍 Validated: Proper validation of delimiter rules
Installation
Add this to your Cargo.toml
:
[dependencies]
x12-delimiters = "0.1.0"
Usage
use x12_delimiters::Delimiters;
fn main() {
// Use default X12 delimiters (segment: ~, element: *, sub-element: :)
let standard_delimiters = Delimiters::default();
// Create custom delimiters
let custom_delimiters = Delimiters::new(b'!', b'^', b'&');
// Extract delimiters from an ISA segment
let isa_segment = b"ISA*00* *00* *ZZ*SENDERID *ZZ*RECEIVERID *250403*0856*U*00501*000000001*0*P*:~";
let parsed_delimiters = Delimiters::from_isa(isa_segment).unwrap();
// Access delimiter values
println!("Segment terminator: {}", parsed_delimiters.segment_terminator() as char);
println!("Element separator: {}", parsed_delimiters.element_separator() as char);
println!("Sub-element separator: {}", parsed_delimiters.sub_element_separator() as char);
// Validate delimiter uniqueness
assert!(parsed_delimiters.are_valid());
}
Performance
The library is optimized for performance:
Operation | Performance |
---|---|
Delimiters::default | ~898 ps |
Delimiters::new | ~5.83 ns |
from_isa_standard | ~1.13 ns |
from_isa_alternative | ~1.13 ns |
delimiters_getters | ~673 ps |
are_valid | ~447 ps |
X12 EDI Format
X12 is a standard format for electronic data interchange (EDI) documents. In X12, data is organized hierarchically:
- Interchange - Contains one or more functional groups
- Functional Group - Contains one or more transaction sets
- Transaction Set - Contains segments of related data
- Segment - Contains logically related elements
- Element - Contains a single piece of data
- Sub-element - Subdivisions of elements (if needed)
Delimiters define how these structures are separated in the data:
- Segment Terminator: Marks the end of a segment
- Element Separator: Separates elements within a segment
- Sub-element Separator: Separates sub-elements within an element
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under either of:
- Apache License, Version 2.0, (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.