Vec <--> RustVec

Rust's std::vec::Vec is seen on the Swift side as a RustVec.

RustVec implements Swift's IteratorProtocol, allowing you do do things like:

let vec: RustVec = get_rust_vec_somehow() for value in vec { print(value) }

Example

#![allow(unused)] fn main() { // Rust #[swift_bridge::bridge] mod ffi { extern "Rust" { fn make_rust_vec() -> Vec<u32>; fn make_rust_vec_with_initial_contents(initial: &[i16]) -> Vec<i16>; } } fn make_rust_vec() -> Vec<u32> { vec![5, 8, 11] } fn make_rust_vec_with_initial_contents(initial: &[u16]) -> Vec<u16> { initial.to_vec() } }
// In Swift func testMakeAVec () { let vec: RustVec = get_vec_from_rust() XCTAssertEqual(vec.pop(), 5) XCTAssertEqual(vec.pop(), 8) XCTAssertEqual(vec.pop(), 11) XCTAssertEqual(vec.pop(), nil) vec.push(50) vec.push(75) XCTAssertEqual(vec.get(1), 75) } func testMakeAnotherVec () { let initial: [Int16] = [3, 5, 7] initial.withUnsafeBufferPointer({ initalPtr in let vec: RustVec = make_rust_vec_with_initial_contents(initialPtr) XCTAssertEqual(vec.len(), 3); for (index, value) in vec.enumerate() { XCTAssertEqual(value, initial[index]) } }); }