How tsuitoar/visa-rs works
visa-rs provides safe Rust bindings for controlling VISA instruments through an installed native VISA library. The main workflow opens a resource manager, discovers a matching resource, opens an instrument session, then exchanges data; the README demonstrates this with a *IDN? query. The crate also exposes synchronous session, attribute, event and locking APIs, plus callback-based async I/O and a Tokio adapter. A companion procedural-macro crate generates enum and attribute definitions. Some runtime relationships are documented, but many implementation details are unsampled.
Main entry points: instrument.rs Instrument session · src/lib.rs Resource manager · src/lib.rs Macro entry points · mod.rs Async instrument
Components 23
Sessions and I/O
- Resource manager
src/lib.rs - Resource discovery
src/lib.rs - Instrument session
src/instrument.rs - Session lifecycle
src/session.rs - Synchronous I/O
src/instrument.rs - Event control
src/instrument.rs - Event callbacks
src/handler.rs
Async I/O
- Async instrument
src/async_io/mod.rs - Completion callbacks
src/async_io/callback.rs - Async futures
src/async_io/future.rs - Tokio adapter
src/async_tokio.rs
VISA Types
- Attributes
src/enums/attribute.rs - Event types
src/enums/event.rs - Status codes
src/enums/status.rs - Operation flags
src/flags.rs - Enum definitions
src/enums/assert.rs
Code Generation
- Macro entry points
visa-rs-proc/src/lib.rs - Attribute generator
visa-rs-proc/src/attrs/mod.rs - Attribute ranges
visa-rs-proc/src/attrs/range.rs - Representation generator
visa-rs-proc/src/repr.rs - Identifier rewriting
visa-rs-proc/src/rusty_ident.rs
Other components
- Rust application
- VISA library
Connections 25
- Rust application → Resource manager: opens
README.md - Resource manager → Resource discovery: finds resources
README.md - Resource manager → Instrument session: opens session
README.md - Rust application → Synchronous I/O: exchanges data
README.md - Resource manager → VISA library: uses native API
- Instrument session → VISA library: uses native API
- Instrument session → Session lifecycle: owns session
src/session.rs - Instrument session → Synchronous I/O: provides
src/instrument.rs - Instrument session → Event control: provides
src/instrument.rs - Event control → Event callbacks: installs handler
src/handler.rs - Rust application → Async instrument: uses async I/O
src/async_io/mod.rs - Async instrument → Completion callbacks: registers completion
src/async_io/mod.rs - Async instrument → Async futures: creates futures
src/async_io/mod.rs - Async futures → Instrument session: uses async transfers
src/async_io/future.rs - Tokio adapter → Async instrument: adapts async I/O
src/async_tokio.rs - Instrument session → Attributes: uses attributes
src/enums/attribute.rs - Instrument session → Status codes: returns status
src/instrument.rs - Instrument session → Operation flags: accepts flags
src/async_tokio.rs - Event control → Event types: uses event types
src/enums/event.rs - Enum definitions → Macro entry points: invokes macros
- Macro entry points → Attribute generator: dispatches to
visa-rs-proc/src/lib.rs - Macro entry points → Representation generator: uses generator
visa-rs-proc/src/lib.rs - Macro entry points → Identifier rewriting: uses rewriting
visa-rs-proc/src/lib.rs - Attribute generator → Attribute ranges: uses ranges
visa-rs-proc/src/attrs/mod.rs - Representation generator → Identifier rewriting: uses rewriting
visa-rs-proc/src/repr.rs