...

Source file src/github.com/sagikazarmark/slog-shim/value.go

Documentation: github.com/sagikazarmark/slog-shim

     1  // Copyright 2022 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  //go:build go1.21
     6  
     7  package slog
     8  
     9  import (
    10  	"log/slog"
    11  	"time"
    12  )
    13  
    14  // A Value can represent any Go value, but unlike type any,
    15  // it can represent most small values without an allocation.
    16  // The zero Value corresponds to nil.
    17  type Value = slog.Value
    18  
    19  // Kind is the kind of a Value.
    20  type Kind = slog.Kind
    21  
    22  // The following list is sorted alphabetically, but it's also important that
    23  // KindAny is 0 so that a zero Value represents nil.
    24  const (
    25  	KindAny       = slog.KindAny
    26  	KindBool      = slog.KindBool
    27  	KindDuration  = slog.KindDuration
    28  	KindFloat64   = slog.KindFloat64
    29  	KindInt64     = slog.KindInt64
    30  	KindString    = slog.KindString
    31  	KindTime      = slog.KindTime
    32  	KindUint64    = slog.KindUint64
    33  	KindGroup     = slog.KindGroup
    34  	KindLogValuer = slog.KindLogValuer
    35  )
    36  
    37  //////////////// Constructors
    38  
    39  // StringValue returns a new Value for a string.
    40  func StringValue(value string) Value {
    41  	return slog.StringValue(value)
    42  }
    43  
    44  // IntValue returns a Value for an int.
    45  func IntValue(v int) Value {
    46  	return slog.IntValue(v)
    47  }
    48  
    49  // Int64Value returns a Value for an int64.
    50  func Int64Value(v int64) Value {
    51  	return slog.Int64Value(v)
    52  }
    53  
    54  // Uint64Value returns a Value for a uint64.
    55  func Uint64Value(v uint64) Value {
    56  	return slog.Uint64Value(v)
    57  }
    58  
    59  // Float64Value returns a Value for a floating-point number.
    60  func Float64Value(v float64) Value {
    61  	return slog.Float64Value(v)
    62  }
    63  
    64  // BoolValue returns a Value for a bool.
    65  func BoolValue(v bool) Value {
    66  	return slog.BoolValue(v)
    67  }
    68  
    69  // TimeValue returns a Value for a time.Time.
    70  // It discards the monotonic portion.
    71  func TimeValue(v time.Time) Value {
    72  	return slog.TimeValue(v)
    73  }
    74  
    75  // DurationValue returns a Value for a time.Duration.
    76  func DurationValue(v time.Duration) Value {
    77  	return slog.DurationValue(v)
    78  }
    79  
    80  // GroupValue returns a new Value for a list of Attrs.
    81  // The caller must not subsequently mutate the argument slice.
    82  func GroupValue(as ...Attr) Value {
    83  	return slog.GroupValue(as...)
    84  }
    85  
    86  // AnyValue returns a Value for the supplied value.
    87  //
    88  // If the supplied value is of type Value, it is returned
    89  // unmodified.
    90  //
    91  // Given a value of one of Go's predeclared string, bool, or
    92  // (non-complex) numeric types, AnyValue returns a Value of kind
    93  // String, Bool, Uint64, Int64, or Float64. The width of the
    94  // original numeric type is not preserved.
    95  //
    96  // Given a time.Time or time.Duration value, AnyValue returns a Value of kind
    97  // KindTime or KindDuration. The monotonic time is not preserved.
    98  //
    99  // For nil, or values of all other types, including named types whose
   100  // underlying type is numeric, AnyValue returns a value of kind KindAny.
   101  func AnyValue(v any) Value {
   102  	return slog.AnyValue(v)
   103  }
   104  
   105  // A LogValuer is any Go value that can convert itself into a Value for logging.
   106  //
   107  // This mechanism may be used to defer expensive operations until they are
   108  // needed, or to expand a single value into a sequence of components.
   109  type LogValuer = slog.LogValuer
   110  

View as plain text