///|
pub fn[T] with_span(
name : String,
fields? : Array[Field] = [],
f : () -> T,
) -> T {
let s = span(name, fields~)
s.enter()
let result = f()
s.exit()
result
}
///|
pub fn[T] with_span_ctx(
name : String,
fields? : Array[Field] = [],
f : (Span) -> T,
) -> T {
let s = span(name, fields~)
s.enter()
let result = f(s)
s.exit()
result
}
///|
pub fn[T] with_child_span(
parent : Span,
name : String,
fields? : Array[Field] = [],
f : (Span) -> T,
) -> T {
let s = child_span(parent, name, fields~)
s.enter()
let result = f(s)
s.exit()
result
}