Pass Range/WrapperOpaque names via options (#4911)

This commit is contained in:
Jaco
2022-06-08 20:04:01 +03:00
committed by GitHub
parent 767eb1fa15
commit 52cd06917d
5 changed files with 16 additions and 16 deletions
@@ -9,12 +9,7 @@ describe('Range', (): void => {
let range: Range<U32>;
beforeEach((): void => {
const Clazz = Range.with(U32);
range = new Clazz(
registry,
[new U32(registry, 1), new U32(registry, 2)]
);
range = new (Range.with(U32))(registry, [1, 2]);
});
it('decodes', (): void => {
+8 -7
View File
@@ -7,6 +7,10 @@ import { Tuple } from '../base/Tuple';
type RangeType = 'Range' | 'RangeInclusive';
interface Options {
rangeName?: RangeType;
}
/**
* @name Range
* @description
@@ -15,19 +19,16 @@ type RangeType = 'Range' | 'RangeInclusive';
export class Range<T extends INumber> extends Tuple {
#rangeName: RangeType;
constructor (registry: Registry, Type: CodecClass<T> | string, value?: AnyTuple, rangeName: RangeType = 'Range') {
super(registry, {
end: Type,
start: Type
}, value);
constructor (registry: Registry, Type: CodecClass<T> | string, value?: AnyTuple, { rangeName = 'Range' }: Options = {}) {
super(registry, [Type, Type], value);
this.#rangeName = rangeName;
}
public static override with <T extends INumber> (Types: CodecClass<T> | string): CodecClass<Range<T>> {
public static override with <T extends INumber> (Type: CodecClass<T> | string): CodecClass<Range<T>> {
return class extends Range<T> {
constructor (registry: Registry, value?: AnyTuple) {
super(registry, Types, value);
super(registry, Type, value);
}
};
}
@@ -7,7 +7,7 @@ import { Range } from './Range';
export class RangeInclusive<T extends INumber = INumber> extends Range<T> {
constructor (registry: Registry, Type: CodecClass<T> | string, value?: AnyTuple) {
super(registry, Type, value, 'RangeInclusive');
super(registry, Type, value, { rangeName: 'RangeInclusive' });
}
public static override with <T extends INumber> (Type: CodecClass<T> | string): CodecClass<RangeInclusive<T>> {
@@ -11,6 +11,10 @@ import { Bytes } from './Bytes';
type OpaqueName = 'WrapperKeepOpaque' | 'WrapperOpaque';
interface Options {
opaqueName?: OpaqueName;
}
function decodeRaw<T extends Codec> (registry: Registry, typeName: CodecClass<T> | string, value?: unknown): [CodecClass<T>, T | null, AnyU8a] {
const Type = typeToConstructor(registry, typeName);
@@ -38,7 +42,7 @@ export class WrapperKeepOpaque<T extends Codec> extends Bytes {
readonly #opaqueName: OpaqueName;
constructor (registry: Registry, typeName: CodecClass<T> | string, value?: unknown, opaqueName: OpaqueName = 'WrapperKeepOpaque') {
constructor (registry: Registry, typeName: CodecClass<T> | string, value?: unknown, { opaqueName = 'WrapperKeepOpaque' }: Options = {}) {
const [Type, decoded, u8a] = decodeRaw(registry, typeName, value);
super(registry, u8a);
@@ -7,7 +7,7 @@ import { WrapperKeepOpaque } from './WrapperKeepOpaque';
export class WrapperOpaque<T extends Codec> extends WrapperKeepOpaque<T> {
constructor (registry: Registry, typeName: CodecClass<T> | string, value?: unknown) {
super(registry, typeName, value, 'WrapperOpaque');
super(registry, typeName, value, { opaqueName: 'WrapperOpaque' });
}
public static override with<T extends Codec> (Type: CodecClass<T> | string): CodecClass<WrapperKeepOpaque<T>> {