add constant-expression string utils

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk 2024-07-13 21:02:43 +00:00
parent 084751ae38
commit b3f2288d07
10 changed files with 47 additions and 0 deletions

13
Cargo.lock generated
View file

@ -589,6 +589,7 @@ dependencies = [
"conduit_router",
"conduit_service",
"console-subscriber",
"const-str",
"hardened_malloc-rs",
"log",
"opentelemetry",
@ -613,6 +614,7 @@ dependencies = [
"conduit_api",
"conduit_core",
"conduit_service",
"const-str",
"futures-util",
"log",
"ruma",
@ -635,6 +637,7 @@ dependencies = [
"conduit_core",
"conduit_database",
"conduit_service",
"const-str",
"futures-util",
"hmac",
"http 1.1.0",
@ -665,6 +668,7 @@ dependencies = [
"bytes",
"checked_ops",
"chrono",
"const-str",
"either",
"figment",
"hardened_malloc-rs",
@ -701,6 +705,7 @@ name = "conduit_database"
version = "0.4.5"
dependencies = [
"conduit_core",
"const-str",
"log",
"rust-rocksdb-uwu",
"tokio",
@ -720,6 +725,7 @@ dependencies = [
"conduit_api",
"conduit_core",
"conduit_service",
"const-str",
"http 1.1.0",
"http-body-util",
"hyper 1.4.1",
@ -746,6 +752,7 @@ dependencies = [
"bytes",
"conduit_core",
"conduit_database",
"const-str",
"cyborgtime",
"futures-util",
"hickory-resolver",
@ -817,6 +824,12 @@ version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
[[package]]
name = "const-str"
version = "0.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3618cccc083bb987a415d85c02ca6c9994ea5b44731ec28b9ecf09658655fba9"
[[package]]
name = "const_panic"
version = "0.2.8"

View file

@ -25,6 +25,9 @@ version = "0.4.5"
[workspace.metadata.crane]
name = "conduit"
[workspace.dependencies.const-str]
version = "0.5.7"
[workspace.dependencies.sanitize-filename]
version = "0.5.0"

View file

@ -30,6 +30,7 @@ clap.workspace = true
conduit-api.workspace = true
conduit-core.workspace = true
conduit-service.workspace = true
const-str.workspace = true
futures-util.workspace = true
log.workspace = true
ruma.workspace = true

View file

@ -41,6 +41,7 @@ bytes.workspace = true
conduit-core.workspace = true
conduit-database.workspace = true
conduit-service.workspace = true
const-str.workspace = true
futures-util.workspace = true
hmac.workspace = true
http.workspace = true

View file

@ -55,6 +55,7 @@ axum.workspace = true
bytes.workspace = true
checked_ops.workspace = true
chrono.workspace = true
const-str.workspace = true
either.workspace = true
figment.workspace = true
http-body-util.workspace = true

View file

@ -2,6 +2,30 @@ use crate::Result;
pub const EMPTY: &str = "";
/// Constant expression to bypass format! if the argument is a string literal
/// but not a format string. If the literal is a format string then String is
/// returned otherwise the input (i.e. &'static str) is returned. If multiple
/// arguments are provided the first is assumed to be a format string.
#[macro_export]
macro_rules! format_maybe {
($s:literal) => {
if $crate::is_format!($s) { std::format!($s).into() } else { $s.into() }
};
($($args:expr),*) => {
std::format!($($args),*).into()
};
}
/// Constant expression to decide if a literal is a format string. Note: could
/// use some improvement.
#[macro_export]
macro_rules! is_format {
($s:literal) => {
::const_str::contains!($s, "{") && ::const_str::contains!($s, "}")
};
}
/// Find the common prefix from a collection of strings and return a slice
/// ```
/// use conduit_core::utils::string::common_prefix;

View file

@ -36,6 +36,7 @@ zstd_compression = [
[dependencies]
conduit-core.workspace = true
const-str.workspace = true
log.workspace = true
rust-rocksdb.workspace = true
tokio.workspace = true

View file

@ -147,6 +147,7 @@ log.workspace = true
tracing.workspace = true
tracing-subscriber.workspace = true
clap.workspace = true
const-str.workspace = true
opentelemetry.workspace = true
opentelemetry.optional = true

View file

@ -55,6 +55,7 @@ conduit-admin.workspace = true
conduit-api.workspace = true
conduit-core.workspace = true
conduit-service.workspace = true
const-str.workspace = true
log.workspace = true
tokio.workspace = true
tower.workspace = true

View file

@ -42,6 +42,7 @@ base64.workspace = true
bytes.workspace = true
conduit-core.workspace = true
conduit-database.workspace = true
const-str.workspace = true
cyborgtime.workspace = true
futures-util.workspace = true
hickory-resolver.workspace = true