Compare commits

...

2 commits

Author SHA1 Message Date
Yash Karandikar 460e7e60ec Deserialize into a Deck 2022-04-22 11:35:15 -05:00
Yash Karandikar 73519ffbe8 Now we can decode base64 2022-04-22 11:25:37 -05:00
5 changed files with 154 additions and 1 deletions

93
quicksilver/Cargo.lock generated
View file

@ -19,6 +19,12 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "base64"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
[[package]]
name = "bumpalo"
version = "3.9.1"
@ -38,8 +44,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad"
dependencies = [
"cfg-if",
"js-sys",
"libc",
"wasi",
"wasm-bindgen",
]
[[package]]
@ -58,6 +66,12 @@ dependencies = [
"hashbrown",
]
[[package]]
name = "itoa"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
[[package]]
name = "js-sys"
version = "0.3.57"
@ -100,6 +114,12 @@ version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc"
[[package]]
name = "ppv-lite86"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
[[package]]
name = "proc-macro2"
version = "1.0.37"
@ -113,7 +133,13 @@ dependencies = [
name = "quicksilver"
version = "0.1.0"
dependencies = [
"base64",
"getrandom",
"rand",
"serde",
"serde_json",
"sycamore",
"wasm-bindgen",
]
[[package]]
@ -125,6 +151,73 @@ dependencies = [
"proc-macro2",
]
[[package]]
name = "rand"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [
"libc",
"rand_chacha",
"rand_core",
]
[[package]]
name = "rand_chacha"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
dependencies = [
"ppv-lite86",
"rand_core",
]
[[package]]
name = "rand_core"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
dependencies = [
"getrandom",
]
[[package]]
name = "ryu"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
[[package]]
name = "serde"
version = "1.0.136"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.136"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95"
dependencies = [
"itoa",
"ryu",
"serde",
]
[[package]]
name = "slotmap"
version = "1.0.6"

View file

@ -6,4 +6,10 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
base64 = "0.13.0"
getrandom = { version = "0.2.6", features = ["js"] }
rand = "0.8.5"
serde = { version = "1.0.136", features = ["derive"] }
serde_json = "1.0.79"
sycamore = "0.8.0-beta.3"
wasm-bindgen = "0.2.80"

View file

@ -6,7 +6,7 @@
<title>Quicksilver</title>
<link rel="stylesheet" href="https://unpkg.com/purecss@2.1.0/build/pure-min.css" integrity="sha384-yHIFVG6ClnONEA5yB5DJXfW2/KC173DIQrYoZMEtBvGzmf0PKiGyNEqe9N6BNDBH" crossorigin="anonymous">
<link rel="css" data-trunk href="style.css">
<!-- <link rel="inline" data-trunk href="script.js"> -->
<link rel="inline" data-trunk href="script.js">
</head>
<body></body>
</html>

5
quicksilver/script.js Normal file
View file

@ -0,0 +1,5 @@
function get_token() {
let params = new URLSearchParams(document.location.search);
let token = params.get("deck");
return token;
}

View file

@ -1,7 +1,56 @@
use rand::Rng;
use serde::{Deserialize, Serialize};
use std::ops::Deref;
use sycamore::prelude::*;
use wasm_bindgen::prelude::*;
macro_rules! wasm_import {
($($tt:tt)*) => {
#[wasm_bindgen]
extern "C" {
#[wasm_bindgen]
pub fn $($tt)*;
}
};
}
macro_rules! wasm_import_with_ns {
($ns: ident, $($tt:tt)*) => {
#[wasm_bindgen]
extern "C" {
#[wasm_bindgen(js_namespace = $ns)]
pub fn $($tt)*;
}
};
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
struct Deck(Vec<Card>);
impl Deref for Deck {
type Target = Vec<Card>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
struct Card {
question: String,
answers: [String; 4],
correct: usize,
}
wasm_import!(get_token() -> String);
wasm_import_with_ns!(console, log(s: &str));
fn main() {
sycamore::render(|ctx| {
let token = get_token();
let data = String::from_utf8(base64::decode(&token).unwrap()).unwrap();
log(&data);
let deck: Deck = serde_json::from_str(&data).unwrap();
let current = create_signal(ctx, rand::thread_rng().gen_range(0..deck.len()));
view! {ctx,
div(class="wrapper") {
h1(class="text-align-center") { "Quicksilver" }