Skip to content

Commit 1e1b583

Browse files
authored
feat: add optional offset param to varint.decode (#201)
1 parent f2664fb commit 1e1b583

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

src/varint.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ import varint from '../vendor/varint.js'
22

33
/**
44
* @param {Uint8Array} data
5+
* @param {number} [offset=0]
56
* @returns {[number, number]}
67
*/
7-
export const decode = (data) => {
8-
const code = varint.decode(data)
8+
export const decode = (data, offset = 0) => {
9+
const code = varint.decode(data, offset)
910
return [code, varint.decode.bytes]
1011
}
1112

test/test-varint.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/* globals describe, it */
2+
3+
import { varint } from 'multiformats'
4+
import chai from 'chai'
5+
import chaiAsPromised from 'chai-as-promised'
6+
7+
chai.use(chaiAsPromised)
8+
const { assert } = chai
9+
10+
const UTF8 = new TextEncoder()
11+
12+
describe('varint', () => {
13+
it('can decode with offset', () => {
14+
const message = UTF8.encode('hello-world')
15+
const outerTag = 0x55
16+
const innerTag = 0xe3
17+
const outerTagSize = varint.encodingLength(outerTag)
18+
const innerTagSize = varint.encodingLength(innerTag)
19+
20+
const bytes = new Uint8Array(message.byteLength + outerTagSize + innerTagSize)
21+
varint.encodeTo(outerTag, bytes)
22+
varint.encodeTo(innerTag, bytes, outerTagSize)
23+
bytes.set(message, outerTagSize + innerTagSize)
24+
25+
assert.deepStrictEqual(varint.decode(bytes), [outerTag, outerTagSize])
26+
assert.deepStrictEqual(varint.decode(bytes, outerTagSize), [innerTag, innerTagSize])
27+
})
28+
})

0 commit comments

Comments
 (0)