| Crates.io | x12-stream-parser |
| lib.rs | x12-stream-parser |
| version | 0.1.0 |
| created_at | 2025-04-03 17:17:08.869232+00 |
| updated_at | 2025-04-03 17:17:08.869232+00 |
| description | Low-level, iterator-based X12 EDI stream parser. |
| homepage | |
| repository | https://github.com/copyleftdev/x12-stream-parser |
| max_upload_size | |
| id | 1618697 |
| size | 70,694 |
A high-performance, low-level, iterator-based X12 EDI stream parser for Rust.
Add this to your Cargo.toml:
[dependencies]
x12-stream-parser = "0.1.0"
use x12_stream_parser::{Parser, Delimiters};
fn main() {
// Example X12 data with standard delimiters
let data = b"ISA*00* *00* *ZZ*SENDER *ZZ*RECEIVER *210101*1030*^*00501*000000001*0*P*>~GS*PO*SENDER*RECEIVER*20210101*1030*1*X*005010~ST*850*0001~BEG*00*SA*123456**20210101~N1*BY*BUYER NAME~N1*ST*SHIP TO NAME~CTT*1~SE*6*0001~GE*1*1~IEA*1*000000001~";
// Create a parser with standard X12 delimiters
let delimiters = Delimiters::new(b'~', b'*', b':');
let parser = Parser::new(data, delimiters);
// Iterate through the segments
for result in parser {
match result {
Ok(segment) => {
println!("Segment ID: {}", String::from_utf8_lossy(segment.id()));
// Print each element in the segment
for (i, element) in segment.elements().enumerate() {
println!(" Element {}: {}", i, String::from_utf8_lossy(element));
}
},
Err(e) => {
eprintln!("Error parsing segment: {:?}", e);
break;
}
}
}
}
The library is designed with performance in mind:
You can customize the parser with different delimiters:
// Using non-standard delimiters
let custom_delimiters = Delimiters::new(b'|', b'^', b'&');
let parser = Parser::new(data, custom_delimiters);
Licensed under either of:
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.