(
lengthOrField:
| string
| number
| Field<number, string, unknown, number>
| BufferLengthConverter<string, unknown>,
converter?: Converter<Uint8Array, unknown>,
)
| 124 | |
| 125 | /* #__NO_SIDE_EFFECTS__ */ |
| 126 | export function buffer( |
| 127 | lengthOrField: |
| 128 | | string |
| 129 | | number |
| 130 | | Field<number, string, unknown, number> |
| 131 | | BufferLengthConverter<string, unknown>, |
| 132 | converter?: Converter<Uint8Array, unknown>, |
| 133 | ): Field<unknown, string, Record<string, unknown>, Uint8Array> { |
| 134 | // Fixed length |
| 135 | if (typeof lengthOrField === "number") { |
| 136 | let serialize: ByobFieldSerializer<Uint8Array>; |
| 137 | let deserialize: BipedalFieldDeserializer< |
| 138 | unknown, |
| 139 | Record<string, unknown> |
| 140 | >; |
| 141 | let init: ((value: unknown) => Uint8Array) | undefined; |
| 142 | |
| 143 | if (lengthOrField === 0) { |
| 144 | serialize = () => {}; |
| 145 | |
| 146 | if (converter) { |
| 147 | // eslint-disable-next-line require-yield |
| 148 | deserialize = function* () { |
| 149 | return converter.convert(EmptyUint8Array); |
| 150 | }; |
| 151 | } else { |
| 152 | // eslint-disable-next-line require-yield |
| 153 | deserialize = function* () { |
| 154 | return EmptyUint8Array; |
| 155 | }; |
| 156 | } |
| 157 | } else { |
| 158 | serialize = (value, { buffer, index }) => |
| 159 | copyMaybeDifferentLength(buffer, value, index, lengthOrField); |
| 160 | |
| 161 | if (converter) { |
| 162 | deserialize = function* (then, reader) { |
| 163 | const array = reader.readExactly(lengthOrField); |
| 164 | return converter.convert(yield* then(array)); |
| 165 | }; |
| 166 | init = (value) => converter.back(value); |
| 167 | } else { |
| 168 | // eslint-disable-next-line require-yield |
| 169 | deserialize = function* (_then, reader) { |
| 170 | const array = reader.readExactly(lengthOrField); |
| 171 | return array; |
| 172 | }; |
| 173 | } |
| 174 | } |
| 175 | |
| 176 | return field(lengthOrField, "byob", serialize, deserialize, { init }); |
| 177 | } |
| 178 | |
| 179 | // Declare length field |
| 180 | // Some field types are `function`s |
| 181 | if ( |
| 182 | (typeof lengthOrField === "object" || |
| 183 | typeof lengthOrField === "function") && |
no test coverage detected