Skip to content

Commit c6ac4e4

Browse files
committed
added toml/data validation and new binary just for that
1 parent 1693aee commit c6ac4e4

File tree

19 files changed

+811
-349
lines changed

19 files changed

+811
-349
lines changed

AUTHORS

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
Susan Student <susan.student@umontana.edu>
2-
Travis Wheeler <travis.wheeler@umontana.edu>
1+
Ken Youens-Clark <kyclark@arizona.edu>
2+
Travis Wheeler <twheeler@arizona.edu>

Cargo.lock

Lines changed: 92 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,5 @@ serde_with = "3.16.1"
2121
sha1 = "0.10.6"
2222
toml = "0.9.11"
2323
urlencoding = "2.1.3"
24+
validator = { version = "0.20.0", features = ["derive"] }
2425
which = "8.0.0"

src/bin/mdr-toml.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
use anyhow::Result;
2+
use clap::Parser;
3+
use mdr::metadata::Meta;
4+
use std::path::PathBuf;
5+
6+
// --------------------------------------------------
7+
#[derive(Parser, Debug)]
8+
pub struct Args {
9+
#[arg()]
10+
pub filename: PathBuf,
11+
}
12+
13+
// --------------------------------------------------
14+
fn main() {
15+
if let Err(e) = run(Args::parse()) {
16+
eprintln!("{e}");
17+
std::process::exit(1);
18+
}
19+
}
20+
21+
// --------------------------------------------------
22+
fn run(args: Args) -> Result<()> {
23+
let meta = Meta::from_file(&args.filename)?;
24+
println!("{}", meta.check().join("\n"));
25+
Ok(())
26+
}

src/common.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use regex::Regex;
44
use std::{
55
fs::{self, File},
66
io::Write,
7-
path::PathBuf,
7+
path::{Path, PathBuf},
88
process::Command,
99
};
1010
use which::which;
@@ -24,7 +24,7 @@ pub fn read_file(path: &PathBuf) -> Result<String> {
2424
}
2525

2626
// --------------------------------------------------
27-
pub fn get_md5(path: &PathBuf) -> Result<String> {
27+
pub fn get_md5(path: &Path) -> Result<String> {
2828
info!("Getting MD5 '{}'", path.display());
2929
let input_dir = path.parent().unwrap();
3030
let filename = path.file_name().unwrap().to_string_lossy().to_string();

src/constants.rs

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,85 @@
1+
use regex::Regex;
2+
use std::sync::LazyLock;
3+
14
pub const MAX_FILE_SIZE_GB: u64 = 40;
25
pub const MAX_FILE_SIZE_BYTES: u64 = MAX_FILE_SIZE_GB * 10u64.pow(9);
6+
7+
pub static ORCID_REGEX: LazyLock<Regex> =
8+
LazyLock::new(|| Regex::new(r"^\d{4}-\d{4}-\d{4}-[A-Z\d]{4}$").unwrap());
9+
10+
pub static PDB_REGEX: LazyLock<Regex> =
11+
LazyLock::new(|| Regex::new(r"^[A-Za-z0-9]{4}$").unwrap());
12+
13+
pub static DOI_REGEX: LazyLock<Regex> =
14+
LazyLock::new(|| Regex::new(r"^(10\.\d{4,5}\/[\S]+[^;,.\s])$").unwrap());
15+
16+
pub static NOT_WHITESPACE_REGEX: LazyLock<Regex> =
17+
LazyLock::new(|| Regex::new(r"\S+").unwrap());
18+
19+
pub const SOLVENT_CONCENTRATION_MIN: f64 = 0.;
20+
pub const SOLVENT_CONCENTRATION_MAX: f64 = 1.;
21+
pub const WATER_DENSITY_MIN: f32 = 900.;
22+
pub const WATER_DENSITY_MAX: f32 = 1100.;
23+
pub const METADATA_TOML_VERSION: u32 = 2;
24+
pub const TEMP_K_MIN: u32 = 275;
25+
pub const TEMP_K_MAX: u32 = 700;
26+
pub const TIMESTEP_FS_MIN: u32 = 0;
27+
pub const TIMESTEP_FS_MAX: u32 = 4;
28+
pub const VALID_WATER_MODEL: &[&str] = &[
29+
"AMOEBA",
30+
"BF",
31+
"BK3",
32+
"BMW",
33+
"COS/G2",
34+
"COS/G3",
35+
"CVFF",
36+
"DC",
37+
"ELBA",
38+
"EVB",
39+
"F3C",
40+
"HIPPO",
41+
"iAMOEBA",
42+
"KKY",
43+
"LEWIS",
44+
"MARTINI polarizable water",
45+
"MARTINI water",
46+
"MB-pol",
47+
"MCY",
48+
"MS-EVB",
49+
"mW",
50+
"OPC",
51+
"OPC3",
52+
"OSS2",
53+
"POL3",
54+
"q-SPC/Fw",
55+
"q-TIP4P/F",
56+
"ReaxFF",
57+
"RWK",
58+
"SCME",
59+
"SDK/CMM",
60+
"SPC",
61+
"SPC/E",
62+
"SPC/Fd",
63+
"SPC/Fw",
64+
"SPC/Fw",
65+
"ST2",
66+
"SWM4-NDP",
67+
"SWM6",
68+
"TIP3P-FB",
69+
"TIP3P",
70+
"TIP3P/Fs",
71+
"TIP4P",
72+
"TIP4P-CG",
73+
"TIP4P-D",
74+
"TIP4P-FB",
75+
"TIP4P/2005",
76+
"TIP4P/Ew",
77+
"TIP4P/Ice",
78+
"TIP5P",
79+
"TIP5P/2018",
80+
"TIP5P/E",
81+
"TIP6P",
82+
"TTM2-F",
83+
"TTM3-F",
84+
"TTM4-F",
85+
];

src/lib.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
pub mod common;
2+
pub mod constants;
3+
pub mod metadata;
4+
pub mod process;
5+
pub mod reprocess;
6+
pub mod ticket;
7+
pub mod types;
8+
pub mod validate;

src/main.rs

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
1-
mod common;
2-
mod constants;
3-
mod metadata;
4-
mod process;
5-
mod reprocess;
6-
mod ticket;
7-
mod types;
8-
mod validate;
9-
101
use anyhow::Result;
112
use clap::Parser;
12-
//use diesel::prelude::*;
13-
use metadata::Meta;
3+
use mdr::{
4+
metadata::Meta,
5+
process, reprocess, ticket,
6+
types::{Cli, Command, LogLevel},
7+
validate,
8+
};
149
use std::{fs::File, io::BufWriter};
15-
use types::{Cli, Command, LogLevel};
10+
//use validator::Validate;
1611

1712
// --------------------------------------------------
1813
fn main() {
@@ -50,9 +45,27 @@ fn run(args: Cli) -> Result<()> {
5045
Ok(())
5146
}
5247
Some(Command::MetaCheck(args)) => {
53-
let meta = Meta::from_file(&args.filename)?;
54-
dbg!(&meta);
55-
println!("{} OK", args.filename.display());
48+
let messages = match Meta::from_file(&args.filename) {
49+
Ok(meta) => meta.check(),
50+
Err(e) => vec![format!(
51+
"Unable to parse {}: {}",
52+
args.filename.display(),
53+
e.to_string()
54+
)],
55+
//Ok(meta) => match meta.validate() {
56+
// Ok(()) => vec![],
57+
// Err(errors) => {
58+
// dbg!(&errors);
59+
// let mut ret = vec![];
60+
// for (field, _val) in errors.errors() {
61+
// ret.push(format!("{field}"));
62+
// }
63+
// ret
64+
// }
65+
//},
66+
};
67+
68+
println!("{}", messages.join("\n"));
5669
Ok(())
5770
}
5871
Some(Command::Ticket(args)) => {

0 commit comments

Comments
 (0)