Skip to content

Commit

Permalink
Refactoring and improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
Artemkaaas committed Apr 17, 2023
1 parent 351ec38 commit 56289e5
Show file tree
Hide file tree
Showing 27 changed files with 388 additions and 389 deletions.
3 changes: 1 addition & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ description = "Parser for Composable Event Streaming Representation (CESR)"
license = "Apache-2.0"

[dependencies]
cesride = { git = "https://github.com/DSRCorporation/cesride.git", branch = "wasm-parside" }
cesride = "0.5.0"
cesride = { git = "https://github.com/DSRCorporation/cesride.git", branch = "fix/wasm-readme" }
nom = "~7.1"
num-derive = "~0.3"
num-traits = "~0.2"
Expand Down
26 changes: 10 additions & 16 deletions wasm/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,37 +1,31 @@
[package]
name = "parside-wasm"
description = "Parser library to handle Composable Event Streaming Representation (CESR)"
license = "Apache-2.0"
keywords = ["cesr", "keri", "acdc"]
version = "0.1.0"
authors = ['Dmitry Kuzmenko <[email protected]>']
edition = "2021"

[lib]
crate-type = ["cdylib", "rlib"]

[dependencies.getrandom]
version = '0.2'
features = ['js']

[dependencies.parside_core]
path = '..'
package = "parside"

[dependencies.cesride_wasm]
git = "https://github.com/DSRCorporation/cesride.git"
branch = "wasm-parside"
branch = "fix/wasm-readme"
package = "cesride-wasm"

[dependencies.cesride]
git = "https://github.com/DSRCorporation/cesride.git"
branch = "wasm-parside"

[dependencies.wasm-bindgen]
version = '0.2'
features = ['serde-serialize']

[dependencies.web-sys]
version = "0.3"
features = ["console", ]
branch = "fix/wasm-readme"

[dependencies]
getrandom = { version = "0.2", features = ['js'] }
js-sys = '0.3'
serde_json = "1.0"
serde = { version = "1.0", features = ["derive"] }
serde-wasm-bindgen = "0.4"
wasm-bindgen = { version = "0.2", features = ['serde-serialize'] }
web-sys = { version = "0.3", features = ["console", ] }
21 changes: 13 additions & 8 deletions wasm/README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
# WASM FFI for CESRIDE
# WASM FFI for Parside

You can build the FFI with
```
$ wasm-pack build
```
Parser library to handle Composable Event Streaming Representation (CESR)

You can run an PoC test with
### How to build with wasm-pack build
Install wasm-pack from https://rustwasm.github.io/wasm-pack/installer/ and then

```
$ npm run serve
wasm-pack build # Will output modules best-suited to be bundled with webpack
wasm-pack build --target=nodejs # Will output modules that can be directly consumed by NodeJS
wasm-pack build --target=web # Will output modules that can be directly consumed in browser without bundler usage
```

and then visiting http://localhost:8080 in a browser should run the example!
### Run NodeJS demo
```
cd demo/node
yarn install
yarn start
```
2 changes: 1 addition & 1 deletion wasm/demo/node/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "parside-wasm-demo",
"version": "0.1.0",
"description": "JS demo for parside wasm bindings",
"description": "NodeJS demo for parside wasm bindings",
"scripts": {
"start": "ts-node src/main.ts",
"check": "tslint -c tslint.json 'src/**/*.ts'"
Expand Down
101 changes: 75 additions & 26 deletions wasm/demo/node/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,36 +1,85 @@
import { ControllerIdxSigs, ControllerIdxSig, Message, Siger } from "parside-wasm";
import { ControllerIdxSigs, ControllerIdxSig, Message, Siger, CesrGroup, MessageList } from "parside-wasm";

function main() {
const bytes2 = Buffer.from("-AABAABg3q8uNg1A2jhEAdbKGf-QupQhNnmZQx3zIyPLWBe6qqLT5ynytivf9EwJhxyhy87a0x2cezDdil4SsM2xxs0O", 'utf8');
const result = Message.from_stream_bytes(bytes2)
console.log('rest')
console.log(result.rest())
console.log('message')
console.log(result.message())
const message = result.message()
const group = message.group()
const controllerIdxSigs = group?.controllerIdxSigs()
const size = controllerIdxSigs?.size() || 0
console.log('controllerIdxSig')
const messageStream = "-AABAABg3q8uNg1A2jhEAdbKGf-QupQhNnmZQx3zIyPLWBe6qqLT5ynytivf9EwJhxyhy87a0x2cezDdil4SsM2xxs0O"
const messageListStream = "{\"v\":\"KERI10JSON00012b_\",\"t\":\"icp\"}-CABBD8-gMSJ6K1PQ7_gG5ZJn2NkHQJgdkiNrTBz_FWWS_cC0BDc1i44ZX0jaIHh5oNDx-TITbPnI6VEn2nKlqPwkkTF452X7XxYh80tolDpReYwZpnD8TF4Or2v3CpSCikyt6EG{\"v\":\"KERI20JSON00981b_\",\"t\":\"tcp\"}-AABAABg3q8uNg1A2jhEAdbKGf-QupQhNnmZQx3zIyPLWBe6qqLT5ynytivf9EwJhxyhy87a0x2cezDdil4SsM2xxs0Orest"
console.log(`--Start--`)
parseMessage(Buffer.from(messageStream))
parseMessageList(Buffer.from(messageListStream))

const newGroup = buildGroup()
console.log(`--Assert parsed and built groups--`)
console.assert(messageStream, newGroup.qb64())
console.log(`--End--`)
}

function parseMessage(bytes: Uint8Array) {
console.log('--Parse message from bytes--')
const result = Message.from_stream_bytes(bytes)
console.log(` Rest: ${result.rest}`)
console.log(` Message: ${result.message}`)
handleMessage(result.message)
}

function parseMessageList(bytes: Uint8Array) {
console.log('--Parse message list from bytes--')
const result = MessageList.from_stream_bytes(bytes)
console.log(` Rest: ${result.rest}`)
console.log(` Messages: ${result.messages.length}`)
if (result.messages) {
for (const message of result.messages) {
handleMessage(message)
}
}
}

function handleMessage(message: Message) {
if (message.group) {
iterateOverGroup(message.group)
}
if (message.payload) {
console.log(`Parsed Payload: ${message.payload.toString()}`)
}
}

function iterateOverGroup(group: CesrGroup) {
if (group.controllerIdxSigs) handleControllerIdxSigs(group.controllerIdxSigs)
if (group.firstSeenReplayCouples) console.log(' Handle FirstSeenReplayCouples')
if (group.nonTransReceipt) console.log(' Handle NonTransReceipt')
if (group.pathedMaterialQuadlets) console.log(' Handle PathedMaterialQuadlets')
if (group.sadPathSigGroups) console.log(' Handle SadPathSigGroups')
if (group.sadPathSigs) console.log(' Handle SadPathSigs')
if (group.sealSourceCouples) console.log(' Handle SealSourceCouples')
if (group.transIdxSigGroups) console.log(' Handle TransIdxSigGroups')
if (group.transLastIdxSigGroups) console.log(' Handle TransLastIdxSigGroups')
if (group.transReceiptQuadruples) console.log(' Handle TransReceiptQuadruples')
if (group.witnessIdxSigs) console.log(' Handle WitnessIdxSigs')
}

function handleControllerIdxSigs(controllerIdxSigs: ControllerIdxSigs) {
console.log(' Handle ControllerIdxSigs')
console.log(' Iterate over items')
console.log(' Option 1: for index loop')
const size = controllerIdxSigs.size() || 0
for (let i = 0; i < size; i++) {
const controllerIdxSig = controllerIdxSigs?.value(i);
console.log('controllerIdxSig')
const siger = controllerIdxSig?.siger()
console.log(siger?.qb64())
const controllerIdxSig = controllerIdxSigs.value(i);
console.log(` Siger: ${controllerIdxSig?.siger.qb64()}`)
}

const values = controllerIdxSigs?.values() || []
for (const val of values) {
console.log('value')
console.log(val?.siger()?.qb64())
const values = controllerIdxSigs.values() ?? []
console.log(' Option 2: for of loop')
for (const controllerIdxSig of values) {
console.log(` Siger: ${controllerIdxSig.siger.qb64()}`)
}
}

const siger2 = Siger.new_with_qb64("AABg3q8uNg1A2jhEAdbKGf-QupQhNnmZQx3zIyPLWBe6qqLT5ynytivf9EwJhxyhy87a0x2cezDdil4SsM2xxs0O")
const controllerIdxSig2 = new ControllerIdxSig(siger2)
const controllerIdxSigs2 = new ControllerIdxSigs([controllerIdxSig2])
console.log('controllerIdxSigs2')
console.log(controllerIdxSigs2)
console.log(controllerIdxSigs2.qb64())
function buildGroup(): ControllerIdxSigs {
console.log('--Build a group--')
const siger = Siger.new_with_qb64("AABg3q8uNg1A2jhEAdbKGf-QupQhNnmZQx3zIyPLWBe6qqLT5ynytivf9EwJhxyhy87a0x2cezDdil4SsM2xxs0O")
const controllerIdxSig = new ControllerIdxSig(siger)
const controllerIdxSigs = new ControllerIdxSigs([ controllerIdxSig ])
console.log(` ControllerIdxSigs: ${controllerIdxSigs.qb64()}`)
return controllerIdxSigs
}

main()
28 changes: 0 additions & 28 deletions wasm/index.js

This file was deleted.

14 changes: 0 additions & 14 deletions wasm/package.json

This file was deleted.

27 changes: 0 additions & 27 deletions wasm/src/message/cold_code.rs

This file was deleted.

20 changes: 20 additions & 0 deletions wasm/src/message/custom_payload.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
use crate::error::*;
use parside_core::CustomPayload;
use wasm_bindgen::prelude::*;

#[wasm_bindgen(js_name = CustomPayload)]
#[derive(Clone)]
pub struct CustomPayloadWrapper(pub(crate) CustomPayload);

#[wasm_bindgen(js_class = CustomPayload)]
impl CustomPayloadWrapper {
#[wasm_bindgen(getter)]
pub fn value(&self) -> Result<JsValue> {
serde_wasm_bindgen::to_value(&self.0.value).map_err(|e| JsValue::from(&e.to_string()))
}

#[wasm_bindgen(js_name = toString)]
pub fn to_string(&self) -> String {
self.0.value.to_string().clone()
}
}
2 changes: 1 addition & 1 deletion wasm/src/message/groups/attached_material_quadlets.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::error::JsResult;
use crate::error::*;
use crate::message::message::CesrGroupWrapper;
use crate::message::groups::CesrGroupWrapper;
use js_sys::Array;
use parside_core::message::{AttachedMaterialQuadlets, CesrGroup};
use parside_core::Group;
Expand Down
1 change: 1 addition & 0 deletions wasm/src/message/groups/controller_idx_sigs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ impl ControllerIdxSigWrapper {
ControllerIdxSigWrapper(ControllerIdxSig::new((*siger).clone()))
}

#[wasm_bindgen(getter)]
pub fn siger(&self) -> SigerWrapper {
SigerWrapper::wrap(&self.0.siger)
}
Expand Down
2 changes: 2 additions & 0 deletions wasm/src/message/groups/first_seen_replay_couples.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,12 @@ impl FirstSeenReplayCoupleWrapper {
))
}

#[wasm_bindgen(getter)]
pub fn firner(&self) -> SeqnerWrapper {
SeqnerWrapper::wrap(&self.0.firner)
}

#[wasm_bindgen(getter)]
pub fn dater(&self) -> DaterWrapper {
DaterWrapper::wrap(&self.0.dater)
}
Expand Down
Loading

0 comments on commit 56289e5

Please sign in to comment.