diff options
Diffstat (limited to 'forged/internal/bare/writer.go')
-rw-r--r-- | forged/internal/bare/writer.go | 121 |
1 files changed, 0 insertions, 121 deletions
diff --git a/forged/internal/bare/writer.go b/forged/internal/bare/writer.go deleted file mode 100644 index bada045..0000000 --- a/forged/internal/bare/writer.go +++ /dev/null @@ -1,121 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// SPDX-FileCopyrightText: Copyright (c) 2025 Drew Devault <https://drewdevault.com> - -package bare - -import ( - "encoding/binary" - "fmt" - "io" - "math" - - "go.lindenii.runxiyu.org/forge/forged/internal/misc" -) - -// A Writer for BARE primitive types. -type Writer struct { - base io.Writer - scratch [binary.MaxVarintLen64]byte -} - -// Returns a new BARE primitive writer wrapping the given io.Writer. -func NewWriter(base io.Writer) *Writer { - return &Writer{base: base} -} - -func (w *Writer) WriteUint(i uint64) error { - n := binary.PutUvarint(w.scratch[:], i) - _, err := w.base.Write(w.scratch[:n]) - return err -} - -func (w *Writer) WriteU8(i uint8) error { - return binary.Write(w.base, binary.LittleEndian, i) -} - -func (w *Writer) WriteU16(i uint16) error { - return binary.Write(w.base, binary.LittleEndian, i) -} - -func (w *Writer) WriteU32(i uint32) error { - return binary.Write(w.base, binary.LittleEndian, i) -} - -func (w *Writer) WriteU64(i uint64) error { - return binary.Write(w.base, binary.LittleEndian, i) -} - -func (w *Writer) WriteInt(i int64) error { - var buf [binary.MaxVarintLen64]byte - n := binary.PutVarint(buf[:], i) - _, err := w.base.Write(buf[:n]) - return err -} - -func (w *Writer) WriteI8(i int8) error { - return binary.Write(w.base, binary.LittleEndian, i) -} - -func (w *Writer) WriteI16(i int16) error { - return binary.Write(w.base, binary.LittleEndian, i) -} - -func (w *Writer) WriteI32(i int32) error { - return binary.Write(w.base, binary.LittleEndian, i) -} - -func (w *Writer) WriteI64(i int64) error { - return binary.Write(w.base, binary.LittleEndian, i) -} - -func (w *Writer) WriteF32(f float32) error { - if math.IsNaN(float64(f)) { - return fmt.Errorf("NaN is not permitted in BARE floats") - } - return binary.Write(w.base, binary.LittleEndian, f) -} - -func (w *Writer) WriteF64(f float64) error { - if math.IsNaN(f) { - return fmt.Errorf("NaN is not permitted in BARE floats") - } - return binary.Write(w.base, binary.LittleEndian, f) -} - -func (w *Writer) WriteBool(b bool) error { - return binary.Write(w.base, binary.LittleEndian, b) -} - -func (w *Writer) WriteString(str string) error { - return w.WriteData(misc.StringToBytes(str)) -} - -// Writes a fixed amount of arbitrary data, defined by the length of the slice. -func (w *Writer) WriteDataFixed(data []byte) error { - var amt int = 0 - for amt < len(data) { - n, err := w.base.Write(data[amt:]) - if err != nil { - return err - } - amt += n - } - return nil -} - -// Writes arbitrary data whose length is encoded into the message. -func (w *Writer) WriteData(data []byte) error { - err := w.WriteUint(uint64(len(data))) - if err != nil { - return err - } - var amt int = 0 - for amt < len(data) { - n, err := w.base.Write(data[amt:]) - if err != nil { - return err - } - amt += n - } - return nil -} |