ruso_runtime/lib.rs
1//! Ruso VM: execute compiled bytecode against HTTP, DNS, TCP, and UDP targets.
2//!
3//! Compilers (e.g. `ruso-script`) must target [`opcode::VERSION`] and the
4//! instruction set documented in [`opcode`].
5//!
6//! # Developer documentation
7//!
8//! - [Architecture](https://docs.ruso.hopeless-labs.com/internals/architecture.html)
9//! - [Bytecode v1](https://docs.ruso.hopeless-labs.com/internals/bytecode.html)
10//! - [Runtime](https://docs.ruso.hopeless-labs.com/internals/runtime.html)
11//! - [Extending](https://docs.ruso.hopeless-labs.com/internals/extending.html)
12
13// `ProbeKind::Http` is the dominant variant by a wide margin (HTTP spec carries
14// headers, cookies, queries, bodies). Boxing it would force an indirection on
15// every probe access; the size asymmetry is intentional.
16#![allow(clippy::large_enum_variant)]
17
18pub mod contract;
19pub mod opcode;
20mod runtime;
21pub mod util;
22
23pub use contract::{
24 BodyValue, CmpOp, CmpValue, EvidenceKind, ExtractSource, FieldKind, HttpMethod, InlinePart,
25 InlinePartBody, MatchPredicate, ObjectBody, QualifiedField, QualifiedMatch, Severity,
26};
27pub use opcode::{BytecodeProgram, MAGIC, Opcode, Pc, VERSION};
28pub use runtime::duration::parse_duration;
29pub use runtime::http::build_client;
30pub use runtime::{
31 BytecodeError, CheckMetadata, ExecutionResult, Executor, ExecutorConfig, Finding,
32 HttpRequestSpec, PortCache, PortCheck, ProbeKind, ProgramSpec, Report, RuntimeError,
33 SocketProbeSpec, VariableValue, bytes_to_hex, bytes_to_hex_dump, decode_bytecode, disasm,
34 encode_bytecode, format_human, hex_to_bytes, load_bytecode_input,
35};
36pub use util::truncate_str;