import "../_dnt.polyfills.js"; import * as $ from "../deps/scale.js" import { is, Rune, RunicArgs } from "../rune/mod.js" export class CodecRune extends Rune<$.Codec, U> { static from(...[codec]: RunicArgs]>) { return Rune.resolve(codec).into(CodecRune) } // TODO: eventually, utilize `V` to toggle runtime validation encoded(...[value]: RunicArgs) { return Rune.tuple([this, value]).map(async ([codec, value]) => { $.assert(codec, value) return await codec.encodeAsync(value) }).throws(is($.ScaleError)) } decoded(...[value]: RunicArgs) { return Rune .tuple([this, value]).map(([codec, value]) => codec.decode(value)) .throws(is($.ScaleError)) } }