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:
\