(w io.Writer, data any)
| 64 | } |
| 65 | |
| 66 | func binaryWrite(w io.Writer, data any) (int, error) { |
| 67 | switch v := data.(type) { |
| 68 | case int: |
| 69 | var buf [binary.MaxVarintLen64]byte |
| 70 | n := binary.PutVarint(buf[:], int64(v)) |
| 71 | n, err := w.Write(buf[:n]) |
| 72 | return n, err |
| 73 | case io.WriterTo: |
| 74 | n, err := v.WriteTo(w) |
| 75 | return int(n), err |
| 76 | case string: |
| 77 | n, err := binaryWrite(w, len(v)) |
| 78 | if err != nil { |
| 79 | return n, err |
| 80 | } |
| 81 | n2, err := io.WriteString(w, v) |
| 82 | if err != nil { |
| 83 | return n + n2, err |
| 84 | } |
| 85 | |
| 86 | return n + n2, nil |
| 87 | case []float32: |
| 88 | n, err := binaryWrite(w, len(v)) |
| 89 | if err != nil { |
| 90 | return n, err |
| 91 | } |
| 92 | return n + binary.Size(v), binary.Write(w, byteOrder, v) |
| 93 | |
| 94 | default: |
| 95 | sz := binary.Size(data) |
| 96 | err := binary.Write(w, byteOrder, data) |
| 97 | if err != nil { |
| 98 | return 0, fmt.Errorf("encoding %T: %w", data, err) |
| 99 | } |
| 100 | return sz, err |
| 101 | } |
| 102 | } |
| 103 | |
| 104 | func multiBinaryWrite(w io.Writer, data ...any) (int, error) { |
| 105 | var written int |
no outgoing calls