| Crates.io | x12-delimiters |
| lib.rs | x12-delimiters |
| version | 0.1.0 |
| created_at | 2025-04-03 16:16:01.404656+00 |
| updated_at | 2025-04-03 16:16:01.404656+00 |
| description | Low-level handling of X12 EDI delimiters. |
| homepage | |
| repository | https://github.com/copyleftdev/x12-delimiters |
| max_upload_size | |
| id | 1618522 |
| size | 59,130 |
A high-performance, zero-copy Rust library for handling X12 EDI delimiters.
Add this to your Cargo.toml:
[dependencies]
x12-delimiters = "0.1.0"
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());
}
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 is a standard format for electronic data interchange (EDI) documents. In X12, data is organized hierarchically:
Delimiters define how these structures are separated in the data:
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under either of:
at your option.