diff --git a/Cargo.lock b/Cargo.lock index 441d9d2e..640bf782 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -604,7 +604,7 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http", + "http 0.2.12", "indexmap 2.2.6", "slab", "tokio", @@ -614,9 +614,9 @@ dependencies = [ [[package]] name = "handlebars" -version = "4.5.0" +version = "5.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" +checksum = "d08485b96a0e6393e9e4d1b8d48cf74ad6c063cd905eb33f42c1ce3f0377539b" dependencies = [ "log", "pest", @@ -628,9 +628,9 @@ dependencies = [ [[package]] name = "handlebars-fluent" -version = "0.3.2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf49bf85c4a60ff66b4627602fbbabe16458ec5bdd8294ed7a26c83173e2485" +checksum = "7bb39cffd370c96a5de57ec5242f385bfb7d52facd774881d81e89621ce7d87e" dependencies = [ "fluent", "fluent-bundle 0.11.0", @@ -671,6 +671,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http-body" version = "0.4.6" @@ -678,7 +689,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http", + "http 0.2.12", "pin-project-lite", ] @@ -705,7 +716,7 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http", + "http 0.2.12", "http-body", "httparse", "httpdate", @@ -978,16 +989,15 @@ dependencies = [ [[package]] name = "multer" -version = "2.1.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2" +checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" dependencies = [ "bytes", "encoding_rs", "futures-util", - "http", + "http 1.1.0", "httparse", - "log", "memchr", "mime", "spin", @@ -1442,7 +1452,7 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http", + "http 0.2.12", "http-body", "hyper", "hyper-tls", @@ -1472,9 +1482,9 @@ dependencies = [ [[package]] name = "rocket" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e7bb57ccb26670d73b6a47396c83139447b9e7878cab627fdfe9ea8da489150" +checksum = "a516907296a31df7dc04310e7043b61d71954d703b603cc6867a026d7e72d73f" dependencies = [ "async-stream", "async-trait", @@ -1509,9 +1519,9 @@ dependencies = [ [[package]] name = "rocket_codegen" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2238066abf75f21be6cd7dc1a09d5414a671f4246e384e49fe3f8a4936bd04c" +checksum = "575d32d7ec1a9770108c879fc7c47815a80073f96ca07ff9525a94fcede1dd46" dependencies = [ "devise", "glob", @@ -1526,9 +1536,9 @@ dependencies = [ [[package]] name = "rocket_dyn_templates" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04bfc006e547e4f72b760ab861f5943b688aed8a82c4977b5500c98f5d17dbfa" +checksum = "5bbab919c9e67df3f7ac6624a32ef897df4cd61c0969f4d66f3ced0534660d7a" dependencies = [ "handlebars", "normpath", @@ -1539,14 +1549,14 @@ dependencies = [ [[package]] name = "rocket_http" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a1663694d059fe5f943ea5481363e48050acedd241d46deb2e27f71110389e" +checksum = "e274915a20ee3065f611c044bd63c40757396b6dbc057d6046aec27f14f882b9" dependencies = [ "cookie", "either", "futures", - "http", + "http 0.2.12", "hyper", "indexmap 2.2.6", "log", @@ -2682,7 +2692,7 @@ name = "www-rust-lang-org" version = "0.1.0" dependencies = [ "fluent", - "fluent-bundle 0.11.0", + "fluent-bundle 0.15.3", "fluent-locale", "fluent-syntax 0.11.1", "handlebars", diff --git a/Cargo.toml b/Cargo.toml index 537ee35b..dbc6e2c0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,14 +7,14 @@ edition = "2018" [dependencies] lazy_static = "1.2.0" fluent = "0.16" -fluent-bundle = "0.11.0" +fluent-bundle = "0.15.0" fluent-syntax = "0.11.0" fluent-locale = "0.10.1" -handlebars-fluent = "0.3.1" +handlebars-fluent = "0.4.0" rand = "0.8" regex = "1" -rocket = "0.5.0" -rocket_dyn_templates = { version = "0.1.0", features = ["handlebars"] } +rocket = "0.5.1" +rocket_dyn_templates = { version = "0.2.0", features = ["handlebars"] } serde = { version = "1.0", features = ["derive"] } serde_yaml = "0.8.17" sass-rs = "0.2.1" @@ -22,6 +22,6 @@ reqwest = { version = "0.11.4", features = ["json"] } toml = "0.5" serde_json = "1.0" rust_team_data = { git = "https://github.com/rust-lang/team" } -handlebars = "4.3.0" +handlebars = "5.1.0" siphasher = "0.3.6" percent-encoding = "2.1.0" diff --git a/src/i18n.rs b/src/i18n.rs index f2153372..eb335ebb 100644 --- a/src/i18n.rs +++ b/src/i18n.rs @@ -1,5 +1,5 @@ use handlebars::{ - Context, Handlebars, Helper, HelperDef, HelperResult, Output, RenderContext, RenderError, + Context, Handlebars, Helper, HelperDef, HelperResult, Output, RenderContext, RenderErrorReason, }; use rocket::request::FromParam; @@ -149,32 +149,38 @@ impl TeamHelperParam { impl HelperDef for TeamHelper { fn call<'reg: 'rc, 'rc>( &self, - h: &Helper<'reg, 'rc>, + h: &Helper<'rc>, _: &'reg Handlebars, context: &'rc Context, rcx: &mut RenderContext<'reg, 'rc>, out: &mut dyn Output, ) -> HelperResult { let Some(name) = h.param(0) else { - return Err(RenderError::new( + return Err(RenderErrorReason::ParamNotFoundForIndex( "{{team-text}} must have at least two parameters", - )); + 0, + ) + .into()); }; let Some(name) = name.relative_path() else { - return Err(RenderError::new( + return Err(RenderErrorReason::InvalidParamType( "{{team-text}} takes only identifier parameters", - )); + ) + .into()); }; let Some(id) = h.param(1) else { - return Err(RenderError::new( + return Err(RenderErrorReason::ParamNotFoundForIndex( "{{team-text}} must have at least two parameters", - )); + 1, + ) + .into()); }; let Some(id) = id.relative_path() else { - return Err(RenderError::new( + return Err(RenderErrorReason::InvalidParamType( "{{team-text}} takes only identifier parameters", - )); + ) + .into()); }; let param = match id.as_str() { @@ -182,22 +188,25 @@ impl HelperDef for TeamHelper { "description" => TeamHelperParam::Description, "role" => { let Some(role_id) = h.param(2) else { - return Err(RenderError::new( + return Err(RenderErrorReason::ParamNotFoundForIndex( "{{team-text}} requires a third parameter for the role id", - )); + 2, + ) + .into()); }; TeamHelperParam::Role(role_id.value().as_str().unwrap().to_owned()) } unrecognized => { - return Err(RenderError::new(format!( + return Err(RenderErrorReason::Other(format!( "unrecognized {{{{team-text}}}} param {unrecognized:?}", - ))); + )) + .into()); } }; let team = rcx .evaluate(context, name) - .map_err(|e| RenderError::from_error(&format!("Cannot find team {}", name), e))?; + .map_err(|e| RenderErrorReason::NestedError(Box::new(e)))?; let lang = context .data() .get("lang") @@ -210,18 +219,18 @@ impl HelperDef for TeamHelper { if lang == "en-US" { let english = param.english(team.as_json()); out.write(english) - .map_err(|e| RenderError::from_error("failed to render English team data", e))?; + .map_err(|e| RenderErrorReason::NestedError(Box::new(e)))?; } else if let Some(value) = self.i18n.lookup_no_default_fallback( &lang.parse().expect("language must be valid"), ¶m.fluent_id(team_name), None, ) { out.write(&value) - .map_err(|e| RenderError::from_error("failed to render translated team data", e))?; + .map_err(|e| RenderErrorReason::NestedError(Box::new(e)))?; } else { let english = param.english(team.as_json()); out.write(english) - .map_err(|e| RenderError::from_error("failed to render", e))?; + .map_err(|e| RenderErrorReason::NestedError(Box::new(e)))?; } Ok(()) } diff --git a/src/teams.rs b/src/teams.rs index 142334ba..dd22566f 100644 --- a/src/teams.rs +++ b/src/teams.rs @@ -1,4 +1,6 @@ -use handlebars::{Context, Handlebars, Helper, HelperResult, Output, RenderContext, RenderError}; +use handlebars::{ + Context, Handlebars, Helper, HelperResult, Output, RenderContext, RenderErrorReason, +}; use percent_encoding::{utf8_percent_encode, AsciiSet, NON_ALPHANUMERIC}; use rust_team_data::v1::{Team, TeamKind, Teams, BASE_URL}; use std::cmp::Reverse; @@ -212,16 +214,21 @@ pub fn encode_zulip_stream( let zulip_stream = if let Some(p) = h.param(0) { p.value() } else { - return Err(RenderError::new( + return Err(RenderErrorReason::ParamNotFoundForIndex( "{{encode-zulip-stream takes 1 parameter}}", - )); + 0, + ) + .into()); }; let zulip_stream = if let Some(s) = zulip_stream.as_str() { s } else { - return Err(RenderError::new( - "{{encode-zulip-stream takes a string parameter}}", - )); + return Err(RenderErrorReason::ParamTypeMismatchForName( + "encode-zulip-stream", + "0".into(), + "string".into(), + ) + .into()); }; // https://github.com/zulip/zulip/blob/159641bab8c248f5b72a4e736462fb0b48e7fa24/static/js/hash_util.js#L20-L25 diff --git a/templates/learn/get-started.html.hbs b/templates/learn/get-started.html.hbs index f24678f9..4fd02433 100644 --- a/templates/learn/get-started.html.hbs +++ b/templates/learn/get-started.html.hbs @@ -137,6 +137,5 @@ fn main() { src="/static/images/ferris.gif" /> -{{> components/tools/install-script }} {{/inline}} {{~> (lookup this "parent")~}}