♻️ migrate to core json

This commit is contained in:
Nanaloveyuki
2026-07-17 21:19:11 +08:00
parent bcfb35d7ae
commit a58a0747bb
49 changed files with 533 additions and 601 deletions
+64 -66
View File
@@ -831,29 +831,29 @@ test "async json helpers export stable structured shapes" {
flush=AsyncFlushPolicy::Batch,
),
)
let config_obj = config_json.as_object().unwrap()
let config_obj = config_json.expect_json_object()
inspect(
@json_parser.stringify(config_json),
config_json.stringify(),
content="{\"max_pending\":8,\"max_batch\":3,\"linger_ms\":25,\"overflow\":\"DropOldest\",\"flush\":\"Batch\"}",
)
inspect(
config_obj.get("max_pending").unwrap().as_number().unwrap().to_int(),
config_obj.get("max_pending").unwrap().expect_json_number().to_int(),
content="8",
)
inspect(
config_obj.get("max_batch").unwrap().as_number().unwrap().to_int(),
config_obj.get("max_batch").unwrap().expect_json_number().to_int(),
content="3",
)
inspect(
config_obj.get("linger_ms").unwrap().as_number().unwrap().to_int(),
config_obj.get("linger_ms").unwrap().expect_json_number().to_int(),
content="25",
)
inspect(
config_obj.get("overflow").unwrap().as_string().unwrap(),
config_obj.get("overflow").unwrap().expect_json_string(),
content="DropOldest",
)
inspect(
config_obj.get("flush").unwrap().as_string().unwrap(),
config_obj.get("flush").unwrap().expect_json_string(),
content="Batch",
)
@@ -874,85 +874,84 @@ test "async json helpers export stable structured shapes" {
),
),
)
let build_obj = build_json.as_object().unwrap()
let logger_obj = build_obj.get("logger").unwrap().as_object().unwrap()
let sink_obj = logger_obj.get("sink").unwrap().as_object().unwrap()
let build_obj = build_json.expect_json_object()
let logger_obj = build_obj.get("logger").unwrap().expect_json_object()
let sink_obj = logger_obj.get("sink").unwrap().expect_json_object()
let formatter_obj = sink_obj
.get("text_formatter")
.unwrap()
.as_object()
.unwrap()
let async_obj = build_obj.get("async_config").unwrap().as_object().unwrap()
.expect_json_object()
let async_obj = build_obj.get("async_config").unwrap().expect_json_object()
inspect(
logger_obj.get("min_level").unwrap().as_string().unwrap(),
logger_obj.get("min_level").unwrap().expect_json_string(),
content="WARN",
)
inspect(
logger_obj.get("target").unwrap().as_string().unwrap(),
logger_obj.get("target").unwrap().expect_json_string(),
content="async.roundtrip",
)
inspect(
logger_obj.get("timestamp").unwrap().as_bool().unwrap(),
logger_obj.get("timestamp").unwrap().expect_json_bool(),
content="true",
)
inspect(logger_obj.get("queue") is None, content="true")
inspect(
sink_obj.get("kind").unwrap().as_string().unwrap(),
sink_obj.get("kind").unwrap().expect_json_string(),
content="text_console",
)
inspect(sink_obj.get("path").unwrap().as_string().unwrap(), content="")
inspect(sink_obj.get("append").unwrap().as_bool().unwrap(), content="true")
inspect(sink_obj.get("path").unwrap().expect_json_string(), content="")
inspect(sink_obj.get("append").unwrap().expect_json_bool(), content="true")
inspect(
sink_obj.get("auto_flush").unwrap().as_bool().unwrap(),
sink_obj.get("auto_flush").unwrap().expect_json_bool(),
content="true",
)
inspect(
formatter_obj.get("show_timestamp").unwrap().as_bool().unwrap(),
formatter_obj.get("show_timestamp").unwrap().expect_json_bool(),
content="true",
)
inspect(
formatter_obj.get("separator").unwrap().as_string().unwrap(),
formatter_obj.get("separator").unwrap().expect_json_string(),
content=" ",
)
inspect(
formatter_obj.get("field_separator").unwrap().as_string().unwrap(),
formatter_obj.get("field_separator").unwrap().expect_json_string(),
content=" ",
)
inspect(
formatter_obj.get("template").unwrap().as_string().unwrap(),
formatter_obj.get("template").unwrap().expect_json_string(),
content="",
)
inspect(
formatter_obj.get("color_mode").unwrap().as_string().unwrap(),
formatter_obj.get("color_mode").unwrap().expect_json_string(),
content="never",
)
inspect(
formatter_obj.get("color_support").unwrap().as_string().unwrap(),
formatter_obj.get("color_support").unwrap().expect_json_string(),
content="truecolor",
)
inspect(
formatter_obj.get("style_markup").unwrap().as_string().unwrap(),
formatter_obj.get("style_markup").unwrap().expect_json_string(),
content="full",
)
inspect(
async_obj.get("max_pending").unwrap().as_number().unwrap().to_int(),
async_obj.get("max_pending").unwrap().expect_json_number().to_int(),
content="2",
)
inspect(
async_obj.get("max_batch").unwrap().as_number().unwrap().to_int(),
async_obj.get("max_batch").unwrap().expect_json_number().to_int(),
content="5",
)
inspect(
async_obj.get("linger_ms").unwrap().as_number().unwrap().to_int(),
async_obj.get("linger_ms").unwrap().expect_json_number().to_int(),
content="40",
)
inspect(
async_obj.get("overflow").unwrap().as_string().unwrap(),
async_obj.get("overflow").unwrap().expect_json_string(),
content="DropNewest",
)
inspect(
async_obj.get("flush").unwrap().as_string().unwrap(),
async_obj.get("flush").unwrap().expect_json_string(),
content="Shutdown",
)
}
@@ -961,103 +960,102 @@ test "async json helpers export stable structured shapes" {
test "async build config json export materializes parsed omitted defaults" {
let parsed = parse_async_logger_build_config_text("{}")
let build_json = async_logger_build_config_to_json(parsed)
let build_obj = build_json.as_object().unwrap()
let logger_obj = build_obj.get("logger").unwrap().as_object().unwrap()
let sink_obj = logger_obj.get("sink").unwrap().as_object().unwrap()
let build_obj = build_json.expect_json_object()
let logger_obj = build_obj.get("logger").unwrap().expect_json_object()
let sink_obj = logger_obj.get("sink").unwrap().expect_json_object()
let formatter_obj = sink_obj
.get("text_formatter")
.unwrap()
.as_object()
.unwrap()
let async_obj = build_obj.get("async_config").unwrap().as_object().unwrap()
.expect_json_object()
let async_obj = build_obj.get("async_config").unwrap().expect_json_object()
inspect(
@json_parser.stringify(build_json),
build_json.stringify(),
content="{\"logger\":{\"min_level\":\"INFO\",\"target\":\"\",\"timestamp\":false,\"sink\":{\"kind\":\"console\",\"path\":\"\",\"append\":true,\"auto_flush\":true,\"text_formatter\":{\"show_timestamp\":true,\"show_level\":true,\"show_target\":true,\"show_fields\":true,\"separator\":\" \",\"field_separator\":\" \",\"template\":\"\",\"color_mode\":\"never\",\"color_support\":\"truecolor\",\"style_markup\":\"full\",\"target_style_markup\":\"disabled\",\"fields_style_markup\":\"disabled\"}}},\"async_config\":{\"max_pending\":0,\"max_batch\":1,\"linger_ms\":0,\"overflow\":\"Blocking\",\"flush\":\"Never\"}}",
)
inspect(
logger_obj.get("min_level").unwrap().as_string().unwrap(),
logger_obj.get("min_level").unwrap().expect_json_string(),
content="INFO",
)
inspect(logger_obj.get("target").unwrap().as_string().unwrap(), content="")
inspect(logger_obj.get("target").unwrap().expect_json_string(), content="")
inspect(
logger_obj.get("timestamp").unwrap().as_bool().unwrap(),
logger_obj.get("timestamp").unwrap().expect_json_bool(),
content="false",
)
inspect(logger_obj.get("queue") is None, content="true")
inspect(sink_obj.get("kind").unwrap().as_string().unwrap(), content="console")
inspect(sink_obj.get("path").unwrap().as_string().unwrap(), content="")
inspect(sink_obj.get("append").unwrap().as_bool().unwrap(), content="true")
inspect(sink_obj.get("kind").unwrap().expect_json_string(), content="console")
inspect(sink_obj.get("path").unwrap().expect_json_string(), content="")
inspect(sink_obj.get("append").unwrap().expect_json_bool(), content="true")
inspect(
sink_obj.get("auto_flush").unwrap().as_bool().unwrap(),
sink_obj.get("auto_flush").unwrap().expect_json_bool(),
content="true",
)
inspect(
formatter_obj.get("show_timestamp").unwrap().as_bool().unwrap(),
formatter_obj.get("show_timestamp").unwrap().expect_json_bool(),
content="true",
)
inspect(
formatter_obj.get("show_level").unwrap().as_bool().unwrap(),
formatter_obj.get("show_level").unwrap().expect_json_bool(),
content="true",
)
inspect(
formatter_obj.get("show_target").unwrap().as_bool().unwrap(),
formatter_obj.get("show_target").unwrap().expect_json_bool(),
content="true",
)
inspect(
formatter_obj.get("show_fields").unwrap().as_bool().unwrap(),
formatter_obj.get("show_fields").unwrap().expect_json_bool(),
content="true",
)
inspect(
formatter_obj.get("separator").unwrap().as_string().unwrap(),
formatter_obj.get("separator").unwrap().expect_json_string(),
content=" ",
)
inspect(
formatter_obj.get("field_separator").unwrap().as_string().unwrap(),
formatter_obj.get("field_separator").unwrap().expect_json_string(),
content=" ",
)
inspect(
formatter_obj.get("template").unwrap().as_string().unwrap(),
formatter_obj.get("template").unwrap().expect_json_string(),
content="",
)
inspect(
formatter_obj.get("color_mode").unwrap().as_string().unwrap(),
formatter_obj.get("color_mode").unwrap().expect_json_string(),
content="never",
)
inspect(
formatter_obj.get("color_support").unwrap().as_string().unwrap(),
formatter_obj.get("color_support").unwrap().expect_json_string(),
content="truecolor",
)
inspect(
formatter_obj.get("style_markup").unwrap().as_string().unwrap(),
formatter_obj.get("style_markup").unwrap().expect_json_string(),
content="full",
)
inspect(
formatter_obj.get("target_style_markup").unwrap().as_string().unwrap(),
formatter_obj.get("target_style_markup").unwrap().expect_json_string(),
content="disabled",
)
inspect(
formatter_obj.get("fields_style_markup").unwrap().as_string().unwrap(),
formatter_obj.get("fields_style_markup").unwrap().expect_json_string(),
content="disabled",
)
inspect(formatter_obj.get("style_tags") is None, content="true")
inspect(
async_obj.get("max_pending").unwrap().as_number().unwrap().to_int(),
async_obj.get("max_pending").unwrap().expect_json_number().to_int(),
content="0",
)
inspect(
async_obj.get("max_batch").unwrap().as_number().unwrap().to_int(),
async_obj.get("max_batch").unwrap().expect_json_number().to_int(),
content="1",
)
inspect(
async_obj.get("linger_ms").unwrap().as_number().unwrap().to_int(),
async_obj.get("linger_ms").unwrap().expect_json_number().to_int(),
content="0",
)
inspect(
async_obj.get("overflow").unwrap().as_string().unwrap(),
async_obj.get("overflow").unwrap().expect_json_string(),
content="Blocking",
)
inspect(async_obj.get("flush").unwrap().as_string().unwrap(), content="Never")
inspect(async_obj.get("flush").unwrap().expect_json_string(), content="Never")
}
///|
@@ -1068,7 +1066,7 @@ test "async config parsers reject malformed input" {
})() catch {
err => err.to_string()
}
inspect(invalid_json_error.contains("UnexpectedToken"), content="true")
inspect(invalid_json_error != "no error", content="true")
let wrong_type_error = (fn() -> String raise {
ignore(parse_async_logger_config_text("{\"max_pending\":\"many\"}"))
@@ -1144,7 +1142,7 @@ test "async runtime capability helpers stay consistent" {
)
inspect(state.background_worker == worker_supported, content="true")
inspect(
@json_parser.stringify(async_runtime_state_to_json(state)),
async_runtime_state_to_json(state).stringify(),
content=if worker_supported {
"{\"mode\":\"native_worker\",\"background_worker\":true}"
} else {
@@ -1225,7 +1223,7 @@ test "async logger state snapshot reflects current counters and runtime" {
content="Shutdown",
)
inspect(
@json_parser.stringify(async_logger_state_to_json(state)),
async_logger_state_to_json(state).stringify(),
content=if async_runtime_supports_background_worker() {
"{\"runtime\":{\"mode\":\"native_worker\",\"background_worker\":true},\"phase\":\"ready\",\"pending_count\":0,\"dropped_count\":0,\"is_closed\":false,\"is_running\":false,\"has_failed\":false,\"backlog_retained\":false,\"can_rerun\":true,\"terminal\":false,\"last_error\":\"\",\"flush_policy\":\"Shutdown\"}"
} else {