// ------------------------------------------------------------------------ // Project atila // Active Thing (activething.com) git.activething.com/go // // File name bfield.go // Created by DEV // Modified 19/02/2024 // // Copyright 2024 activething.com // ------------------------------------------------------------------------ // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ------------------------------------------------------------------------ package bfields import "strconv" type ( BField struct { name []byte value []byte } ) func NewBField (name, value []byte) (*BField,error) { if len(name) == 0 { return nil,G.ErrInvalidName } return &BField { name: append(make([]byte,0,len(name)),name...), value: append(make([]byte,0,len(value)),value...), },nil } func (f BField) Name () []byte { return f.name } func (f BField) Value() []byte { return f.value } func (f BField) String () string { r := make([]byte,len(f.name)+len(f.value)+1) copy(r,f.name) r[len(f.name)]=':' copy(r[len(f.name)+1:],f.value) return string(r) } func (f *BField) SetValue(val []byte) { ln := len(val) cp := cap(f.value) if ln <= cp { copy(f.value, val) f.value = f.value[:ln] return } nv := make([]byte, ln) copy(f.value, nv) } func (f *BField) SetByte(val byte) { f.value = append(f.value[:0], val) } func (f *BField) SetBool(val bool) { f.value = strconv.AppendBool(f.value[:0], val) } func (f *BField) SetRune(val rune) { f.value = strconv.AppendQuoteRune(f.value[:0], val) } func (f *BField) SetString(val string) { f.SetValue([]byte(val)) } func (f *BField) SetInt(val int64, bse int) { f.value = strconv.AppendInt(f.value[:0], val, bse) } func (f *BField) SetUInt(val uint64, bse int) { f.value = strconv.AppendUint(f.value[:0], val, bse) } func (f *BField) SetFloat(val float64, fmt byte, prc, sze int) { f.value = strconv.AppendFloat(f.value[:0], val, fmt, prc, sze) }