Darktide Mod Manager #39
5 changed files with 81 additions and 2 deletions
23
Cargo.lock
generated
23
Cargo.lock
generated
|
@ -291,6 +291,28 @@ dependencies = [
|
||||||
"os_str_bytes",
|
"os_str_bytes",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cli-table"
|
||||||
|
version = "0.4.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "adfbb116d9e2c4be7011360d0c0bee565712c11e969c9609b25b619366dc379d"
|
||||||
|
dependencies = [
|
||||||
|
"cli-table-derive",
|
||||||
|
"termcolor",
|
||||||
|
"unicode-width",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cli-table-derive"
|
||||||
|
version = "0.4.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2af3bfb9da627b0a6c467624fb7963921433774ed435493b5c08a3053e829ad4"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clipboard-win"
|
name = "clipboard-win"
|
||||||
version = "4.4.2"
|
version = "4.4.2"
|
||||||
|
@ -654,6 +676,7 @@ name = "dtmt"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
|
"cli-table",
|
||||||
"color-eyre",
|
"color-eyre",
|
||||||
"confy",
|
"confy",
|
||||||
"csv-async",
|
"csv-async",
|
||||||
|
|
|
@ -26,6 +26,7 @@ confy = "0.5.1"
|
||||||
zip = "0.6.3"
|
zip = "0.6.3"
|
||||||
string_template = "0.2.1"
|
string_template = "0.2.1"
|
||||||
promptly = "0.3.1"
|
promptly = "0.3.1"
|
||||||
|
cli-table = { version = "0.4.7", default-features = false, features = ["derive"] }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
tempfile = "3.3.0"
|
tempfile = "3.3.0"
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
use clap::{value_parser, Arg, ArgAction, ArgMatches, Command, ValueEnum};
|
use clap::{value_parser, Arg, ArgAction, ArgMatches, Command, ValueEnum};
|
||||||
|
use cli_table::{print_stdout, WithTitle};
|
||||||
use color_eyre::eyre::{Context, Result};
|
use color_eyre::eyre::{Context, Result};
|
||||||
use color_eyre::{Help, SectionExt};
|
use color_eyre::{Help, SectionExt};
|
||||||
|
use sdk::murmur::{IdString64, Murmur32, Murmur64};
|
||||||
use tokio::fs::File;
|
use tokio::fs::File;
|
||||||
use tokio::io::{AsyncBufReadExt, BufReader};
|
use tokio::io::{AsyncBufReadExt, BufReader};
|
||||||
use tokio_stream::wrappers::LinesStream;
|
use tokio_stream::wrappers::LinesStream;
|
||||||
|
@ -27,6 +29,29 @@ impl From<HashGroup> for sdk::murmur::HashGroup {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(cli_table::Table)]
|
||||||
|
struct TableRow {
|
||||||
|
#[table(title = "Value")]
|
||||||
|
value: String,
|
||||||
|
#[table(title = "Murmur64")]
|
||||||
|
long: Murmur64,
|
||||||
|
#[table(title = "Murmur32")]
|
||||||
|
short: Murmur32,
|
||||||
|
#[table(title = "Group")]
|
||||||
|
group: sdk::murmur::HashGroup,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<&sdk::murmur::Entry> for TableRow {
|
||||||
|
fn from(entry: &sdk::murmur::Entry) -> Self {
|
||||||
|
Self {
|
||||||
|
value: entry.value().clone(),
|
||||||
|
long: entry.long(),
|
||||||
|
short: entry.short(),
|
||||||
|
group: entry.group(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn command_definition() -> Command {
|
pub(crate) fn command_definition() -> Command {
|
||||||
Command::new("dictionary")
|
Command::new("dictionary")
|
||||||
.about("Manipulate a hash dictionary file.")
|
.about("Manipulate a hash dictionary file.")
|
||||||
|
@ -67,6 +92,7 @@ pub(crate) fn command_definition() -> Command {
|
||||||
.value_parser(value_parser!(PathBuf)),
|
.value_parser(value_parser!(PathBuf)),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
.subcommand(Command::new("show").about("Show the contents of the dictionary"))
|
||||||
.subcommand(Command::new("save").about(
|
.subcommand(Command::new("save").about(
|
||||||
"Save back the currently loaded dictionary, with hashes pre-computed. \
|
"Save back the currently loaded dictionary, with hashes pre-computed. \
|
||||||
Pre-computing hashes speeds up loading large dictionaries, as they would \
|
Pre-computing hashes speeds up loading large dictionaries, as they would \
|
||||||
|
@ -176,6 +202,14 @@ pub(crate) async fn run(mut ctx: sdk::Context, matches: &ArgMatches) -> Result<(
|
||||||
.await
|
.await
|
||||||
.wrap_err("Failed to write dictionary to disk")
|
.wrap_err("Failed to write dictionary to disk")
|
||||||
}
|
}
|
||||||
|
Some(("show", _)) => {
|
||||||
|
let lookup = &ctx.lookup;
|
||||||
|
let rows: Vec<_> = lookup.entries().iter().map(TableRow::from).collect();
|
||||||
|
|
||||||
|
print_stdout(rows.with_title())?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
_ => unreachable!(
|
_ => unreachable!(
|
||||||
"clap is configured to require a subcommand, and they're all handled above"
|
"clap is configured to require a subcommand, and they're all handled above"
|
||||||
),
|
),
|
||||||
|
|
|
@ -55,6 +55,24 @@ pub struct Entry {
|
||||||
group: HashGroup,
|
group: HashGroup,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Entry {
|
||||||
|
pub fn value(&self) -> &String {
|
||||||
|
&self.value
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn long(&self) -> Murmur64 {
|
||||||
|
self.long
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn short(&self) -> Murmur32 {
|
||||||
|
self.short
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn group(&self) -> HashGroup {
|
||||||
|
self.group
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct Dictionary {
|
pub struct Dictionary {
|
||||||
entries: Vec<Entry>,
|
entries: Vec<Entry>,
|
||||||
}
|
}
|
||||||
|
@ -172,4 +190,8 @@ impl Dictionary {
|
||||||
pub fn is_empty(&self) -> bool {
|
pub fn is_empty(&self) -> bool {
|
||||||
self.entries.is_empty()
|
self.entries.is_empty()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn entries(&self) -> &Vec<Entry> {
|
||||||
|
&self.entries
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,8 +13,7 @@ mod murmurhash64;
|
||||||
|
|
||||||
pub const SEED: u32 = 0;
|
pub const SEED: u32 = 0;
|
||||||
|
|
||||||
pub use dictionary::Dictionary;
|
pub use dictionary::{Dictionary, Entry, HashGroup};
|
||||||
pub use dictionary::HashGroup;
|
|
||||||
pub use murmurhash64::hash;
|
pub use murmurhash64::hash;
|
||||||
pub use murmurhash64::hash32;
|
pub use murmurhash64::hash32;
|
||||||
pub use murmurhash64::hash_inverse as inverse;
|
pub use murmurhash64::hash_inverse as inverse;
|
||||||
|
|
Loading…
Add table
Reference in a new issue