package keys
import (
)
type Value struct {
name string
description string
}
func (, string) *Value {
return &Value{name: , description: }
}
func ( *Value) () string { return .name }
func ( *Value) () string { return .description }
func ( *Value) ( []byte, label.Label) []byte {
return fmt.Append(, .From())
}
func ( *Value) ( label.Map) any {
if := .Find(); .Valid() {
return .From()
}
return nil
}
func ( *Value) ( label.Label) any { return .UnpackValue() }
func ( *Value) ( any) label.Label { return label.OfValue(, ) }
type Tag struct {
name string
description string
}
func (, string) *Tag {
return &Tag{name: , description: }
}
func ( *Tag) () string { return .name }
func ( *Tag) () string { return .description }
func ( *Tag) ( []byte, label.Label) []byte { return }
func ( *Tag) () label.Label { return label.OfValue(, nil) }
type Int struct {
name string
description string
}
func (, string) *Int {
return &Int{name: , description: }
}
func ( *Int) () string { return .name }
func ( *Int) () string { return .description }
func ( *Int) ( []byte, label.Label) []byte {
return strconv.AppendInt(, .From(), 10)
}
func ( *Int) ( int) label.Label { return .Of64(int64()) }
func ( *Int) ( int64) label.Label { return label.Of64(, uint64()) }
func ( *Int) ( label.Map) int64 {
if := .Find(); .Valid() {
return .From()
}
return 0
}
func ( *Int) ( label.Label) int64 { return int64(.Unpack64()) }
type Uint struct {
name string
description string
}
func (, string) *Uint {
return &Uint{name: , description: }
}
func ( *Uint) () string { return .name }
func ( *Uint) () string { return .description }
func ( *Uint) ( []byte, label.Label) []byte {
return strconv.AppendUint(, .From(), 10)
}
func ( *Uint) ( uint64) label.Label { return label.Of64(, ) }
func ( *Uint) ( label.Map) uint64 {
if := .Find(); .Valid() {
return .From()
}
return 0
}
func ( *Uint) ( label.Label) uint64 { return .Unpack64() }
type Float struct {
name string
description string
}
func (, string) *Float {
return &Float{name: , description: }
}
func ( *Float) () string { return .name }
func ( *Float) () string { return .description }
func ( *Float) ( []byte, label.Label) []byte {
return strconv.AppendFloat(, .From(), 'E', -1, 64)
}
func ( *Float) ( float64) label.Label {
return label.Of64(, math.Float64bits())
}
func ( *Float) ( label.Map) float64 {
if := .Find(); .Valid() {
return .From()
}
return 0
}
func ( *Float) ( label.Label) float64 {
return math.Float64frombits(.Unpack64())
}
type String struct {
name string
description string
}
func (, string) *String {
return &String{name: , description: }
}
func ( *String) () string { return .name }
func ( *String) () string { return .description }
func ( *String) ( []byte, label.Label) []byte {
return strconv.AppendQuote(, .From())
}
func ( *String) ( string) label.Label { return label.OfString(, ) }
func ( *String) ( label.Map) string {
if := .Find(); .Valid() {
return .From()
}
return ""
}
func ( *String) ( label.Label) string { return .UnpackString() }
type Error struct {
name string
description string
}
func (, string) *Error {
return &Error{name: , description: }
}
func ( *Error) () string { return .name }
func ( *Error) () string { return .description }
func ( *Error) ( []byte, label.Label) []byte {
return append(, .From().Error()...)
}
func ( *Error) ( error) label.Label { return label.OfValue(, ) }
func ( *Error) ( label.Map) error {
if := .Find(); .Valid() {
return .From()
}
return nil
}
func ( *Error) ( label.Label) error {
, := .UnpackValue().(error)
return
}