Continue work on types

This commit is contained in:
Austen Adler 2023-02-11 17:20:11 -05:00
parent 2a7c660ba6
commit 3dff0167dd
4 changed files with 45 additions and 45 deletions

1
Cargo.lock generated
View File

@ -281,6 +281,7 @@ name = "this_algoritm"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"s2", "s2",
"serde",
] ]
[[package]] [[package]]

View File

@ -12,4 +12,5 @@ members = [
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
serde="1"
s2="0.0.12" s2="0.0.12"

7
types/Cargo.lock generated
View File

@ -1,7 +0,0 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "types"
version = "0.1.0"

View File

@ -22,58 +22,63 @@ fn main() {
.unwrap(); .unwrap();
// Write it to an array containing all words // Write it to an array containing all words
writeln!( {
&mut file, writeln!(
r#"/// Static array of `Word` &mut file,
pub const WORDS: &[Word] = &["# r#"/// Static array of `Word`
) pub const WORDS: &[Word] = &["#
.unwrap(); )
.unwrap();
for result in words.iter() { for result in words.iter() {
writeln!(&mut file, "{result:?},").unwrap(); writeln!(&mut file, "\n{result:?},").unwrap();
}
} }
writeln!(&mut file, "];\n").unwrap(); writeln!(&mut file, "];\n").unwrap();
// Make a mapping of all caps word to a reference to the `Word` entry // Make a mapping of all caps word to a reference to the `Word` entry
let mut word_map = phf_codegen::Map::new(); {
for (idx, word) in words.iter().enumerate() { let mut word_map = phf_codegen::Map::new();
let idx_str = format!("&WORDS[{idx}]"); for (idx, word) in words.iter().enumerate() {
word_map.entry(word.word.to_uppercase(), &idx_str); let idx_str = format!("&WORDS[{idx}]");
} word_map.entry(word.word.to_uppercase(), &idx_str);
writeln!( }
&mut file, writeln!(
r#"/// Mapping from all caps `&str` to `&'static Word` &mut file,
r#"/// Mapping from all caps `&str` to `&'static Word`
pub static WORD_MAP: phf::Map<&'static str, &'static Word> = pub static WORD_MAP: phf::Map<&'static str, &'static Word> =
{};"#, {};"#,
word_map.build() word_map.build()
) )
}
.unwrap(); .unwrap();
// Make a mapping of numbers to `Word`s // Make a mapping of numbers to `Word`s
let word_number_to_idx = words
.iter()
.enumerate()
.map(|(idx, w)| (w.number, idx))
.collect::<Vec<(u16, usize)>>();
writeln!(
&mut file,
"pub const NUMBER_TO_WORD: &[&[&'static Word]] = &["
)
.unwrap();
for entry in word_number_to_idx
.as_slice()
.group_by(|(number1, _idx1), (number2, _idx2)| number1 == number2)
{ {
write!(&mut file, "\t&[",).unwrap(); let word_number_to_idx = words
.iter()
.enumerate()
.map(|(idx, w)| (w.number, idx))
.collect::<Vec<(u16, usize)>>();
for idx in entry.iter().map(|(_w, idx)| idx) { writeln!(
write!(&mut file, "&WORDS[{idx}],").unwrap(); &mut file,
"pub const NUMBER_TO_WORD: &[&[&'static Word]] = &["
)
.unwrap();
for entry in word_number_to_idx
.as_slice()
.group_by(|(number1, _idx1), (number2, _idx2)| number1 == number2)
{
write!(&mut file, "\t&[",).unwrap();
for idx in entry.iter().map(|(_w, idx)| idx) {
write!(&mut file, "&WORDS[{idx}],").unwrap();
}
writeln!(&mut file, "],").unwrap();
} }
writeln!(&mut file, "],").unwrap(); writeln!(&mut file, "];\n").unwrap();
} }
writeln!(&mut file, "];\n").unwrap();
} }
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]