package parser

import (
	

	
)

type Parser struct {
	b []byte
	i int
}

func ( []byte) *Parser {
	return &Parser{
		b: ,
	}
}

func ( string) *Parser {
	return New(internal.StringToBytes())
}

func ( *Parser) () []byte {
	return .b[.i:]
}

func ( *Parser) () bool {
	return .i < len(.b)
}

func ( *Parser) () byte {
	if .Valid() {
		 := .b[.i]
		.Advance()
		return 
	}
	return 0
}

func ( *Parser) () byte {
	if .Valid() {
		return .b[.i]
	}
	return 0
}

func ( *Parser) () {
	.i++
}

func ( *Parser) ( byte) bool {
	if .Peek() ==  {
		.Advance()
		return true
	}
	return false
}

func ( *Parser) ( []byte) bool {
	if len() > len(.b[.i:]) {
		return false
	}
	if !bytes.Equal(.b[.i:.i+len()], ) {
		return false
	}
	.i += len()
	return true
}

func ( *Parser) ( byte) ([]byte, bool) {
	 := bytes.IndexByte(.b[.i:], )
	if  == -1 {
		 := .b[.i:]
		.i = len(.b)
		return , false
	}

	 := .b[.i : .i+]
	.i +=  + 1
	return , true
}