File size: 1,080 Bytes
6655e35
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
'use strict';

const lo = require('./lib/Layout');

const raw = Buffer.from('41000000000000000000000000000000000000000000000000000000000000000000000000000000'
                        + '42430000000000000000000000000000000000000000000000000000000000000000000000000000'
                        + '43444500000000000000000000000000000000000000000000000000000000000000000000000000'
                        + '44454647000000000000000000000000000000000000000000000000000000000000000000000000',
                        'hex');

const lo1 = lo.seq(lo.seq(lo.u8(), 40), 4);
const lo2 = lo.seq(lo.cstr(), 4);

console.dir(lo1.decode(raw))
console.dir(lo2.decode(raw))

class ConstantDiscriminator extends lo.UnionDiscriminator {
  constructor(tag, property) {
    super(property);
    this.tag = tag;
  }

  decode (b, offset) {
    return this.tag;
  }

  encode (b, offset) {
    return 0;
  }
}
const discr = new ConstantDiscriminator(0);

const str40 = lo.union(discr, lo.blob(40));
str40.addVariant(discr.tag, lo.cstr(), 's');
const lo3 = lo.seq(str40, 4);
console.dir(lo3.decode(raw))