|
10 | 10 | * @param {Code} options.code
|
11 | 11 | * @param {(data:T) => Uint8Array} options.encode
|
12 | 12 | * @param {(bytes:Uint8Array) => T} options.decode
|
| 13 | + * @returns {import('./interface').BlockCodec<Code, T>} |
13 | 14 | */
|
14 |
| -export const codec = ({ name, code, decode, encode }) => |
15 |
| - new Codec(name, code, encode, decode) |
| 15 | +export const codec = ({ name, code, decode, encode }) => { |
| 16 | + const decoder = new Decoder(name, code, decode) |
| 17 | + const encoder = new Encoder(name, code, encode) |
| 18 | + |
| 19 | + return { name, code, decode, encode, decoder, encoder } |
| 20 | +} |
16 | 21 |
|
17 | 22 | /**
|
18 | 23 | * @template {number} Code
|
@@ -64,45 +69,3 @@ export class Decoder {
|
64 | 69 | this.decode = decode
|
65 | 70 | }
|
66 | 71 | }
|
67 |
| - |
68 |
| -/** |
69 |
| - * @template {number} Code |
70 |
| - * @template T |
71 |
| - * @typedef {import('./interface').BlockCodec<Code, T>} BlockCodec |
72 |
| - */ |
73 |
| - |
74 |
| -/** |
75 |
| - * @class |
76 |
| - * @template {string} Name |
77 |
| - * @template {number} Code |
78 |
| - * @template T |
79 |
| - * @implements {BlockCodec<Code, T>} |
80 |
| - */ |
81 |
| -export class Codec { |
82 |
| - /** |
83 |
| - * @param {Name} name |
84 |
| - * @param {Code} code |
85 |
| - * @param {(data:T) => Uint8Array} encode |
86 |
| - * @param {(bytes:Uint8Array) => T} decode |
87 |
| - */ |
88 |
| - constructor (name, code, encode, decode) { |
89 |
| - this.name = name |
90 |
| - this.code = code |
91 |
| - this.encode = encode |
92 |
| - this.decode = decode |
93 |
| - } |
94 |
| - |
95 |
| - get decoder () { |
96 |
| - const { name, code, decode } = this |
97 |
| - const decoder = new Decoder(name, code, decode) |
98 |
| - Object.defineProperty(this, 'decoder', { value: decoder }) |
99 |
| - return decoder |
100 |
| - } |
101 |
| - |
102 |
| - get encoder () { |
103 |
| - const { name, code, encode } = this |
104 |
| - const encoder = new Encoder(name, code, encode) |
105 |
| - Object.defineProperty(this, 'encoder', { value: encoder }) |
106 |
| - return encoder |
107 |
| - } |
108 |
| -} |
0 commit comments