[gen-tag-table] Generate bytes instead of str in rust output (#6017)
diff --git a/src/gen-tag-table.py b/src/gen-tag-table.py
index f94a7f7..31f4c00 100755
--- a/src/gen-tag-table.py
+++ b/src/gen-tag-table.py
@@ -908,10 +908,22 @@
 	print ('use read_fonts::types::Tag;')
 	print ()
 	print ('pub(crate) struct LangTag {')
-	print ("    pub language: &'static str,")
+	print ('    pub language: [u8; 4],')
 	print ('    pub tag: Tag,')
 	print ('}')
 	print ()
+	print ('const fn lang(language: &[u8]) -> [u8; 4] {')
+	print ('    let mut bytes = [0; 4];')
+	print ('    let mut i = 0;')
+	print ()
+	print ('    while i < language.len() {')
+	print ('        bytes[i] = language[i];')
+	print ('        i += 1;')
+	print ('    }')
+	print ()
+	print ('    bytes')
+	print ('}')
+	print ()
 	print ('use super::tag::{lang_matches, strncmp, subtag_matches};')
 	print ()
 	print ('#[rustfmt::skip]')
@@ -922,7 +934,7 @@
 			continue
 		commented_out = len (language) == 3 and len (tags) == 1 and language == tags[0].lower ()
 		for tag in tags:
-			print ('%sLangTag { language: "%s", \ttag: %s },' % ('//  ' if commented_out else '    ', language, hb_tag_rust (tag)), end='')
+			print ('%sLangTag { language: lang(b"%s"), \ttag: %s },' % ('//  ' if commented_out else '    ', language, hb_tag_rust (tag)), end='')
 			print (' // ', end='')
 			bcp_47_name = bcp_47.names.get (language, '')
 			bcp_47_name_candidates = bcp_47_name.split ('\n')