import { FieldInstance } from '../enums';
import { SerializedType } from '../types/serialized-type';
import { Buffer } from 'buffer/';
/**
 * BinaryParser is used to compute fields and values from a HexString
 */
declare class BinaryParser {
    private bytes;
    /**
     * Initialize bytes to a hex string
     *
     * @param hexBytes a hex string
     */
    constructor(hexBytes: string);
    /**
     * Peek the first byte of the BinaryParser
     *
     * @returns The first byte of the BinaryParser
     */
    peek(): number;
    /**
     * Consume the first n bytes of the BinaryParser
     *
     * @param n the number of bytes to skip
     */
    skip(n: number): void;
    /**
     * read the first n bytes from the BinaryParser
     *
     * @param n The number of bytes to read
     * @return The bytes
     */
    read(n: number): Buffer;
    /**
     * Read an integer of given size
     *
     * @param n The number of bytes to read
     * @return The number represented by those bytes
     */
    readUIntN(n: number): number;
    readUInt8(): number;
    readUInt16(): number;
    readUInt32(): number;
    size(): number;
    end(customEnd?: number): boolean;
    /**
     * Reads variable length encoded bytes
     *
     * @return The variable length bytes
     */
    readVariableLength(): Buffer;
    /**
     * Reads the length of the variable length encoded bytes
     *
     * @return The length of the variable length encoded bytes
     */
    readVariableLengthLength(): number;
    /**
     * Reads the field ordinal from the BinaryParser
     *
     * @return Field ordinal
     */
    readFieldOrdinal(): number;
    /**
     * Read the field from the BinaryParser
     *
     * @return The field represented by the bytes at the head of the BinaryParser
     */
    readField(): FieldInstance;
    /**
     * Read a given type from the BinaryParser
     *
     * @param type The type that you want to read from the BinaryParser
     * @return The instance of that type read from the BinaryParser
     */
    readType(type: typeof SerializedType): SerializedType;
    /**
     * Get the type associated with a given field
     *
     * @param field The field that you wan to get the type of
     * @return The type associated with the given field
     */
    typeForField(field: FieldInstance): typeof SerializedType;
    /**
     * Read value of the type specified by field from the BinaryParser
     *
     * @param field The field that you want to get the associated value for
     * @return The value associated with the given field
     */
    readFieldValue(field: FieldInstance): SerializedType;
    /**
     * Get the next field and value from the BinaryParser
     *
     * @return The field and value
     */
    readFieldAndValue(): [FieldInstance, SerializedType];
}
export { BinaryParser };
