This repository contains practical examples of integrating Ada with Rust using the VSS (Virtual String System) and the interop layer provided by vss-rust.
The project demonstrates how to leverage Rust's ecosystem (Asynchronous I/O, Networking) seamlessly within Ada applications.
- IP Inspector
A simple tool using Rust's
std::netto validate IPv4/IPv6 addresses and inspect their properties (loopback, multicast, etc.).
--- VSS Rust IP Inspector ---
Input : 127.0.0.1
Result: [IPv4] Loopback: Yes, Multicast: No, Private: No
Input : 192.168.1.10
Result: [IPv4] Loopback: No, Multicast: No, Private: Yes
Input : 8.8.8.8
Result: [IPv4] Loopback: No, Multicast: No, Private: No
Input : ::1
Result: [IPv6] Loopback: Yes, Multicast: No
Input : 2001:db8::1
Result: [IPv6] Loopback: No, Multicast: No
Input : 224.0.0.1
Result: [IPv4] Loopback: No, Multicast: Yes, Private: No
Input : invalid.ip.address
Result: Error: Invalid IP address format
Input : 256.256.256.256
Result: Error: Invalid IP address format
-
HTTP Client
A synchronous HTTP GET requester powered by thereqwestcrate, demonstrating basic string exchange between Ada and Rust. -
HTTP Client Async
An advanced example using Tokio multi-thread runtime and Ada Protected Queues. It demonstrates non-blocking parallel requests and out-of-order result processing.
--- VSS Rust Async HTTP Client ---
Spawning 5 requests...
All requests spawned. Waiting for incoming data...
[2026-02-14 10:03:13] Result # 1 received:
[https://httpbin.org/get] Status: 200 OK
Body length: 221
[2026-02-14 10:03:13] Result # 2 received:
[https://httpbin.org/status/404] Status: 404 Not Found
Body length: 0
[2026-02-14 10:03:13] Result # 3 received:
[https://httpbin.org/status/201] Status: 201 Created
Body length: 0
[2026-02-14 10:03:14] Result # 4 received:
[https://httpbin.org/delay/1] Status: 200 OK
Body length: 271
[2026-02-14 10:03:16] Result # 5 received:
[https://httpbin.org/delay/3] Status: 200 OK
Body length: 271
All tasks completed. Async demo finished.
Ensure you have the following tools installed:
- Alire (Ada Library Manager)
- Rust & Cargo (Edition 2024 recommended)
- MinGW-w64 (for Windows users)
Important
For more detailed information on environment setup and toolchain configuration, please refer to the vss-rust README.
This project uses a hybrid build system. Follow these steps to build all examples:
Make sure you have the vss-rust core library in the parent directory:
git clone https://github.com/SergeyNM/vss-rust ../vss-rustRequired directory structure:
.
├── vss-rust/ # Core interop library
└── vss-rust-examples/ # This repository (examples)
You can verify it by running dir ..\vss* (Windows) or ls -d ../vss* (Linux):
Mode Name
---- ----
d----- vss-rust
d----- vss-rust-examples
Compile the core interop library and all examples:
# Build core interop library
alr exec -- cargo build --release --manifest-path ../vss-rust/Cargo.toml
# Build specific examples
alr exec -- cargo build --releaseFinally, use Alire to link everything together:
alr build --releaseThe executables will be located in the ./bin/ directory.
vss-rust — Core interop library for seamless mapping between Ada VSS Virtual_String and Rust's native strings.
VSS (Virtual String System) — A high-level, Unicode-aware string and utility library for Ada.
This project is licensed under the same terms as the vss-rust project.