import type { ArrayBufferView, ByteView } from "multiformats"; export interface BlockEncoder { readonly name: string; readonly code: Code; bytesToHash?(data: T): ByteView; encode(data: T): ByteView; } export interface AsyncBlockEncoder { readonly name: string; readonly code: Code; bytesToHash?(data: T): Promise>; encode(data: T): PromiseLike>; } export interface BlockDecoder { readonly code: Code; valueToHashBytes?(value: T): ByteView; decode(bytes: ByteView): T; } export interface AsyncBlockDecoder { readonly code: Code; valueToHashBytes?(value: T): Promise>; decode(bytes: ByteView): PromiseLike; } export interface BlockCodec extends BlockEncoder, BlockDecoder { } export interface AsyncBlockCodec extends AsyncBlockEncoder, AsyncBlockDecoder { } export type { ArrayBufferView, ByteView };