Skip to content

Commit 8872018

Browse files
committed
shrink JsWorkerRequest & use the right HashMap/Set
1 parent fd3cdb3 commit 8872018

35 files changed

Lines changed: 159 additions & 143 deletions

File tree

Cargo.lock

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/auth/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ license-file = "LICENSE"
77
description = "Auth helpers for SpacetimeDB"
88

99
[dependencies]
10+
spacetimedb-data-structures.workspace = true
1011
spacetimedb-lib = { workspace = true, features = ["serde"] }
1112

1213
anyhow.workspace = true

crates/auth/src/identity.rs

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ pub use jsonwebtoken::errors::ErrorKind as JwtErrorKind;
33
pub use jsonwebtoken::{DecodingKey, EncodingKey};
44
use serde::Deserializer;
55
use serde::{Deserialize, Serialize};
6+
use spacetimedb_data_structures::map::HashMap;
67
use spacetimedb_lib::Identity;
7-
use std::collections::HashMap;
88
use std::time::SystemTime;
99

1010
#[derive(Debug, Clone)]
1111
pub struct ConnectionAuthCtx {
1212
pub claims: SpacetimeIdentityClaims,
13-
pub jwt_payload: String,
13+
pub jwt_payload: Box<str>,
1414
}
1515

1616
impl TryFrom<SpacetimeIdentityClaims> for ConnectionAuthCtx {
@@ -19,7 +19,7 @@ impl TryFrom<SpacetimeIdentityClaims> for ConnectionAuthCtx {
1919
let payload = serde_json::to_string(&claims).map_err(|e| anyhow::anyhow!("Failed to serialize claims: {e}"))?;
2020
Ok(ConnectionAuthCtx {
2121
claims,
22-
jwt_payload: payload,
22+
jwt_payload: payload.into(),
2323
})
2424
}
2525
}
@@ -31,11 +31,11 @@ pub struct SpacetimeIdentityClaims {
3131
#[serde(rename = "hex_identity")]
3232
pub identity: Identity,
3333
#[serde(rename = "sub")]
34-
pub subject: String,
34+
pub subject: Box<str>,
3535
#[serde(rename = "iss")]
36-
pub issuer: String,
36+
pub issuer: Box<str>,
3737
#[serde(rename = "aud")]
38-
pub audience: Vec<String>,
38+
pub audience: Box<[Box<str>]>,
3939

4040
/// The unix timestamp the token was issued at
4141
#[serde_as(as = "serde_with::TimestampSeconds")]
@@ -44,27 +44,27 @@ pub struct SpacetimeIdentityClaims {
4444
pub exp: Option<SystemTime>,
4545

4646
#[serde(flatten)]
47-
pub extra: Option<HashMap<String, serde_json::Value>>,
47+
pub extra: Option<HashMap<Box<str>, serde_json::Value>>,
4848
}
4949

50-
fn deserialize_audience<'de, D>(deserializer: D) -> Result<Vec<String>, D::Error>
50+
fn deserialize_audience<'de, D>(deserializer: D) -> Result<Box<[Box<str>]>, D::Error>
5151
where
5252
D: Deserializer<'de>,
5353
{
5454
// By using `untagged`, it will try the different options.
5555
#[derive(Deserialize)]
5656
#[serde(untagged)]
5757
enum Audience {
58-
Single(String),
59-
Multiple(Vec<String>),
58+
Single(Box<str>),
59+
Multiple(Box<[Box<str>]>),
6060
}
6161

6262
// Deserialize into the enum
6363
let audience = Audience::deserialize(deserializer)?;
6464

65-
// Convert the enum into a Vec<String>
65+
// Convert the enum into a list.
6666
Ok(match audience {
67-
Audience::Single(s) => vec![s],
67+
Audience::Single(s) => [s].into(),
6868
Audience::Multiple(v) => v,
6969
})
7070
}
@@ -77,11 +77,11 @@ pub struct IncomingClaims {
7777
#[serde(rename = "hex_identity")]
7878
pub identity: Option<Identity>,
7979
#[serde(rename = "sub")]
80-
pub subject: String,
80+
pub subject: Box<str>,
8181
#[serde(rename = "iss")]
82-
pub issuer: String,
82+
pub issuer: Box<str>,
8383
#[serde(rename = "aud", default, deserialize_with = "deserialize_audience")]
84-
pub audience: Vec<String>,
84+
pub audience: Box<[Box<str>]>,
8585

8686
/// The unix timestamp the token was issued at
8787
#[serde_as(as = "serde_with::TimestampSeconds")]
@@ -91,7 +91,7 @@ pub struct IncomingClaims {
9191

9292
/// All remaining claims from the JWT payload
9393
#[serde(flatten)]
94-
pub extra: Option<HashMap<String, serde_json::Value>>,
94+
pub extra: Option<HashMap<Box<str>, serde_json::Value>>,
9595
}
9696

9797
impl TryInto<SpacetimeIdentityClaims> for IncomingClaims {
@@ -153,9 +153,9 @@ mod tests {
153153

154154
let claims: IncomingClaims = serde_json::from_value(json_data).unwrap();
155155

156-
assert_eq!(claims.audience, vec!["audience1"]);
157-
assert_eq!(claims.subject, "123");
158-
assert_eq!(claims.issuer, "example.com");
156+
assert_eq!(claims.audience, ["audience1".into()].into());
157+
assert_eq!(&*claims.subject, "123");
158+
assert_eq!(&*claims.issuer, "example.com");
159159
assert_eq!(claims.iat, UNIX_EPOCH + std::time::Duration::from_secs(1693425600));
160160
assert_eq!(
161161
claims.exp,
@@ -175,9 +175,9 @@ mod tests {
175175

176176
let claims: IncomingClaims = serde_json::from_value(json_data).unwrap();
177177

178-
assert_eq!(claims.audience, vec!["audience1", "audience2"]);
179-
assert_eq!(claims.subject, "123");
180-
assert_eq!(claims.issuer, "example.com");
178+
assert_eq!(claims.audience, ["audience1".into(), "audience2".into()].into());
179+
assert_eq!(&*claims.subject, "123");
180+
assert_eq!(&*claims.issuer, "example.com");
181181
assert_eq!(claims.iat, UNIX_EPOCH + std::time::Duration::from_secs(1693425600));
182182
assert_eq!(
183183
claims.exp,
@@ -197,8 +197,8 @@ mod tests {
197197
let claims: IncomingClaims = serde_json::from_value(json_data).unwrap();
198198

199199
assert!(claims.audience.is_empty()); // Since `default` is used, it should be an empty vector
200-
assert_eq!(claims.subject, "123");
201-
assert_eq!(claims.issuer, "example.com");
200+
assert_eq!(&*claims.subject, "123");
201+
assert_eq!(&*claims.issuer, "example.com");
202202
assert_eq!(claims.iat, UNIX_EPOCH + std::time::Duration::from_secs(1693425600));
203203
assert_eq!(
204204
claims.exp,

crates/cli/build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ fn generate_template_files() {
7272
let discovered_templates = discover_templates(&templates_dir);
7373

7474
let mut generated_code = String::new();
75-
generated_code.push_str("use std::collections::HashMap;\n\n");
75+
generated_code.push_str("use spacetimedb_data_structures::map::HashMap;\n\n");
7676

7777
generated_code.push_str("pub fn get_templates_json() -> &'static str {\n");
7878
generated_code.push_str(" r#\"");

crates/cli/src/config.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ use crate::errors::CliError;
22
use crate::util::{contains_protocol, host_or_url_to_host_and_protocol};
33
use anyhow::Context;
44
use jsonwebtoken::DecodingKey;
5+
use spacetimedb_data_structures::map::HashMap;
56
use spacetimedb_fs_utils::atomic_write;
67
use spacetimedb_paths::cli::CliTomlPath;
7-
use std::collections::HashMap;
88
use std::io;
99
use std::path::Path;
1010
use toml_edit::ArrayOfTables;

crates/cli/src/subcommands/init.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use dialoguer::{theme::ColorfulTheme, Confirm, Input, Select};
99
use reqwest::Url;
1010
use serde::{Deserialize, Serialize};
1111
use serde_json::json;
12-
use std::collections::HashMap;
12+
use spacetimedb_data_structures::map::{HashCollectionExt as _, HashMap};
1313
use std::path::{Path, PathBuf};
1414
use std::{fmt, fs};
1515
use toml_edit::{value, DocumentMut, Item};
@@ -18,6 +18,7 @@ use xmltree::{Element, XMLNode};
1818
use crate::subcommands::login::{spacetimedb_login_force, DEFAULT_AUTH_HOST};
1919

2020
mod embedded {
21+
use spacetimedb_data_structures::map::HashCollectionExt as _;
2122
include!(concat!(env!("OUT_DIR"), "/embedded_templates.rs"));
2223
}
2324

0 commit comments

Comments
 (0)