gguf_rs_lib/
lib.rs

1//! # GGUF - A Rust library for GGUF file format
2//!
3//! This library provides support for reading, writing, and manipulating GGUF
4//! (GGML Universal Format) files, commonly used for storing large language models.
5//!
6//! ## Basic Usage
7//!
8//! ### Creating a GGUF file
9//!
10//! ```rust
11//! # use gguf_rs_lib::prelude::*;
12//! # use gguf_rs_lib::format::metadata::MetadataValue;
13//! # use gguf_rs_lib::tensor::TensorType;
14//! # fn main() -> Result<()> {
15//! // Create a simple GGUF file
16//! let builder = GGUFBuilder::simple("my_model", "A test model")
17//!     .add_metadata("version", MetadataValue::String("1.0".to_string()))
18//!     .add_f32_tensor("weights", vec![2, 2], vec![1.0, 2.0, 3.0, 4.0]);
19//!
20//! let (bytes, result) = builder.build_to_bytes()?;
21//! println!("Created GGUF file with {} bytes", bytes.len());
22//! # Ok(())
23//! # }
24//! ```
25//!
26//! ### Reading a GGUF file
27//!
28//! ```rust
29//! # use gguf_rs_lib::prelude::*;
30//! # use std::io::Cursor;
31//! # fn example_data() -> Vec<u8> {
32//! #     // Create minimal valid GGUF data for testing
33//! #     use gguf_rs_lib::format::constants::*;
34//! #     let mut data = Vec::new();
35//! #     // Header: magic, version, tensor_count, metadata_count
36//! #     data.extend_from_slice(&GGUF_MAGIC.to_le_bytes());
37//! #     data.extend_from_slice(&GGUF_VERSION.to_le_bytes());
38//! #     data.extend_from_slice(&0u64.to_le_bytes()); // 0 tensors
39//! #     data.extend_from_slice(&1u64.to_le_bytes()); // 1 metadata entry
40//! #     // Metadata: key "test", value "value" (string type)
41//! #     data.extend_from_slice(&4u64.to_le_bytes()); // key length
42//! #     data.extend_from_slice(b"test"); // key
43//! #     data.extend_from_slice(&8u32.to_le_bytes()); // string type
44//! #     data.extend_from_slice(&5u64.to_le_bytes()); // value length
45//! #     data.extend_from_slice(b"value"); // value
46//! #     // Align to 32 bytes for tensor data (none in this case)
47//! #     while data.len() % 32 != 0 { data.push(0); }
48//! #     data
49//! # }
50//! # fn main() -> Result<()> {
51//! let data = example_data();
52//! let reader = GGUFFileReader::new(Cursor::new(data))?;
53//!
54//! println!("GGUF version: {}", reader.header().version);
55//! println!("Metadata entries: {}", reader.metadata().len());
56//! println!("Tensors: {}", reader.tensor_count());
57//! # Ok(())
58//! # }
59//! ```
60
61#![cfg_attr(not(feature = "std"), no_std)]
62#![recursion_limit = "8192"]
63
64// Public modules
65pub mod builder;
66pub mod error;
67pub mod format;
68pub mod metadata;
69pub mod reader;
70pub mod tensor;
71pub mod writer;
72
73// Optional async support
74#[cfg(feature = "async")]
75pub mod r#async;
76
77// Optional memory mapping support
78#[cfg(feature = "mmap")]
79pub mod mmap;
80
81// Re-export main types for convenience
82pub use error::{GGUFError, Result};
83
84// Re-export commonly used items in prelude
85pub mod prelude {
86    #[cfg(feature = "std")]
87    pub use crate::builder::gguf_builder::GGUFBuilder;
88    pub use crate::error::{GGUFError, Result};
89    pub use crate::format::constants::{GGUF_DEFAULT_ALIGNMENT, GGUF_MAGIC, GGUF_VERSION};
90    pub use crate::format::header::GGUFHeader;
91    pub use crate::format::metadata::Metadata;
92    pub use crate::format::metadata::MetadataValue;
93    pub use crate::format::types::GGUFTensorType;
94    #[cfg(feature = "std")]
95    pub use crate::reader::file_reader::GGUFFileReader;
96    #[cfg(feature = "std")]
97    pub use crate::writer::file_writer::GGUFFileWriter;
98}