Commit 1b467423 authored by Éloïs's avatar Éloïs

wasm: link summary

parent 503d0a43
Pipeline #4893 passed with stages
in 24 seconds
......@@ -23,19 +23,21 @@ class: dark
## Sommaire
1. Qu’est-ce que WebAssembly ?
2. Pourquoi WebAssembly ?
3. Wasm + Rust = 💖
4. 2 target différentes
5. Wasm-pack
6. Les références
7. Installation des outils
8. Atelier : hello world
9. Atelier : binding Rust/Js
10. Étude d'un exemple concret : `dup-tools-wasm`
1. [Qu’est-ce que WebAssembly ?](#what)
2. [Pourquoi WebAssembly ?](#why)
3. [Wasm + Rust = 💖](#wasm+rust)
4. [2 target différentes](#2target)
5. [Wasm-pack](#wasm-pack)
6. [Les références](#references)
7. [Installation des outils](#install)
8. [Atelier : hello world](#hw)
9. [Atelier : binding Rust/Js](#binding)
10. [Étude d'un exemple concret : `dup-tools-wasm`](#dup-tools)
---
name: what
## .center[Qu’est-ce que WebAssembly ?]
.center[![wasm logo](../../images/wasm-logo.png)]
......@@ -61,6 +63,8 @@ Non, le binaire est indépendant de la plateforme : il n’y aura pas de compila
---
name: why
## .center[Pourquoi WebAssembly ?]
> .question[WebAssembly va-t-il remplacer Javascript ?]
......@@ -76,6 +80,8 @@ C’est une alternative pour construire des jeux 2D / 3D, ou des applications We
---
name: wasm+rust
## .center[Wasm + Rust = 💖]
- Compilateur Rust->Webassembly depuis le 21/12/17
......@@ -91,6 +97,8 @@ name: wasm-rust
---
name: 2target
## .center[2 target différentes]
### wasm32-unknown-emscripten
......@@ -106,6 +114,8 @@ name: wasm-rust
---
name: wasm-pack
## Wasm-pack
![wasm-pack](../../images/wasm-pack-logo.png)
......@@ -118,6 +128,8 @@ name: wasm-rust
---
name: references
## Les références
- [wasm-bindgen book](https://rustwasm.github.io/docs/wasm-bindgen/)
......@@ -125,6 +137,8 @@ name: wasm-rust
---
name: install
## Installation des outils
1. Installer [Rust](https://www.rust-lang.org/tools/install)
......@@ -137,6 +151,8 @@ name: wasm-rust
---
name: hw
## Atelier : Hello World (1/3)
Créez un nouveau projet:
......@@ -221,6 +237,8 @@ wasm-pack build
---
name: binding
## Atelier : binding Rust/Js (1/2)
1. Créer un nouveau projet a partir du template `wasm-pack` :
......@@ -273,17 +291,93 @@ C'est cargo-generate qui vas créer le dossier du projet.
---
## Étude d'un exemple concret : `dup-tools-wasm`
name: dup-tools
### Un cas concret : `dup-tools-wasm` (1/4)
<div class="mermaid">
graph LR
graph TD
dup-crypto-->dubp-documents
dup-crypto-->durs-network-documents
dubp-documents-->dup-tools-wasm
durs-network-documents-->dup-tools-wasm
</div>
(en cours de rédaction ...)
- Expose des fonctions Js utiles pour manipuler les entités du protocole DUP (trousseaux de clés, signatures, documents, etc)
- Utilise 3 crates de [DURS](https://git.duniter.org/nodes/rust/duniter-rs) comme dépendance.
---
### Un cas concret : `dup-tools-wasm` (2/4)
Expose des fonctions de crypto dans [crypto.rs](https://git.duniter.org/tools/dup-tools-wasm/blob/master/src/crypto.rs).
Exemple: fonction de vérification d'une signature:
```rust
#[wasm_bindgen]
pub fn verify(datas: &str, pubkey: &str, signature: &str) -> bool {
let pubkey = match ed25519::PublicKey::from_base58(pubkey) {
Ok(pubkey) => pubkey,
Err(_) => return false,
};
let sig = match ed25519::Signature::from_base64(signature) {
Ok(signature) => signature,
Err(_) => return false,
};
pubkey.verify(datas.as_bytes(), &sig)
}
```
---
### Un cas concret : `dup-tools-wasm` (3/4)
Expose des fonctions de parsing des documents dans [parsers.rs](https://git.duniter.org/tools/dup-tools-wasm/blob/master/src/parsers.rs)
```rust
#[wasm_bindgen]
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum DocCheckResult {
UnknownType,
WrongFormat,
InvalidSig,
ValidSig,
}
#[wasm_bindgen]
pub fn parse_doc_and_verify(source: &str, doc_type: DocumentType) -> DocCheckResult;
#[wasm_bindgen]
pub fn parse_doc_into_json(doc: &str, doc_type: DocumentType) -> String;
```
---
### Un cas concret : `dup-tools-wasm` (4/4)
Clonez le dépot :
```bash
git clone https://git.duniter.org/tools/dup-tools-wasm.git
```
Rendez vous dans le projet puis compilez et testez :
```bash
cd dup-tools-wasm
wasm-pack build
wasm-pack test --headless --firefox
```
Amusez vous a rajouter votre propre fonction.
utilisez le tout dans une wasm-app :
```bash
mkdir my-dup-tools-app && cd my-dup-tools-app
npm init wasm-app
```
---
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment