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 1ac377d commit 96119da
Show file tree
Hide file tree
Showing 26 changed files with 389 additions and 386 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +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 = { git = "https://github.com/DSRCorporation/cesride.git", branch = "fix/wasm-readme" }
nom = "~5"
num-derive = "~0.3"
num-traits = "~0.2"
Expand Down
26 changes: 11 additions & 15 deletions wasm/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,37 +1,33 @@
[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]>']
authors = ['Artem Ivanov <[email protected]>', '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
```
102 changes: 76 additions & 26 deletions wasm/demo/node/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,36 +1,86 @@
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) {
console.log(' --Iterate over parsed group--')
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(' 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")
console.log(` Siger: ${siger.qb64()}`)
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 96119da

Please sign in to comment.