grift_std/lib.rs
1#![forbid(unsafe_code)]
2
3//! # Grift Standard Library
4//!
5//! Standard library features for the Grift R7RS-compliant Scheme implementation
6//! that require Rust's `std` (I/O, filesystem, etc.).
7//!
8//! This crate implements the [`IoProvider`] trait from `grift_core` using
9//! Rust's standard I/O, giving the `no_std` evaluator access to real
10//! input/output when running on a hosted platform.
11//!
12//! ## Quick Start
13//!
14//! ```rust
15//! use grift_std::StdIoProvider;
16//! use grift_core::IoProvider;
17//!
18//! // Create a standard I/O provider
19//! let mut io = StdIoProvider::new();
20//!
21//! // Check port types
22//! use grift_core::PortId;
23//! assert!(io.is_input_port(PortId::STDIN));
24//! assert!(io.is_output_port(PortId::STDOUT));
25//! ```
26//!
27//! ## Crate Boundary
28//!
29//! | Crate | `#![no_std]` | Purpose |
30//! |-------|-------------|---------|
31//! | `grift_core` | ✅ | Defines [`IoProvider`] trait |
32//! | **`grift_std`** | ❌ | Implements [`IoProvider`] with `std::io` |
33//! | `grift_eval` | ✅ | Pure evaluator, no I/O |
34//! | `grift_repl` | ❌ | Interactive REPL |
35
36mod io;
37
38pub use io::StdIoProvider;
39
40// Re-export the trait so users can access it without a separate grift_core dep.
41pub use grift_core::{IoProvider, PortId, IoErrorKind, IoResult, NullIoProvider, DisplayPort};