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(packet) {
13 EngineResult::Accepted { packet } => {
14 println!("accepted semantic={}", packet.summary().semantic);
15 }
16 EngineResult::Rejected { reason, .. } => {
17 let diagnostic = reason.diagnostic();
18 println!(
19 "rejected code={} remediation={}",
20 diagnostic.code, diagnostic.remediation
21 );
22 }
23 EngineResult::ParseError(error) => {
24 let diagnostic = error.diagnostic();
25 println!(
26 "malformed code={} remediation={}",
27 diagnostic.code, diagnostic.remediation
28 );
29 }
30 }
31 }
32
33 let counters = engine.counters();
34 println!(
35 "summary accepted={} rejected={} malformed={}",
36 counters.accepted, counters.rejected, counters.malformed
37 );
38
39 Ok(())
40}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}More examples
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(packet) {
13 EngineResult::Accepted { packet } => {
14 println!("accepted semantic={}", packet.summary().semantic);
15 }
16 EngineResult::Rejected { reason, .. } => {
17 let diagnostic = reason.diagnostic();
18 println!(
19 "rejected code={} remediation={}",
20 diagnostic.code, diagnostic.remediation
21 );
22 }
23 EngineResult::ParseError(error) => {
24 let diagnostic = error.diagnostic();
25 println!(
26 "malformed code={} remediation={}",
27 diagnostic.code, diagnostic.remediation
28 );
29 }
30 }
31 }
32
33 let counters = engine.counters();
34 println!(
35 "summary accepted={} rejected={} malformed={}",
36 counters.accepted, counters.rejected, counters.malformed
37 );
38
39 Ok(())
40}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 33)
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(packet) {
13 EngineResult::Accepted { packet } => {
14 println!("accepted semantic={}", packet.summary().semantic);
15 }
16 EngineResult::Rejected { reason, .. } => {
17 let diagnostic = reason.diagnostic();
18 println!(
19 "rejected code={} remediation={}",
20 diagnostic.code, diagnostic.remediation
21 );
22 }
23 EngineResult::ParseError(error) => {
24 let diagnostic = error.diagnostic();
25 println!(
26 "malformed code={} remediation={}",
27 diagnostic.code, diagnostic.remediation
28 );
29 }
30 }
31 }
32
33 let counters = engine.counters();
34 println!(
35 "summary accepted={} rejected={} malformed={}",
36 counters.accepted, counters.rejected, counters.malformed
37 );
38
39 Ok(())
40}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