pub struct Engine { /* private fields */ }Expand description
Parser and policy orchestration engine.
Implementations§
Source§impl Engine
impl Engine
Sourcepub fn new(policy: Policy) -> Self
pub fn new(policy: Policy) -> Self
Creates an engine with the provided policy.
Examples found in repository?
examples/process_file.rs (line 14)
7fn main() -> std::io::Result<()> {
8 let Some(path) = std::env::args().nth(1) else {
9 eprintln!("usage: process_file <packets.aprs>");
10 std::process::exit(2);
11 };
12
13 let input = read_all_with_limit(File::open(path)?, DEFAULT_TRANSPORT_READ_LIMIT)?;
14 let mut engine = Engine::new(Policy::strict());
15
16 for packet_bytes in LineTransport::new(&input).packets() {
17 match engine.process(packet_bytes) {
18 EngineResult::Accepted { packet } => println!("{}", packet.to_json()),
19 EngineResult::Rejected { reason, .. } => eprintln!("rejected: {}", reason.code()),
20 EngineResult::ParseError(error) => eprintln!("malformed: {}", error.code()),
21 }
22 }
23
24 Ok(())
25}More examples
examples/service_ingest.rs (line 7)
5fn main() -> Result<(), std::io::Error> {
6 let input = b"N0CALL>APRS:>service online\nN1CALL>APRS:~opaque\nbad packet\n";
7 let mut engine = Engine::new(Policy::strict());
8
9 let packets = LineTransport::new(input).packets_with_limit(MAX_PACKET_LEN)?;
10
11 for packet in packets {
12 match engine.process_event(packet) {
13 EngineEvent::Accepted(event) => {
14 println!(
15 "event={} semantic={}",
16 event.kind().code(),
17 event.packet.summary().semantic
18 );
19 }
20 EngineEvent::Rejected(event) => {
21 println!(
22 "event={} code={} remediation={}",
23 event.kind().code(),
24 event.diagnostic.code,
25 event.diagnostic.remediation
26 );
27 }
28 EngineEvent::Malformed(event) => {
29 println!(
30 "event={} code={} raw_len={} raw_truncated={} remediation={}",
31 event.kind().code(),
32 event.diagnostic.code,
33 event.raw.len(),
34 event.raw_truncated,
35 event.diagnostic.remediation
36 );
37 }
38 }
39 }
40
41 let counters = engine.counters();
42 println!(
43 "summary accepted={} rejected={} malformed={}",
44 counters.accepted, counters.rejected, counters.malformed
45 );
46
47 Ok(())
48}Sourcepub fn process(&mut self, input: &[u8]) -> EngineResult
pub fn process(&mut self, input: &[u8]) -> EngineResult
Processes one packet through codec, semantics, and policy.
Examples found in repository?
examples/process_file.rs (line 17)
7fn main() -> std::io::Result<()> {
8 let Some(path) = std::env::args().nth(1) else {
9 eprintln!("usage: process_file <packets.aprs>");
10 std::process::exit(2);
11 };
12
13 let input = read_all_with_limit(File::open(path)?, DEFAULT_TRANSPORT_READ_LIMIT)?;
14 let mut engine = Engine::new(Policy::strict());
15
16 for packet_bytes in LineTransport::new(&input).packets() {
17 match engine.process(packet_bytes) {
18 EngineResult::Accepted { packet } => println!("{}", packet.to_json()),
19 EngineResult::Rejected { reason, .. } => eprintln!("rejected: {}", reason.code()),
20 EngineResult::ParseError(error) => eprintln!("malformed: {}", error.code()),
21 }
22 }
23
24 Ok(())
25}Sourcepub fn process_event(&mut self, input: &[u8]) -> EngineEvent
pub fn process_event(&mut self, input: &[u8]) -> EngineEvent
Processes one packet and returns a stable observability event.
Examples found in repository?
examples/service_ingest.rs (line 12)
5fn main() -> Result<(), std::io::Error> {
6 let input = b"N0CALL>APRS:>service online\nN1CALL>APRS:~opaque\nbad packet\n";
7 let mut engine = Engine::new(Policy::strict());
8
9 let packets = LineTransport::new(input).packets_with_limit(MAX_PACKET_LEN)?;
10
11 for packet in packets {
12 match engine.process_event(packet) {
13 EngineEvent::Accepted(event) => {
14 println!(
15 "event={} semantic={}",
16 event.kind().code(),
17 event.packet.summary().semantic
18 );
19 }
20 EngineEvent::Rejected(event) => {
21 println!(
22 "event={} code={} remediation={}",
23 event.kind().code(),
24 event.diagnostic.code,
25 event.diagnostic.remediation
26 );
27 }
28 EngineEvent::Malformed(event) => {
29 println!(
30 "event={} code={} raw_len={} raw_truncated={} remediation={}",
31 event.kind().code(),
32 event.diagnostic.code,
33 event.raw.len(),
34 event.raw_truncated,
35 event.diagnostic.remediation
36 );
37 }
38 }
39 }
40
41 let counters = engine.counters();
42 println!(
43 "summary accepted={} rejected={} malformed={}",
44 counters.accepted, counters.rejected, counters.malformed
45 );
46
47 Ok(())
48}Sourcepub fn process_packets<I, P>(&mut self, packets: I) -> Vec<EngineResult>
pub fn process_packets<I, P>(&mut self, packets: I) -> Vec<EngineResult>
Processes a caller-provided packet batch in order.
Sourcepub fn process_source<S>(
&mut self,
source: &mut S,
) -> Result<Vec<EngineResult>, S::Error>where
S: PacketSource,
pub fn process_source<S>(
&mut self,
source: &mut S,
) -> Result<Vec<EngineResult>, S::Error>where
S: PacketSource,
Reads one bounded batch from a packet source and processes it in order.
Sourcepub fn counters(&self) -> Counters
pub fn counters(&self) -> Counters
Returns engine counters.
Examples found in repository?
examples/service_ingest.rs (line 41)
5fn main() -> Result<(), std::io::Error> {
6 let input = b"N0CALL>APRS:>service online\nN1CALL>APRS:~opaque\nbad packet\n";
7 let mut engine = Engine::new(Policy::strict());
8
9 let packets = LineTransport::new(input).packets_with_limit(MAX_PACKET_LEN)?;
10
11 for packet in packets {
12 match engine.process_event(packet) {
13 EngineEvent::Accepted(event) => {
14 println!(
15 "event={} semantic={}",
16 event.kind().code(),
17 event.packet.summary().semantic
18 );
19 }
20 EngineEvent::Rejected(event) => {
21 println!(
22 "event={} code={} remediation={}",
23 event.kind().code(),
24 event.diagnostic.code,
25 event.diagnostic.remediation
26 );
27 }
28 EngineEvent::Malformed(event) => {
29 println!(
30 "event={} code={} raw_len={} raw_truncated={} remediation={}",
31 event.kind().code(),
32 event.diagnostic.code,
33 event.raw.len(),
34 event.raw_truncated,
35 event.diagnostic.remediation
36 );
37 }
38 }
39 }
40
41 let counters = engine.counters();
42 println!(
43 "summary accepted={} rejected={} malformed={}",
44 counters.accepted, counters.rejected, counters.malformed
45 );
46
47 Ok(())
48}Trait Implementations§
impl Eq for Engine
impl StructuralPartialEq for Engine
Auto Trait Implementations§
impl Freeze for Engine
impl RefUnwindSafe for Engine
impl Send for Engine
impl Sync for Engine
impl Unpin for Engine
impl UnsafeUnpin for Engine
impl UnwindSafe for Engine
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more