diff --git a/Cargo.lock b/Cargo.lock index 139bba40..29c8c005 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4015,10 +4015,10 @@ dependencies = [ "reqwest 0.12.7", "serde", "serde_json", - "supports-color", "synd-auth", "synd-feed", "synd-o11y", + "synd-stdx", "synd-test", "thiserror", "tokio", @@ -4088,10 +4088,12 @@ dependencies = [ ] [[package]] -name = "synd-kvs" +name = "synd-kvsd" version = "0.1.0" dependencies = [ "clap", + "synd-o11y", + "synd-stdx", "tokio", "tracing", "tracing-subscriber", @@ -4123,6 +4125,13 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "synd-stdx" +version = "0.1.0" +dependencies = [ + "supports-color", +] + [[package]] name = "synd-term" version = "0.3.1" diff --git a/crates/synd_api/Cargo.toml b/crates/synd_api/Cargo.toml index 1fb139bf..61dbf34e 100644 --- a/crates/synd_api/Cargo.toml +++ b/crates/synd_api/Cargo.toml @@ -20,6 +20,7 @@ path = "src/main.rs" synd-auth = { path = "../synd_auth", version = "0.2.4" } synd-feed = { path = "../synd_feed", version = "0.3.4", features = ["graphql"] } synd-o11y = { path = "../synd_o11y", version = "0.1.8" } +synd-stdx = { path = "../synd_stdx", version = "0.1.0", features = ["color"] } anyhow = { workspace = true } async-graphql = { workspace = true, features = ["tracing"] } @@ -40,7 +41,6 @@ pin-project = "1.1.4" reqwest = { workspace = true } serde = { workspace = true } serde_json = "1.0.127" -supports-color = { version = "3.0.0" } thiserror = { workspace = true } tokio = { workspace = true, features = ["macros", "rt-multi-thread", "sync"] } tokio-metrics = { version = "0.3.1", default-features = false, features = ["rt"] } diff --git a/crates/synd_api/src/main.rs b/crates/synd_api/src/main.rs index 84e42958..a38ec331 100644 --- a/crates/synd_api/src/main.rs +++ b/crates/synd_api/src/main.rs @@ -4,6 +4,7 @@ use fdlimit::Outcome; use synd_o11y::{ opentelemetry::OpenTelemetryGuard, tracing_subscriber::otel_metrics::metrics_event_filter, }; +use synd_stdx::color::{is_color_supported, ColorSupport}; use tracing::{error, info}; use synd_api::{ @@ -22,12 +23,6 @@ fn init_tracing(options: &ObservabilityOptions) -> Option { Registry, }; - let color = { - use supports_color::Stream; - supports_color::on(Stream::Stdout).is_some() - }; - let show_src = options.show_code_location; - let show_target = options.show_target; let (otel_layer, otel_guard) = match options .otlp_endpoint .as_deref() @@ -44,11 +39,15 @@ fn init_tracing(options: &ObservabilityOptions) -> Option { _ => (None, None), }; + let ansi = is_color_supported() == ColorSupport::Supported; + let show_src = options.show_code_location; + let show_target = options.show_target; + Registry::default() .with( fmt::Layer::new() - .with_ansi(color) - .with_timer(fmt::time::UtcTime::rfc_3339()) + .with_ansi(ansi) + .with_timer(fmt::time::ChronoLocal::rfc_3339()) .with_file(show_src) .with_line_number(show_src) .with_target(show_target) diff --git a/crates/synd_stdx/Cargo.toml b/crates/synd_stdx/Cargo.toml new file mode 100644 index 00000000..54eaa59a --- /dev/null +++ b/crates/synd_stdx/Cargo.toml @@ -0,0 +1,32 @@ +[package] +authors.workspace = true +categories.workspace = true +edition.workspace = true +homepage.workspace = true +keywords.workspace = true +license.workspace = true +readme.workspace = true +repository.workspace = true + +description = "syndicationd lib" +include = ["src/**/*", "CHANGELOG.md"] +name = "synd-stdx" +version = "0.1.0" + +[dependencies] +supports-color = { version = "3.0.0", optional = true } + +[features] +color = ["dep:supports-color"] + +[lints] +workspace = true + +[package.metadata.release] +pre-release-hook = ["just", "changelog", "{{version}}"] +pre-release-replacements = [ + { file = "CHANGELOG.md", search = "unreleased", replace = "v{{version}}", min = 0 }, + { file = "CHANGELOG.md", search = "__release_date__", replace = "{{date}}", min = 0 }, + { file = "README.md", search = "/synd-stdx-v.*/", replace = "/{{crate_name}}-v{{version}}/", min = 0 }, +] +tag-message = "chore: release {{crate_name}} version {{version}}" diff --git a/crates/synd_stdx/src/color/mod.rs b/crates/synd_stdx/src/color/mod.rs new file mode 100644 index 00000000..df257641 --- /dev/null +++ b/crates/synd_stdx/src/color/mod.rs @@ -0,0 +1,2 @@ +mod support; +pub use support::{is_color_supported, ColorSupport}; diff --git a/crates/synd_stdx/src/color/support.rs b/crates/synd_stdx/src/color/support.rs new file mode 100644 index 00000000..8b8d3f2b --- /dev/null +++ b/crates/synd_stdx/src/color/support.rs @@ -0,0 +1,15 @@ +#[derive(PartialEq, Eq)] +pub enum ColorSupport { + Supported, + NotSupported, +} + +/// Return whether or not the current environment supports ANSI color output. +pub fn is_color_supported() -> ColorSupport { + use supports_color::Stream; + if supports_color::on(Stream::Stdout).is_some() { + ColorSupport::Supported + } else { + ColorSupport::NotSupported + } +} diff --git a/crates/synd_stdx/src/lib.rs b/crates/synd_stdx/src/lib.rs new file mode 100644 index 00000000..f2e4bf6d --- /dev/null +++ b/crates/synd_stdx/src/lib.rs @@ -0,0 +1,2 @@ +#[cfg(feature = "color")] +pub mod color;