onnx_rs/lib.rs
1//! Zero-dependency ONNX model parser and encoder for Rust.
2//!
3//! Parses `.onnx` files (protobuf wire format) directly into typed Rust
4//! AST structs without relying on `prost`, `protobuf`, or any other crate.
5//!
6//! # Quick start
7//!
8//! ```
9//! use onnx_rs::ast::*;
10//!
11//! // Build a minimal ONNX model
12//! let model = Model {
13//! ir_version: 9,
14//! producer_name: "example",
15//! opset_import: vec![OperatorSetId { domain: "", version: 19 }],
16//! graph: Some(Graph {
17//! name: "main",
18//! node: vec![Node {
19//! op_type: OpType::Relu,
20//! input: vec!["X"],
21//! output: vec!["Y"],
22//! ..Default::default()
23//! }],
24//! ..Default::default()
25//! }),
26//! ..Default::default()
27//! };
28//!
29//! // Encode to protobuf bytes (suitable for writing to a .onnx file)
30//! let bytes = onnx_rs::encode(&model);
31//!
32//! // Parse the bytes back into a Model
33//! let parsed = onnx_rs::parse(&bytes).unwrap();
34//! assert_eq!(parsed.ir_version, 9);
35//! assert_eq!(parsed.producer_name, "example");
36//!
37//! let graph = parsed.graph.as_ref().unwrap();
38//! assert_eq!(graph.node[0].op_type, OpType::Relu);
39//! ```
40//!
41//! # Reading a .onnx file from disk
42//!
43//! ```no_run
44//! let bytes = std::fs::read("model.onnx").unwrap();
45//! let model = onnx_rs::parse(&bytes).unwrap();
46//! println!("producer: {}", model.producer_name);
47//! ```
48
49pub mod ast;
50pub mod encoder;
51pub mod error;
52pub mod parser;
53mod wire;
54
55pub use ast::Model;
56pub use encoder::encode;
57pub use error::Error;
58pub use parser::parse;