Repository navigation
Expand file tree
/
Copy patherror.go
More file actions
71 lines (62 loc) · 1.78 KB
/
Copy patherror.go
File metadata and controls
71 lines (62 loc) · 1.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// Copyright 2026 Anna Veretennykova
//
// SPDX-License-Identifier: MIT
package pdfengine
import (
"errors"
"fmt"
"github.com/annavetech/pdfengine/internal/engine"
)
// Stage identifies which part of the conversion pipeline produced an Error.
type Stage string
const (
StageInput Stage = "input"
StageParser Stage = "parser"
StageValidation Stage = "validation"
StageLayout Stage = "layout"
StagePagination Stage = "pagination"
StageRender Stage = "render"
)
// Error describes a failure returned by Convert. Code is a stable,
// machine-readable identifier (for example "ENGINE_ERR_FILE_TOO_LARGE").
// Message is human-readable and may change between versions: branch on
// Code, not on Message. Use errors.As to obtain an *Error from an error
// returned by Convert.
type Error struct {
Code string
Stage Stage
Message string
}
// Error implements the error interface.
func (e *Error) Error() string {
return fmt.Sprintf("[%s/%s] %s", e.Stage, e.Code, e.Message)
}
// translateError copies the fields of an internal *engine.Error into
// a public *Error. It never returns the internal error itself, so a caller
// doing errors.As on an internal type can never succeed against a value
// this package returns.
func translateError(err error) error {
var ae *engine.Error
if errors.As(err, &ae) {
return &Error{Code: ae.Code, Stage: toStage(ae.Stage), Message: ae.Message}
}
return err
}
func toStage(s engine.EngineStage) Stage {
switch s {
case engine.StageInput:
return StageInput
case engine.StageParser:
return StageParser
case engine.StageValidation:
return StageValidation
case engine.StageLayout:
return StageLayout
case engine.StagePagination:
return StagePagination
case engine.StageRender:
return StageRender
default:
return Stage(s)
}
}