mirror of
https://github.com/italicsjenga/valence.git
synced 2024-12-27 16:11:33 +11:00
2597e92b8f
Moves all the packages to the `crates/` directory.
44 lines
1.1 KiB
Rust
44 lines
1.1 KiB
Rust
use anyhow::Ok;
|
|
use heck::ToShoutySnakeCase;
|
|
use proc_macro2::TokenStream;
|
|
use quote::quote;
|
|
use serde::Deserialize;
|
|
|
|
use crate::ident;
|
|
|
|
#[derive(Deserialize, Clone, Debug)]
|
|
struct Translation {
|
|
key: String,
|
|
english_translation: String,
|
|
}
|
|
|
|
/// Escapes characters that have special meaning inside docs.
|
|
fn escape(text: &str) -> String {
|
|
text.replace('[', "\\[").replace(']', "\\]")
|
|
}
|
|
|
|
pub fn build() -> anyhow::Result<TokenStream> {
|
|
let translations = serde_json::from_str::<Vec<Translation>>(include_str!(
|
|
"../../../extracted/translation_keys.json"
|
|
))?;
|
|
|
|
let translation_key_consts = translations
|
|
.iter()
|
|
.map(|translation| {
|
|
let const_id = ident(translation.key.to_shouty_snake_case());
|
|
let key = &translation.key;
|
|
let english_translation = &translation.english_translation;
|
|
let doc = escape(english_translation);
|
|
|
|
quote! {
|
|
#[doc = #doc]
|
|
pub const #const_id: &str = #key;
|
|
}
|
|
})
|
|
.collect::<Vec<TokenStream>>();
|
|
|
|
Ok(quote! {
|
|
#(#translation_key_consts)*
|
|
})
|
|
}
|