x12-types 0.9.1

Bindings for the ASC X12 EDI definitions
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
use crate::v004010::*;

#[test]
fn parse_315() {
    let x = Transmission {
        isa: ISA {
            _01: "00".to_string(),
            _02: "          ".to_string(),
            _03: "00".to_string(),
            _04: "          ".to_string(),
            _05: "ZZ".to_string(),
            _06: "SOURCE         ".to_string(),
            _07: "ZZ".to_string(),
            _08: "TARGET         ".to_string(),
            _09: "220524".to_string(),
            _10: "1120".to_string(),
            _11: "U".to_string(),
            _12: "00401".to_string(),
            _13: "000000001".to_string(),
            _14: "0".to_string(),
            _15: "P".to_string(),
            _16: ">".to_string(),
            ..Default::default()
        },
        functional_group: vec![FunctionalGroup {
            gs: GS {
                _01: "QO".to_string(),
                _02: "SOURCE".to_string(),
                _03: "TARGET".to_string(),
                _04: "20220524".to_string(),
                _05: "1600".to_string(),
                _06: "1".to_string(),
                _07: "X".to_string(),
                _08: "004010".to_string(),
            },
            segments: vec![_315 {
                st: ST {
                    _01: "315".to_string(),
                    _02: "00001".to_string(),
                },
                b4: B4 {
                    _03: Some("VA".to_string()),
                    _04: Some("20220901".to_string()),
                    _05: Some("0807".to_string()),
                    _07: Some("GMCU".to_string()),
                    _08: Some("609413".to_string()),
                    _09: Some("E".to_string()),
                    _11: Some("LOCKBOURNE".to_string()),
                    _12: Some("CI".to_string()),
                    _13: Some("7".to_string()),
                    ..Default::default()
                },
                n9: vec![
                    N9 {
                        _01: "BM".to_string(),
                        _02: "21001ASK5V9U".to_string(),
                        ..Default::default()
                    },
                    N9 {
                        _01: "BN".to_string(),
                        _02: "1NAN910141".to_string(),
                        ..Default::default()
                    },
                    N9 {
                        _01: "EQ".to_string(),
                        _02: "GMCU6094137".to_string(),
                        ..Default::default()
                    },
                ],
                q2: Some(Q2 {
                    _01: "9330141".to_string(),
                    _09: Some("202N".to_string()),
                    _12: Some("L".to_string()),
                    _13: Some("MARIM".to_string()),
                    ..Default::default()
                }),
                sg: vec![],
                loop_r4: vec![
                    _315LoopR4 {
                        r4: R4 {
                            _01: "L".to_string(),
                            _02: Some("UN".to_string()),
                            _03: Some("USMEM".to_string()),
                            _04: Some("BNSF MEMPHIS RAMP".to_string()),
                            _05: Some("US".to_string()),
                            _08: Some("US".to_string()),
                            ..Default::default()
                        },
                        dtm: vec![],
                    },
                    _315LoopR4 {
                        r4: R4 {
                            _01: "E".to_string(),
                            _02: Some("UN".to_string()),
                            _03: Some("USDAL".to_string()),
                            _04: Some("BNSF ALLIANCE RAMP".to_string()),
                            _05: Some("US".to_string()),
                            _08: Some("US".to_string()),
                            ..Default::default()
                        },
                        dtm: vec![],
                    },
                ],
                v9: None,
                se: SE {
                    _01: "9".to_string(),
                    _02: "00001".to_string(),
                },
            }],
            ge: GE {
                _01: "1".to_string(),
                _02: "1".to_string(),
            },
        }],
        iea: IEA {
            _01: "1".to_string(),
            _02: "000000001".to_string(),
        },
    };
    let str = format!("{x}");
    println!("{str}");
    // let obj: Transmission<_315> = serde_x12::from_str(&new_input).unwrap();
    // println!("{:?}", obj);
    // assert_eq!(x, obj);
}

#[test]
fn test_315() {
    let x = Transmission {
        isa: ISA {
            _01: "00".to_string(),
            _02: "          ".to_string(),
            _03: "00".to_string(),
            _04: "          ".to_string(),
            _05: "ZZ".to_string(),
            _06: "SOURCE         ".to_string(),
            _07: "ZZ".to_string(),
            _08: "TARGET         ".to_string(),
            _09: "220524".to_string(),
            _10: "1120".to_string(),
            _11: "U".to_string(),
            _12: "00401".to_string(),
            _13: "000000001".to_string(),
            _14: "0".to_string(),
            _15: "P".to_string(),
            _16: ">".to_string(),
        },
        functional_group: vec![FunctionalGroup {
            gs: GS {
                _01: "QO".to_string(),
                _02: "SOURCE".to_string(),
                _03: "TARGET".to_string(),
                _04: "20220524".to_string(),
                _05: "1600".to_string(),
                _06: "1".to_string(),
                _07: "X".to_string(),
                _08: "004010".to_string(),
            },
            segments: vec![_315 {
                st: ST {
                    _01: "315".to_string(),
                    _02: "00001".to_string(),
                },
                b4: B4 {
                    _01: None,
                    _02: None,
                    _03: Some("VA".to_string()),
                    _04: Some("20220901".to_string()),
                    _05: Some("0807".to_string()),
                    _06: Some("".to_string()),
                    _07: Some("GMCU".to_string()),
                    _08: Some("609413".to_string()),
                    _09: Some("E".to_string()),
                    _10: Some("".to_string()),
                    _11: Some("LOCKBOURNE".to_string()),
                    _12: Some("CI".to_string()),
                    _13: Some("7".to_string()),
                },
                n9: vec![
                    N9 {
                        _01: "BM".to_string(),
                        _02: "21001ASK5V9U".to_string(),
                        _03: None,
                        _04: None,
                        _05: None,
                        _06: None,
                        _07: None,
                    },
                    N9 {
                        _01: "BN".to_string(),
                        _02: "1NAN910141".to_string(),
                        _03: None,
                        _04: None,
                        _05: None,
                        _06: None,
                        _07: None,
                    },
                    N9 {
                        _01: "EQ".to_string(),
                        _02: "GMCU6094137".to_string(),
                        _03: None,
                        _04: None,
                        _05: None,
                        _06: None,
                        _07: None,
                    },
                ],
                q2: Some(Q2 {
                    _01: "9330141".to_string(),
                    _02: None,
                    _03: None,
                    _04: None,
                    _05: None,
                    _06: None,
                    _07: None,
                    _08: None,
                    _09: Some("202N".to_string()),
                    _10: None,
                    _11: None,
                    _12: Some("L".to_string()),
                    _13: Some("MARIM".to_string()),
                    _14: None,
                    _15: None,
                    _16: None,
                }),
                sg: vec![],
                loop_r4: vec![
                    _315LoopR4 {
                        r4: R4 {
                            _01: "L".to_string(),
                            _02: Some("UN".to_string()),
                            _03: Some("USMEM".to_string()),
                            _04: Some("BNSF MEMPHIS RAMP".to_string()),
                            _05: Some("US".to_string()),
                            _06: Some("".to_string()),
                            _07: Some("".to_string()),
                            _08: Some("US".to_string()),
                        },
                        dtm: vec![],
                    },
                    _315LoopR4 {
                        r4: R4 {
                            _01: "E".to_string(),
                            _02: Some("UN".to_string()),
                            _03: Some("USDAL".to_string()),
                            _04: Some("BNSF ALLIANCE RAMP".to_string()),
                            _05: Some("US".to_string()),
                            _06: Some("".to_string()),
                            _07: Some("".to_string()),
                            _08: Some("US".to_string()),
                        },
                        dtm: vec![],
                    },
                ],
                v9: None,
                se: SE {
                    _01: "9".to_string(),
                    _02: "00001".to_string(),
                },
            }],
            ge: GE {
                _01: "1".to_string(),
                _02: "1".to_string(),
            },
        }],
        iea: IEA {
            _01: "1".to_string(),
            _02: "000000001".to_string(),
        },
    };
    let serialized = format!("{x}");
    let original = r#"ISA*00*          *00*          *ZZ*SOURCE         *ZZ*TARGET         *220524*1120*U*00401*000000001*0*P*>~
GS*QO*SOURCE*TARGET*20220524*1600*1*X*004010~
ST*315*00001~
B4***VA*20220901*0807**GMCU*609413*E**LOCKBOURNE*CI*7~
N9*BM*21001ASK5V9U~
N9*BN*1NAN910141~
N9*EQ*GMCU6094137~
Q2*9330141********202N***L*MARIM~
R4*L*UN*USMEM*BNSF MEMPHIS RAMP*US***US~
R4*E*UN*USDAL*BNSF ALLIANCE RAMP*US***US~
SE*9*00001~
GE*1*1~
IEA*1*000000001~
"#;
    assert_eq!(serialized, original);
}

#[test]
fn test_315_defaults() {
    let x = Transmission {
        isa: ISA {
            _01: "00".to_string(),
            _02: "          ".to_string(),
            _03: "00".to_string(),
            _04: "          ".to_string(),
            _05: "ZZ".to_string(),
            _06: "SOURCE         ".to_string(),
            _07: "ZZ".to_string(),
            _08: "TARGET         ".to_string(),
            _09: "220524".to_string(),
            _10: "1120".to_string(),
            _11: "U".to_string(),
            _12: "00401".to_string(),
            _13: "000000001".to_string(),
            _14: "0".to_string(),
            _15: "P".to_string(),
            _16: ">".to_string(),
            ..Default::default()
        },
        functional_group: vec![FunctionalGroup {
            gs: GS {
                _01: "QO".to_string(),
                _02: "SOURCE".to_string(),
                _03: "TARGET".to_string(),
                _04: "20220524".to_string(),
                _05: "1600".to_string(),
                _06: "1".to_string(),
                _07: "X".to_string(),
                _08: "004010".to_string(),
            },
            segments: vec![_315 {
                st: ST {
                    _01: "315".to_string(),
                    _02: "00001".to_string(),
                },
                b4: B4 {
                    _03: Some("VA".to_string()),
                    _04: Some("20220901".to_string()),
                    _05: Some("0807".to_string()),
                    _06: Some("".to_string()),
                    _07: Some("GMCU".to_string()),
                    _08: Some("609413".to_string()),
                    _09: Some("E".to_string()),
                    _11: Some("LOCKBOURNE".to_string()),
                    _12: Some("CI".to_string()),
                    _13: Some("7".to_string()),
                    ..Default::default()
                },
                n9: vec![
                    N9 {
                        _01: "BM".to_string(),
                        _02: "21001ASK5V9U".to_string(),
                        ..Default::default()
                    },
                    N9 {
                        _01: "BN".to_string(),
                        _02: "1NAN910141".to_string(),
                        ..Default::default()
                    },
                    N9 {
                        _01: "EQ".to_string(),
                        _02: "GMCU6094137".to_string(),
                        ..Default::default()
                    },
                ],
                q2: Some(Q2 {
                    _01: "9330141".to_string(),
                    _09: Some("202N".to_string()),
                    _12: Some("L".to_string()),
                    _13: Some("MARIM".to_string()),
                    ..Default::default()
                }),
                sg: vec![],
                loop_r4: vec![
                    _315LoopR4 {
                        r4: R4 {
                            _01: "L".to_string(),
                            _02: Some("UN".to_string()),
                            _03: Some("USMEM".to_string()),
                            _04: Some("BNSF MEMPHIS RAMP".to_string()),
                            _05: Some("US".to_string()),
                            _08: Some("US".to_string()),
                            ..Default::default()
                        },
                        dtm: vec![],
                    },
                    _315LoopR4 {
                        r4: R4 {
                            _01: "E".to_string(),
                            _02: Some("UN".to_string()),
                            _03: Some("USDAL".to_string()),
                            _04: Some("BNSF ALLIANCE RAMP".to_string()),
                            _05: Some("US".to_string()),
                            _08: Some("US".to_string()),
                            ..Default::default()
                        },
                        dtm: vec![],
                    },
                ],
                v9: None,
                se: SE {
                    _01: "9".to_string(),
                    _02: "00001".to_string(),
                },
            }],
            ge: GE {
                _01: "1".to_string(),
                _02: "1".to_string(),
            },
        }],
        iea: IEA {
            _01: "1".to_string(),
            _02: "000000001".to_string(),
        },
    };
    let serialized = format!("{x}");
    let original = r#"ISA*00*          *00*          *ZZ*SOURCE         *ZZ*TARGET         *220524*1120*U*00401*000000001*0*P*>~
GS*QO*SOURCE*TARGET*20220524*1600*1*X*004010~
ST*315*00001~
B4***VA*20220901*0807**GMCU*609413*E**LOCKBOURNE*CI*7~
N9*BM*21001ASK5V9U~
N9*BN*1NAN910141~
N9*EQ*GMCU6094137~
Q2*9330141********202N***L*MARIM~
R4*L*UN*USMEM*BNSF MEMPHIS RAMP*US***US~
R4*E*UN*USDAL*BNSF ALLIANCE RAMP*US***US~
SE*9*00001~
GE*1*1~
IEA*1*000000001~
"#;
    assert_eq!(serialized, original);
}

#[test]
fn test_2() {
    let str = r#"ISA*00*          *00*          *ZZ*XXXX           *ZZ*XXXX           *221121*1110*U*00401*012359227*0*P*>~GS*QO*XXXX*XXXX*20221121*1110*12359218*X*004010~ST*315*33366799~B4***VA*20221114*1450**TCKU*724880*L**MAPTM*UN*7~N9*BM*52BUE013415X~N9*BN*2BUE013415~N9*EQ*TCKU7248999~Q2*9633999********242N***L*CAP SAN MALEAS~R4*L*UN*ARBUE*TERMINAL 4*AR~DTM*140*20221025*0255*LT~R4*T*UN*MAPTM*APM TERMINALS TANGER MED*MA~DTM*140*20221114*1450*LT~R4*D*UN*DEHAM*EUROGATE CONTAINER TERMI*DE~DTM*139*20221130*2300*LT~SE*13*33366742~GE*1*12359218~IEA*1*012359227~"#;
    let (rest, obj) = Transmission::<_315>::parse(str).unwrap();
    println!("{obj:?}");
    assert!(rest.is_empty());
}

#[test]
fn test_3() {
    let str = r#"ISA*00*          *00*          *ZZ*HAMSUD         *ZZ*GSCL           *221121*0751*U*00401*000720857*0*P*>~GS*QO*HAMSUD*GSCL*20221121*0751*720857*X*004010~ST*315*1883403~B4***UV*20221121*0124**MRSU*437163*L*45G1*MXZLO*UN*9~N9*4F*800992458*SAMSUNG SDS~N9*BM*SUDUN2SL008733AF~N9*BN*2SOL008733~N9*EQ*MRSU4371639~N9*SCA*SUDU~N9*SN*5512862~N9*WU*MAERSK STEPNICA~Q2*9352004********242S***L*MAERSK STEPNICA~R4*L*UN*KRPUS*PUSAN NEWPORT CONTAINER *KR~DTM*140*20221103*125500*LT~R4*D*UN*MXZLO*SSA MEXICO HOLDINGS*MX~DTM*140*20221120*230000*LT~R4*E*UN*MXQRO*QUERETARO*MX***QU~DTM*139*20221125*230000*LT~R4*5*UN*MXZLO*MANZANILLO~DTM*140*20221121*012400*LT~SE*19*1883403~GE*1*720857~IEA*1*000720857~"#;
    let (rest, obj) = Transmission::<_315>::parse(str).unwrap();
    println!("{obj:?}");
    assert!(rest.is_empty());
}