♻️ Extract core and utils subpackages

This commit is contained in:
Nanaloveyuki
2026-05-20 08:15:31 +08:00
parent 91096a9e0d
commit d6e47d4bb8
12 changed files with 278 additions and 155 deletions
+75
View File
@@ -0,0 +1,75 @@
pub type RecordPredicate = (@core.Record) -> Bool
pub fn level_at_least(min_level : @core.Level) -> RecordPredicate {
fn(rec) {
rec.level.priority() >= min_level.priority()
}
}
pub fn target_is(target : String) -> RecordPredicate {
fn(rec) {
rec.target == target
}
}
pub fn target_has_prefix(prefix : String) -> RecordPredicate {
fn(rec) {
rec.target.has_prefix(prefix)
}
}
pub fn message_contains(fragment : String) -> RecordPredicate {
fn(rec) {
rec.message.contains(fragment)
}
}
pub fn has_field(key : String) -> RecordPredicate {
fn(rec) {
for field in rec.fields {
if field.key == key {
return true
}
}
false
}
}
pub fn field_equals(key : String, value : String) -> RecordPredicate {
fn(rec) {
for field in rec.fields {
if field.key == key && field.value == value {
return true
}
}
false
}
}
pub fn not_(predicate : RecordPredicate) -> RecordPredicate {
fn(rec) {
!(predicate(rec))
}
}
pub fn all_of(predicates : Array[RecordPredicate]) -> RecordPredicate {
fn(rec) {
for predicate in predicates {
if !(predicate(rec)) {
return false
}
}
true
}
}
pub fn any_of(predicates : Array[RecordPredicate]) -> RecordPredicate {
fn(rec) {
for predicate in predicates {
if predicate(rec) {
return true
}
}
false
}
}
+3
View File
@@ -0,0 +1,3 @@
import {
"Nanaloveyuki/BitLogger/src/core" @core,
}
+63
View File
@@ -0,0 +1,63 @@
pub type RecordPatch = (@core.Record) -> @core.Record
pub fn identity_patch() -> RecordPatch {
fn(rec) { rec }
}
pub fn set_target(target : String) -> RecordPatch {
fn(rec) {
rec.with_target(target)
}
}
pub fn prefix_message(prefix : String) -> RecordPatch {
fn(rec) {
rec.with_message("\{prefix}\{rec.message}")
}
}
pub fn append_fields(extra_fields : Array[@core.Field]) -> RecordPatch {
fn(rec) {
if extra_fields.length() == 0 {
rec
} else if rec.fields.length() == 0 {
rec.with_fields(extra_fields)
} else {
rec.with_fields(rec.fields + extra_fields)
}
}
}
pub fn redact_field(key : String, placeholder~ : String = "***") -> RecordPatch {
fn(rec) {
rec.with_fields(rec.fields.map(fn(field) {
if field.key == key {
field.with_value(placeholder)
} else {
field
}
}))
}
}
pub fn redact_fields(keys : Array[String], placeholder~ : String = "***") -> RecordPatch {
fn(rec) {
rec.with_fields(rec.fields.map(fn(field) {
if keys.contains(field.key) {
field.with_value(placeholder)
} else {
field
}
}))
}
}
pub fn compose_patches(patches : Array[RecordPatch]) -> RecordPatch {
fn(rec) {
let mut current = rec
for patch in patches {
current = patch(current)
}
current
}
}