1
# [ macro_export ] macro_rules ! t { ( "err.user.not_found" , email : $ email : expr , id : $ id : expr , $ lang : expr ) => { match $ lang . as_ref ( ) { "en" => "User not found: $email, ID: $id" . replace ( "$email" , $ email ) . replace ( "$id" , $ id ) , e => panic ! ( "Missing language: {}" , e ) } } ; ( "err.user.not_found" , $ ( $ e : tt ) * ) => { compile_error ! ( stringify ! ( Please provide : email , id >> The order matters ! ) ) ; } ; ( "inconsistent.vars" , name : $ name : expr , ok : $ ok : expr , thing : $ thing : expr , $ lang : expr ) => { match $ lang . as_ref ( ) { "fr" => "Salut $name !" . replace ( "$name" , $ name ) , "en" => "Name: $thing, ok: $ok" . replace ( "$ok" , $ ok ) . replace ( "$thing" , $ thing ) , e => panic ! ( "Missing language: {}" , e ) } } ; ( "inconsistent.vars" , $ ( $ e : tt ) * ) => { compile_error ! ( stringify ! ( Please provide : name , ok , thing >> The order matters ! ) ) ; } ; ( "multiple.vars" , bingo : $ bingo : expr , name : $ name : expr , thing : $ thing : expr , $ lang : expr ) => { match $ lang . as_ref ( ) { "fr" => "Nom: $name, Truc: $thing, bingo: $bingo" . replace ( "$bingo" , $ bingo ) . replace ( "$name" , $ name ) . replace ( "$thing" , $ thing ) , e => panic ! ( "Missing language: {}" , e ) } } ; ( "multiple.vars" , $ ( $ e : tt ) * ) => { compile_error ! ( stringify ! ( Please provide : bingo , name , thing >> The order matters ! ) ) ; } ; ( "hello" , name : $ name : expr , $ lang : expr ) => { match $ lang . as_ref ( ) { "fr" => "Salut $name !" . replace ( "$name" , $ name ) , "en" => "Hello $name!" . replace ( "$name" , $ name ) , e => panic ! ( "Missing language: {}" , e ) } } ; ( "hello" , $ ( $ e : tt ) * ) => { compile_error ! ( stringify ! ( Please provide : name >> The order matters ! ) ) ; } ; ( "err.not_allowed" , $ lang : expr ) => { match $ lang . as_ref ( ) { "en" => "You are not allowed to do this" . to_owned ( ) , "fr" => "Vous n'\u{ea}tes pas autoris\u{e9} \u{e0} faire cela" . to_owned ( ) , e => panic ! ( "Missing language: {}" , e ) } } ; ( "key.test" , $ lang : expr ) => { match $ lang . as_ref ( ) { "en" => "This is a test" . to_owned ( ) , "fr" => "C'est un test" . to_owned ( ) , e => panic ! ( "Missing language: {}" , e ) } } ; ( $ key : expr , $ lang : expr ) => { compile_error ! ( "Missing translation" ) ; } }