@@ -16,10 +16,6 @@ const (
1616 playerWeaponPrePrefix = "bcc_nonlocaldata."
1717)
1818
19- const (
20- msgHeaderNotParsed = "Tried to parse tick before parsing header"
21- )
22-
2319// Parsing errors
2420var (
2521 // ErrCancelled signals that parsing was cancelled via Parser.Cancel()
3127
3228 // ErrInvalidFileType signals that the input isn't a valid CS:GO demo.
3329 ErrInvalidFileType = errors .New ("Invalid File-Type; expecting HL2DEMO in the first 8 bytes" )
30+
31+ // ErrHeaderNotParsed signals that the header hasn't been parsed before attempting to parse a tick.
32+ ErrHeaderNotParsed = errors .New ("Header must be parsed before trying to parse a tick. See Parser.ParseHeader()" )
3433)
3534
3635// ParseHeader attempts to parse the header of the demo.
@@ -67,8 +66,7 @@ func (p *Parser) ParseHeader() (common.DemoHeader, error) {
6766
6867// ParseToEnd attempts to parse the demo until the end.
6968// Aborts and returns ErrCancelled if Cancel() is called before the end.
70- // May return ErrUnexpectedEndOfDemo for incomplete / corrupt demos.
71- // May panic if the demo is corrupt in some way.
69+ // See also: ParseNextFrame() for other possible errors.
7270func (p * Parser ) ParseToEnd () (err error ) {
7371 defer func () {
7472 if err == nil {
@@ -77,7 +75,7 @@ func (p *Parser) ParseToEnd() (err error) {
7775 }()
7876
7977 if p .header == nil {
80- panic ( msgHeaderNotParsed )
78+ return ErrHeaderNotParsed
8179 }
8280
8381 for {
@@ -121,8 +119,10 @@ func (p *Parser) Cancel() {
121119
122120// ParseNextFrame attempts to parse the next frame / demo-tick (not ingame tick).
123121// Returns true unless the demo command 'stop' or an error was encountered.
122+ // Returns an error if the header hasn't been parsed yet - see Parser.ParseHeader().
124123// May return ErrUnexpectedEndOfDemo for incomplete / corrupt demos.
125- // Panics if header hasn't been parsed yet - see Parser.ParseHeader().
124+ // May panic if the demo is corrupt in some way.
125+ // See also: ParseToEnd() for parsing the complete demo in one go (faster).
126126func (p * Parser ) ParseNextFrame () (b bool , err error ) {
127127 defer func () {
128128 if err == nil {
@@ -131,7 +131,7 @@ func (p *Parser) ParseNextFrame() (b bool, err error) {
131131 }()
132132
133133 if p .header == nil {
134- panic ( msgHeaderNotParsed )
134+ return false , ErrHeaderNotParsed
135135 }
136136
137137 b = p .parseFrame ()
0 commit comments