Skip to content

Commit f2a86c7

Browse files
committed
integrating rust type aliases
1 parent 7977c51 commit f2a86c7

File tree

5 files changed

+116
-110
lines changed

5 files changed

+116
-110
lines changed

.helix/languages.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[language-server.rust-analyzer]
2+
config = { "rust-analyzer.workspace.discoverConfig"= { "command"= [ "just", "_rust-analyzer" ], "progressLabel"= "generating rust analyzer config", "filesToWatch"= [ "BUILD.bazel" ] }}

kj-rs/io/bridge.h

Lines changed: 0 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -73,107 +73,4 @@ struct CxxAsyncIoStream {
7373

7474
} // namespace ffi
7575

76-
template <typename T>
77-
class RustAsyncInputStream: public kj::AsyncInputStream {
78-
public:
79-
explicit RustAsyncInputStream(T&& impl): impl(kj::mv(impl)) {}
80-
virtual ~RustAsyncInputStream() = default;
81-
82-
// kj::AsyncInputStream interface
83-
kj::Promise<size_t> tryRead(void* buffer, size_t minBytes, size_t maxBytes) override {
84-
return impl->try_read(
85-
kj::arrayPtr(reinterpret_cast<uint8_t*>(buffer), maxBytes).as<RustMutable>(), minBytes);
86-
}
87-
88-
kj::Maybe<uint64_t> tryGetLength() override {
89-
// todo
90-
return kj::none;
91-
}
92-
93-
// kj::Promise<uint64_t> pumpTo(kj::AsyncOutputStream& output, uint64_t amount) override {
94-
// return impl->pumpTo(output, amount);
95-
// }
96-
97-
private:
98-
T impl;
99-
};
100-
101-
template <typename T>
102-
class RustAsyncOutputStream: public kj::AsyncOutputStream {
103-
public:
104-
explicit RustAsyncOutputStream(T&& impl): impl(kj::mv(impl)) {}
105-
virtual ~RustAsyncOutputStream() = default;
106-
107-
// kj::AsyncOutputStream interface
108-
kj::Promise<void> write(kj::ArrayPtr<const kj::byte> buffer) override {
109-
return impl->write(buffer);
110-
}
111-
112-
kj::Promise<void> write(kj::ArrayPtr<const kj::ArrayPtr<const kj::byte>> pieces) override {
113-
return impl->write(pieces);
114-
}
115-
116-
kj::Maybe<kj::Promise<uint64_t>> tryPumpFrom(
117-
kj::AsyncInputStream& input, uint64_t amount) override {
118-
return impl->tryPumpFrom(input, amount);
119-
}
120-
121-
kj::Promise<void> whenWriteDisconnected() override {
122-
return impl->whenWriteDisconnected();
123-
}
124-
125-
private:
126-
T impl;
127-
};
128-
129-
template <typename T>
130-
class RustAsyncIoStream: public kj::AsyncIoStream {
131-
public:
132-
explicit RustAsyncIoStream(T&& impl): impl(kj::mv(impl)) {}
133-
virtual ~RustAsyncIoStream() = default;
134-
135-
// kj::AsyncInputStream interface
136-
kj::Promise<size_t> tryRead(void* buffer, size_t minBytes, size_t maxBytes) override {
137-
return impl->tryRead(buffer, minBytes, maxBytes);
138-
}
139-
140-
kj::Maybe<uint64_t> tryGetLength() override {
141-
return impl->tryGetLength();
142-
}
143-
144-
kj::Promise<uint64_t> pumpTo(kj::AsyncOutputStream& output, uint64_t amount) override {
145-
return impl->pumpTo(output, amount);
146-
}
147-
148-
// kj::AsyncOutputStream interface
149-
kj::Promise<void> write(kj::ArrayPtr<const kj::byte> buffer) override {
150-
return impl->write(buffer);
151-
}
152-
153-
kj::Promise<void> write(kj::ArrayPtr<const kj::ArrayPtr<const kj::byte>> pieces) override {
154-
return impl->write(pieces);
155-
}
156-
157-
kj::Maybe<kj::Promise<uint64_t>> tryPumpFrom(
158-
kj::AsyncInputStream& input, uint64_t amount) override {
159-
return impl->tryPumpFrom(input, amount);
160-
}
161-
162-
kj::Promise<void> whenWriteDisconnected() override {
163-
return impl->whenWriteDisconnected();
164-
}
165-
166-
// kj::AsyncIoStream interface
167-
void shutdownWrite() override {
168-
impl->shutdownWrite();
169-
}
170-
171-
void abortRead() override {
172-
impl->abortRead();
173-
}
174-
175-
private:
176-
T impl;
177-
};
178-
17976
} // namespace kj_rs_io

kj-rs/io/tests.c++

Lines changed: 107 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
#include "kj-rs/convert.h"
44
#include "kj-rs/io/bridge.h"
5-
#include "kj-rs/io/tests.rs.h"
65

76
#include <kj/async-io.h>
87
#include <kj/debug.h>
@@ -11,10 +10,116 @@
1110
#include <cstring>
1211
#include <memory>
1312

13+
#include "kj-rs/io/lib.rs.h"
14+
#include "kj-rs/io/tests.rs.h"
15+
1416
using namespace kj_rs;
1517

1618
namespace kj_rs_io_test {
1719

20+
template <typename T>
21+
class RustAsyncInputStream: public kj::AsyncInputStream {
22+
public:
23+
explicit RustAsyncInputStream(T&& impl): impl(kj::mv(impl)) {}
24+
virtual ~RustAsyncInputStream() = default;
25+
26+
// kj::AsyncInputStream interface
27+
kj::Promise<size_t> tryRead(void* buffer, size_t minBytes, size_t maxBytes) override {
28+
return impl->try_read(
29+
kj::arrayPtr(reinterpret_cast<uint8_t*>(buffer), maxBytes).as<RustMutable>(), minBytes);
30+
}
31+
32+
kj::Maybe<uint64_t> tryGetLength() override {
33+
// todo
34+
return kj::none;
35+
}
36+
37+
// kj::Promise<uint64_t> pumpTo(kj::AsyncOutputStream& output, uint64_t amount) override {
38+
// return impl->pumpTo(output, amount);
39+
// }
40+
41+
private:
42+
T impl;
43+
};
44+
45+
template <typename T>
46+
class RustAsyncOutputStream: public kj::AsyncOutputStream {
47+
public:
48+
explicit RustAsyncOutputStream(T&& impl): impl(kj::mv(impl)) {}
49+
virtual ~RustAsyncOutputStream() = default;
50+
51+
// kj::AsyncOutputStream interface
52+
kj::Promise<void> write(kj::ArrayPtr<const kj::byte> buffer) override {
53+
return impl->write(buffer);
54+
}
55+
56+
kj::Promise<void> write(kj::ArrayPtr<const kj::ArrayPtr<const kj::byte>> pieces) override {
57+
return impl->write(pieces);
58+
}
59+
60+
kj::Maybe<kj::Promise<uint64_t>> tryPumpFrom(
61+
kj::AsyncInputStream& input, uint64_t amount) override {
62+
return impl->tryPumpFrom(input, amount);
63+
}
64+
65+
kj::Promise<void> whenWriteDisconnected() override {
66+
return impl->whenWriteDisconnected();
67+
}
68+
69+
private:
70+
T impl;
71+
};
72+
73+
template <typename T>
74+
class RustAsyncIoStream: public kj::AsyncIoStream {
75+
public:
76+
explicit RustAsyncIoStream(T&& impl): impl(kj::mv(impl)) {}
77+
virtual ~RustAsyncIoStream() = default;
78+
79+
// kj::AsyncInputStream interface
80+
kj::Promise<size_t> tryRead(void* buffer, size_t minBytes, size_t maxBytes) override {
81+
return impl->tryRead(buffer, minBytes, maxBytes);
82+
}
83+
84+
kj::Maybe<uint64_t> tryGetLength() override {
85+
return impl->tryGetLength();
86+
}
87+
88+
kj::Promise<uint64_t> pumpTo(kj::AsyncOutputStream& output, uint64_t amount) override {
89+
return impl->pumpTo(output, amount);
90+
}
91+
92+
// kj::AsyncOutputStream interface
93+
kj::Promise<void> write(kj::ArrayPtr<const kj::byte> buffer) override {
94+
return impl->write(buffer);
95+
}
96+
97+
kj::Promise<void> write(kj::ArrayPtr<const kj::ArrayPtr<const kj::byte>> pieces) override {
98+
return impl->write(pieces);
99+
}
100+
101+
kj::Maybe<kj::Promise<uint64_t>> tryPumpFrom(
102+
kj::AsyncInputStream& input, uint64_t amount) override {
103+
return impl->tryPumpFrom(input, amount);
104+
}
105+
106+
kj::Promise<void> whenWriteDisconnected() override {
107+
return impl->whenWriteDisconnected();
108+
}
109+
110+
// kj::AsyncIoStream interface
111+
void shutdownWrite() override {
112+
impl->shutdownWrite();
113+
}
114+
115+
void abortRead() override {
116+
impl->abortRead();
117+
}
118+
119+
private:
120+
T impl;
121+
};
122+
18123
// Simple input stream that reads from array data
19124
class ArrayInputStream: public kj::AsyncInputStream {
20125
public:
@@ -192,7 +297,7 @@ KJ_TEST("Read Rust InputStream from C++") {
192297

193298
auto testData = "Hello, World!"_kjb;
194299

195-
auto stream = kj_rs_io::RustAsyncInputStream(create_rust_mock_input_stream(testData.as<Rust>()));
300+
auto stream = RustAsyncInputStream(create_rust_mock_input_stream(testData.as<Rust>()));
196301
auto hash = computeStreamHash(stream).wait(waitScope);
197302
KJ_EXPECT(hash == 7993990320990026836);
198303
}

kj-rs/io/tests.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
use futures::executor::block_on;
77
use std::{future::Future, pin::Pin};
88

9-
use io::{AsyncInputStream, AsyncIoStream, AsyncOutputStream, Result};
9+
use io::{AsyncInputStream, AsyncIoStream, AsyncOutputStream, Result, RustAsyncInputStream};
1010

1111
#[cfg(test)]
1212
use io::unoptimized_pump_to;
@@ -299,6 +299,8 @@ pub mod ffi {
299299
}
300300

301301
extern "Rust" {
302+
#[namespace = "kj_rs_io::ffi"]
303+
type RustAsyncInputStream = io::RustAsyncInputStream;
302304

303305
/// Compute hash of data from a `CxxAsyncInputStream`
304306
async unsafe fn compute_stream_hash_ffi<'a>(
@@ -314,7 +316,7 @@ pub mod ffi {
314316
type MockInputStream;
315317

316318
/// Create a Rust MockInputStream with given data
317-
fn create_rust_mock_input_stream(data: &[u8]) -> Box<MockInputStream>;
319+
fn create_rust_mock_input_stream(data: &[u8]) -> Box<RustAsyncInputStream>;
318320

319321
async unsafe fn try_read<'a>(
320322
self: &'a mut MockInputStream,
@@ -377,8 +379,8 @@ pub async unsafe fn generate_prng_ffi<'a>(
377379

378380
/// Create a Rust MockInputStream with given data
379381
#[must_use]
380-
pub fn create_rust_mock_input_stream(data: &[u8]) -> Box<MockInputStream> {
381-
Box::new(MockInputStream::new(data.to_vec()))
382+
pub fn create_rust_mock_input_stream(data: &[u8]) -> Box<RustAsyncInputStream> {
383+
Box::new(RustAsyncInputStream::new(MockInputStream::new(data.to_vec())))
382384
}
383385

384386
/// Create a Rust MockOutputStream

kj-rs/tests/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ cc_test(
113113
"async-stream-test.c++",
114114
],
115115
deps = [
116-
":awaitables-rust",
116+
":tests",
117117
":bridge",
118118
":test-promises",
119119
"@capnp-cpp//src/kj:kj-test",

0 commit comments

Comments
 (0)