Skip to content

Commit e555f38

Browse files
authored
Merge branch 'main' into main
2 parents 1d6f43c + 3bd45da commit e555f38

File tree

5 files changed

+78
-19
lines changed

5 files changed

+78
-19
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ napi = { version = "2.2.0", default-features = false, features = [
1313
"async"
1414
] }
1515
napi-derive = "2.2.0"
16-
zstd = "0.10.0+zstd.1.5.2"
16+
zstd = "0.11"
1717

1818
[build-dependencies]
1919
napi-build = "1.2.1"

index.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33

44
/* auto-generated by NAPI-RS */
55

6-
export function compress(buffer: Buffer): Promise<Buffer>
7-
export function decompress(buffer: Buffer): Promise<Buffer>
6+
export function compress(data: Buffer): Promise<Buffer>
7+
export function decompress(data: Buffer): Promise<Buffer>

src/lib.rs

Lines changed: 63 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,72 @@
11
#[macro_use]
22
extern crate napi_derive;
33

4-
use napi::bindgen_prelude::*;
4+
use napi::{
5+
bindgen_prelude::AsyncTask,
6+
Env, Error, JsBuffer, JsBufferValue, Ref, Result, Status, Task,
7+
};
8+
use zstd::stream::{encode_all, decode_all};
9+
10+
struct Encoder {
11+
data: Ref<JsBufferValue>
12+
}
13+
14+
#[napi]
15+
impl Task for Encoder {
16+
type Output = Vec<u8>;
17+
type JsValue = JsBuffer;
18+
19+
fn compute(&mut self) -> Result<Self::Output> {
20+
let data: &[u8] = self.data.as_ref();
21+
encode_all(data, 3).map_err(|e| Error::new(Status::GenericFailure, format!("{}", e)))
22+
}
23+
24+
fn resolve(&mut self, env: Env, output: Self::Output) -> Result<JsBuffer> {
25+
env.create_buffer_with_data(output).map(|b| b.into_raw())
26+
}
27+
28+
fn finally(&mut self, env: Env) -> Result<()> {
29+
self.data.unref(env)?;
30+
Ok(())
31+
}
32+
}
33+
34+
struct Decoder {
35+
data: Ref<JsBufferValue>
36+
}
37+
38+
#[napi]
39+
impl Task for Decoder {
40+
type Output = Vec<u8>;
41+
type JsValue = JsBuffer;
42+
43+
fn compute(&mut self) -> Result<Self::Output> {
44+
let data: &[u8] = self.data.as_ref();
45+
decode_all(data).map_err(|e| Error::new(Status::GenericFailure, format!("{}", e)))
46+
}
47+
48+
fn resolve(&mut self, env: Env, output: Self::Output) -> Result<JsBuffer> {
49+
env.create_buffer_with_data(output).map(|b| b.into_raw())
50+
}
51+
52+
fn finally(&mut self, env: Env) -> Result<()> {
53+
self.data.unref(env)?;
54+
Ok(())
55+
}
56+
}
557

658
#[napi]
7-
async fn compress(buffer: Buffer) -> Result<Buffer> {
8-
Ok(buffer)
59+
fn compress(data: JsBuffer) -> Result<AsyncTask<Encoder>> {
60+
let encoder = Encoder {
61+
data: data.into_ref()?,
62+
};
63+
Ok(AsyncTask::new(encoder))
964
}
1065

1166
#[napi]
12-
async fn decompress(buffer: Buffer) -> Result<Buffer> {
13-
Ok(buffer)
67+
fn decompress(data: JsBuffer) -> Result<AsyncTask<Decoder>> {
68+
let decoder = Decoder {
69+
data: data.into_ref()?,
70+
};
71+
Ok(AsyncTask::new(decoder))
1472
}

test/debug.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const { compress, decompress } = require('../index');
2+
3+
async function run() {
4+
const buffer = Buffer.from('test');
5+
const compressed = await compress(buffer);
6+
const decompressed = await decompress(compressed);
7+
console.log(compressed, decompressed);
8+
}
9+
10+
run();

test/index.test.js

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,9 @@ describe('zstd', () => {
55
describe('#compress', () => {
66
const buffer = Buffer.from('test');
77

8-
it('returns the buffer', async () => {
8+
it('returns a compressed buffer', async () => {
99
const result = await compress(buffer);
10-
expect(result).to.deep.equal(buffer);
11-
});
12-
});
13-
14-
describe('#decompress', () => {
15-
const buffer = Buffer.from('test');
16-
17-
it('returns the buffer', async () => {
18-
const result = await decompress(buffer);
19-
expect(result).to.deep.equal(buffer);
10+
expect(await decompress(result)).to.deep.equal(buffer);
2011
});
2112
});
2213
});

0 commit comments

Comments
 (0)