joost

personal web page

17 June 2017

implementing a simple language switch using rocket in rust

Let’s look how easy it is to implement a simple cookie based language switch in the rocket web framework for the rust programming language. Defining the language type:
\

In this case there will be support for Dutch and English. PartialEq is derived to be able to compare Lang items with ==.

The Default trait is implemented to define the default language:
\

The FromStr trait is implemented to allow creating a Lang item from a string.
\

The Into<&‘static str> trait is added to allow the conversion in the other direction.
\

Finally the FromRequest trait is implemented to allow extracting the “lang” cookie from the request.
\

It always succeeds and falls back to the default when no cookie or an unknown language is is found. How to use the Lang constraint on a request:
\

And the language switch page:
\

And as a cherry on the pie, let’s have the language switch page automatically redirect to the referrer. First let’s implement a FromRequest trait for our own Referer type:
\

When it finds a Referer header it uses the content, else the request is forwarded to the next handler. This means that if the request has no Referer header it is not handled, and a 404 will be returned.
Finally let’s update the language switch request handler:
\

Pretty elegant. A recap with all code combined and adding the missing glue:
\

tags: grep - html - lang:en - programming - redirect - rocket - rust - web