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
//!
//! # Usage
//! 
//! ```rust
//! use serde::Serialize;
//! use chrono::prelude::*;
//! use flow_record::{Serializer, Record};
//! use flow_record_derive::Record;
//! 
//! #[derive(Serialize, Record)]
//! struct SampleStruct {
//!     int_value: u32,
//!     str_value: String,
//!     dtm_value: DateTime<Utc>
//! }
//! 
//! let sample_struct = SampleStruct {
//!     int_value: 42,
//!     str_value: "forty two".into(),
//!     dtm_value: Utc.with_ymd_and_hms(2020, 1, 1, 0, 0, 0).unwrap(),
//! };
//! 
//! let mut ser = Serializer::new(Vec::new());
//! ser.serialize(&sample_struct).unwrap();
//! 
//! let result = ser.into_inner();
//! assert_eq!(result, vec![
//!     // header length
//!     0x0,0x0,0x0,0xf,
//!     
//!     // header
//!     0xc4,0xd,0x52,0x45,0x43,0x4f,0x52,0x44,0x53,0x54,0x52,0x45,0x41,0x4d,0xa,
//!     
//!     // length of record descriptor
//!     0x0,0x0,0x0,0x4c,
//! 
//!     0xc7,0x49,0xe,      // ext 8 record of type 0x0e
//!         0x92,           // array of length 2
//!             0x2,        // 2 (record desciptor)
//!             0x92,       // array of length 2
//!                 0xac,   // string of length 12
//!                 // "SampleStruct"
//!                 0x53,0x61,0x6d,0x70,0x6c,0x65,0x53,0x74,0x72,0x75,0x63,0x74,
//!                 0x93,   // array of length 3
//!                     0x92,   // array of length 2
//!                         0xa6, // string of length 6
//!                             0x75,0x69,0x6e,0x74,0x33,0x32, // "uint32"
//!                         0xa9, // string of length 9
//!                             0x69,0x6e,0x74,0x5f,0x76,0x61,0x6c,0x75,0x65, // "int_value"
//!                     0x92,
//!                         0xa6, // string of length 6
//!                             0x73,0x74,0x72,0x69,0x6e,0x67,
//!                         0xa9,0x73,0x74,0x72,0x5f,0x76,0x61,0x6c,0x75,0x65,
//!                     0x92,
//!                         0xa8,
//!                             0x64,0x61,0x74,0x65,0x74,0x69,0x6d,0x65,
//!                         0xa9,
//!                             0x64,0x74,0x6d,0x5f,0x76,0x61,0x6c,0x75,0x65,
//!     0x0,0x0,0x0,0x3a, // length of record
//!     0xc7,0x37,0xe,
//!         0x92,
//!             0x1,
//!             0x92,
//!                 0x92,
//!                     0xac,
//!                         0x53,0x61,0x6d,0x70,0x6c,0x65,0x53,0x74,0x72,0x75,0x63,0x74,
//!                     0xce, // uint32
//!                         0x6,0xd6,0x49,0xca,
//!                     0x93, // array of length 3
//!                         0x2a,
//!                         0xa9,   // string of length 9
//!                             0x66,0x6f,0x72,0x74,0x79,0x20,0x74,0x77,0x6f,
//!                         0xb4,   // string of length 20
//!                                 // "2020-01-01T00:00:00Z"
//!                             0x32,0x30,0x32,0x30,0x2d,0x30,0x31,0x2d,0x30,0x31,0x54,0x30,0x30,0x3a,0x30,0x30,0x3a,0x30,0x30,0x5a,]);
//! ```
pub mod artifacts;
mod serializer;
mod record_pack_type;

pub use record_pack_type::*;
pub use serializer::DfirSerializer as Serializer;

pub use flow_record_common::*;