Reviewed-on: #323
Co-authored-by: Greg Burd <greg@burd.me>
Co-committed-by: Greg Burd <greg@burd.me>
This commit is contained in:
Gregory Burd 2023-12-07 20:03:13 +00:00 committed by Gregory Burd
parent 216f078d44
commit 201ec39dd2
16 changed files with 65 additions and 23 deletions

View file

@ -1,5 +1,5 @@
[package]
edition = "2018"
edition = "2021"
authors = [
"Richard Newman <rnewman@twinql.com>",
"Nicholas Alexander <nalexander@mozilla.com>",
@ -14,7 +14,7 @@ authors = [
"Gregory Burd <greg@burd.me>",
]
name = "mentat"
version = "0.13.0"
version = "0.14.0"
build = "build/version.rs"
[features]
@ -50,7 +50,7 @@ failure = "~0.1"
lazy_static = "~1.4"
time = "0.3.1"
log = "~0.4"
uuid = { version = "~1.0", features = ["v4", "serde"] }
uuid = { version = "~1", features = ["v4", "serde"] }
[dependencies.rusqlite]
version = "~0.29"

View file

@ -1,3 +1,4 @@
.PHONY: outdated fix
outdated:
for p in $(dirname $(ls Cargo.toml */Cargo.toml */*/Cargo.toml)); do echo $p; (cd $p; cargo outdated -R); done
@ -6,3 +7,5 @@ outdated:
fix:
$(for p in $(dirname $(ls Cargo.toml */Cargo.toml */*/Cargo.toml)); do echo $p; (cd $p; cargo fix --allow-dirty --broken-code --edition-idioms); done)
upgrades:
cargo upgrades

View file

@ -14,7 +14,7 @@ use std::process::exit;
/// MIN_VERSION should be changed when there's a new minimum version of rustc required
/// to build the project.
static MIN_VERSION: &str = "1.43.0";
static MIN_VERSION: &str = "1.69.0";
fn main() {
let ver = version().unwrap();

View file

@ -13,7 +13,7 @@ enum-set = "~0.0.8"
lazy_static = "~1.4"
indexmap = "~1.9"
ordered-float = { version = "~2.8", features = ["serde"] }
uuid = { version = "~1.0", features = ["v4", "serde"] }
uuid = { version = "~1", features = ["v4", "serde"] }
serde = { version = "~1.0", features = ["rc"] }
serde_derive = "~1.0"
bytes = { version = "1.0.1", features = ["serde"] }

View file

@ -9,7 +9,7 @@ enum-set = "~0.0"
failure = "~0.1"
indexmap = "~1.9"
ordered-float = { version = "~2.8", features = ["serde"] }
uuid = { version = "~1.0", features = ["v4", "serde"] }
uuid = { version = "~1", features = ["v4", "serde"] }
[dependencies.core_traits]
path = "../core-traits"

View file

@ -15,7 +15,7 @@ itertools = "~0.10"
num = "~0.4"
ordered-float = "~2.8"
pretty = "~0.12"
uuid = { version = "~1.0", features = ["v4", "serde"] }
uuid = { version = "~1", features = ["v4", "serde"] }
serde = { version = "~1.0", optional = true }
serde_derive = { version = "~1.0", optional = true }
peg = "~0.8"

View file

@ -128,7 +128,7 @@ peg::parser!(pub grammar parse() for str {
// result = r#""foo\\bar""#
// For the typical case, string_normal_chars will match multiple, leading to a single-element vec.
pub rule raw_text() -> String = "\"" t:((string_special_char() / string_normal_chars())*) "\""
{ t.join(&"") }
{ t.join("") }
pub rule text() -> SpannedValue
= v:raw_text() { SpannedValue::Text(v) }
@ -153,16 +153,16 @@ peg::parser!(pub grammar parse() for str {
"#instmicros" whitespace()+ d:$( digit()+ ) {
let micros = d.parse::<i64>().unwrap();
let seconds: i64 = micros / 1_000_000;
let nanos: u32 = ((micros % 1_000_000).abs() as u32) * 1000;
Utc.timestamp(seconds, nanos)
let nanos: u32 = ((micros % 1_000_000).unsigned_abs() as u32) * 1000;
Utc.timestamp_opt(seconds, nanos).unwrap()
}
rule inst_millis() -> DateTime<Utc> =
"#instmillis" whitespace()+ d:$( digit()+ ) {
let millis = d.parse::<i64>().unwrap();
let seconds: i64 = millis / 1000;
let nanos: u32 = ((millis % 1000).abs() as u32) * 1_000_000;
Utc.timestamp(seconds, nanos)
let nanos: u32 = ((millis % 1000).unsigned_abs() as u32) * 1_000_000;
Utc.timestamp_opt(seconds, nanos).unwrap()
}
rule inst() -> SpannedValue = t:(inst_millis() / inst_micros() / inst_string())

View file

@ -121,7 +121,7 @@ impl NamespaceableName {
if name.starts_with('_') {
Self::new(self.namespace(), &name[1..])
} else {
Self::new(self.namespace(), &format!("_{}", name))
Self::new(self.namespace(), format!("_{}", name))
}
}

View file

@ -1028,8 +1028,8 @@ impl ParsedQuery {
Ok(ParsedQuery {
find_spec: find_spec.ok_or("expected :find")?,
default_source: SrcVar::DefaultSrc,
with: with.unwrap_or_else(Vec::new), //
in_vars: in_vars.unwrap_or_else(Vec::new),
with: with.unwrap_or_default(),
in_vars: in_vars.unwrap_or_default(),
in_sources: BTreeSet::default(),
limit: limit.unwrap_or(Limit::None),
where_clauses: where_clauses.ok_or("expected :where")?,

View file

@ -668,7 +668,7 @@ pub trait FromMicros {
impl FromMicros for DateTime<Utc> {
fn from_micros(ts: i64) -> Self {
Utc.timestamp(ts / 1_000_000, ((ts % 1_000_000).abs() as u32) * 1_000)
Utc.timestamp_opt(ts / 1_000_000, ((ts % 1_000_000).unsigned_abs() as u32) * 1_000).unwrap()
}
}
@ -690,7 +690,7 @@ pub trait FromMillis {
impl FromMillis for DateTime<Utc> {
fn from_millis(ts: i64) -> Self {
Utc.timestamp(ts / 1_000, ((ts % 1_000).abs() as u32) * 1_000)
Utc.timestamp_opt(ts / 1_000, ((ts % 1_000).unsigned_abs() as u32) * 1_000).unwrap()
}
}

View file

@ -21,9 +21,9 @@ use crate::types::Value;
/// TODO: implement `merge` for [Value], following the `concat`/`SliceConcatExt` pattern.
pub fn merge(left: &Value, right: &Value) -> Option<Value> {
match (left, right) {
(&Value::Map(ref l), &Value::Map(ref r)) => {
(Value::Map(l), Value::Map(r)) => {
let mut result = l.clone();
result.extend(r.clone().into_iter());
result.extend(r.clone());
Some(Value::Map(result))
}
_ => None,

1
rust-toolchain Normal file
View file

@ -0,0 +1 @@
nightly-2023-11-27

38
shell.nix Normal file
View file

@ -0,0 +1,38 @@
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell rec {
buildInputs = with pkgs; [
# Necessary for the openssl-sys crate:
pkgs.openssl
pkgs.pkg-config
# Compiler
clang
# Replace llvmPackages with llvmPackages_X, where X is the latest LLVM version (at the time of writing, 16)
llvmPackages.bintools
rustup
];
RUSTC_VERSION = pkgs.lib.readFile ./rust-toolchain;
# https://github.com/rust-lang/rust-bindgen#environment-variables
LIBCLANG_PATH = pkgs.lib.makeLibraryPath [ pkgs.llvmPackages_latest.libclang.lib ];
shellHook = ''
export PATH=$PATH:''${CARGO_HOME:-~/.cargo}/bin
export PATH=$PATH:''${RUSTUP_HOME:-~/.rustup}/toolchains/$RUSTC_VERSION-x86_64-unknown-linux-gnu/bin/
'';
# Add precompiled library to rustc search path
RUSTFLAGS = (builtins.map (a: ''-L ${a}/lib'') [
# add libraries here (e.g. pkgs.libvmi)
]);
# Add glibc, clang, glib and other headers to bindgen search path
BINDGEN_EXTRA_CLANG_ARGS =
# Includes with normal include path
(builtins.map (a: ''-I"${a}/include"'') [
# add dev libraries here (e.g. pkgs.libvmi.dev)
pkgs.glibc.dev
])
# Includes with special directory paths
++ [
''-I"${pkgs.llvmPackages_latest.libclang.lib}/lib/clang/${pkgs.llvmPackages_latest.libclang.version}/include"''
''-I"${pkgs.glib.dev}/include/glib-2.0"''
''-I${pkgs.glib.out}/lib/glib-2.0/include/''
];
}

View file

@ -254,7 +254,7 @@ fn test_unbound_inputs() {
fn test_instants_and_uuids() {
// We assume, perhaps foolishly, that the clocks on test machines won't lose more than an
// hour while this test is running.
let start = Utc::now() + FixedOffset::west(60 * 60);
let start = Utc::now() + FixedOffset::west_opt(60 * 60).unwrap();
let mut c = new_connection("").expect("Couldn't open conn.");
let mut conn = Conn::connect(&mut c).expect("Couldn't open DB.");

View file

@ -16,7 +16,7 @@ failure_derive = "~0.1"
http = "~0.2"
hyper = "~0.14"
serde_json = "~1.0"
uuid = { version = "~1.0" }
uuid = { version = "~1" }
[dependencies.rusqlite]
version = "~0.29"

View file

@ -1,5 +1,5 @@
[package]
edition = "2018"
edition = "2021"
name = "mentat_tolstoy"
version = "0.0.2"
workspace = ".."
@ -22,7 +22,7 @@ serde_json = "~1.0"
serde_cbor = "~0.11"
serde_derive = "~1.0"
lazy_static = "~1.4"
uuid = { version = "~1.0", features = ["v4", "serde"] }
uuid = { version = "~1", features = ["v4", "serde"] }
[dependencies.rusqlite]
version = "~0.29"