-
Notifications
You must be signed in to change notification settings - Fork 5
/
omcierror.go
207 lines (181 loc) · 5.28 KB
/
omcierror.go
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
/*
* Copyright (c) 2018 - present. Boling Consulting Solutions (bcsw.net)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* NOTE: This file was generated, manual edits will be overwritten!
*
* Generated by 'goCodeGenerator.py':
* https://github.com/cboling/OMCI-parser/README.md
*/
package generated
import (
"fmt"
)
// Custom Go Error messages for common OMCI errors
//
// Response Status code releted errors
type OmciError struct {
err string
statusCode Results
}
func (e *OmciError) Error() string {
return e.err
}
func (e *OmciError) StatusCode() Results {
return e.statusCode
}
func NewOmciError(text string, status Results) error {
if status == Success {
panic("Do not use OmciError to convey successful results")
}
return &OmciError{
err: text,
statusCode: status,
}
}
type OmciProcessingError struct {
OmciError
}
// NewProcessingError means the command processing failed at the ONU
// for reasons not described by one of the more specific error codes.
func NewProcessingError(args ...interface{}) error {
defaultValue := "command processing error"
return &OmciProcessingError{
OmciError: OmciError{
err: genMessage(defaultValue, args...),
statusCode: ProcessingError,
},
}
}
type NotSupportedError struct {
OmciError
}
// NewNotSupportedError means that the message type indicated in byte 3 is
// not supported by the ONU.
func NewNotSupportedError(args ...interface{}) error {
defaultValue := "command not supported"
return &NotSupportedError{
OmciError: OmciError{
err: genMessage(defaultValue, args...),
statusCode: NotSupported,
},
}
}
type ParamError struct {
OmciError
}
// NewParameterError means that the command message received by the
// ONU was errored. It would be appropriate if an attribute mask
// were out of range, for example. In practice, this result code is
// frequently used interchangeably with code 1001. However, the
// optional attribute and attribute execution masks in the reply
// messages are only defined for code 1001.
func NewParameterError(args ...interface{}) error {
defaultValue := "parameter error"
return &ParamError{
OmciError: OmciError{
err: genMessage(defaultValue, args...),
statusCode: ParameterError,
},
}
}
type UnknownEntityError struct {
OmciError
}
// NewUnknownEntityError This result means that the managed entity class
// (bytes 5..6) is not supported by the ONU.
func NewUnknownEntityError(args ...interface{}) error {
defaultValue := "unknown managed entity"
return &UnknownEntityError{
OmciError: OmciError{
err: genMessage(defaultValue, args...),
statusCode: UnknownEntity,
},
}
}
type UnknownInstanceError struct {
OmciError
}
// NewUnknownInstanceError means that the managed entity instance (bytes 7..8)
// does not exist in the ONU.
func NewUnknownInstanceError(args ...interface{}) error {
defaultValue := "unknown managed entity instance"
return &UnknownInstanceError{
OmciError: OmciError{
err: genMessage(defaultValue, args...),
statusCode: UnknownInstance,
},
}
}
type DeviceBusyError struct {
OmciError
}
// NewDeviceBusyError means that the command could not be processed due
// to process-related congestion at the ONU. This result code may
// also be used as a pause indication to the OLT while the ONU
// conducts a time-consuming operation such as storage of a
// software image into non-volatile memory.
func NewDeviceBusyError(args ...interface{}) error {
defaultValue := "device busy"
return &DeviceBusyError{
OmciError: OmciError{
err: genMessage(defaultValue, args...),
statusCode: DeviceBusy,
},
}
}
type InstanceExistsError struct {
OmciError
}
// NewInstanceExistsError
func NewInstanceExistsError(args ...interface{}) error {
defaultValue := "instance exists"
return &InstanceExistsError{
OmciError: OmciError{
err: genMessage(defaultValue, args...),
statusCode: InstanceExists,
},
}
}
type AttributeFailureError struct {
OmciError
}
// NewAttributeFailureError means that the ONU already has a managed entity
// instance that corresponds to the one the OLT is attempting to create.
func NewAttributeFailureError(args ...interface{}) error {
defaultValue := "attribute(s) failed or unknown"
return &AttributeFailureError{
OmciError: OmciError{
err: genMessage(defaultValue, args...),
statusCode: AttributeFailure,
},
}
}
func genMessage(defaultValue string, args ...interface{}) string {
switch len(args) {
case 0:
return defaultValue
case 1:
switch first := args[0].(type) {
case string:
// Assume a simple, pre-formatted string
return args[0].(string)
case func() string:
// Assume a closure with no other arguments used
return first()
default:
panic("Unsupported parameter type")
}
}
return fmt.Sprintf(args[0].(string), args[1:]...)
}