-
Notifications
You must be signed in to change notification settings - Fork 0
/
error.go
121 lines (111 loc) · 2.87 KB
/
error.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
/*
* Copyright (C) 2014 ~ 2018 Deepin Technology Co., Ltd.
*
* Author: jouyouyun <jouyouwen717@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package dbus
import "reflect"
// Error represents a D-Bus message of type Error.
type dbusError struct {
Name string
Body []interface{}
}
var (
goErrorType = reflect.TypeOf((*error)(nil)).Elem()
dbusErrorType = reflect.TypeOf((*dbusError)(nil))
)
func (e dbusError) Error() string {
if len(e.Body) >= 1 {
s, ok := e.Body[0].(string)
if ok {
return e.Name + ":" + s
}
}
return e.Name
}
const (
NoObjectError = iota
UnknowInterfaceError
UnknowMethodError
UnknowPropertyError
OtherError
)
func NewCustomError(name string, args ...interface{}) dbusError {
return dbusError{
name,
args,
}
}
func NewNoObjectError(path ObjectPath) dbusError {
return dbusError{
"org.freedesktop.DBus.Error.NoSuchObject",
[]interface{}{"No such object" + string(path)},
}
}
func newError(errType int, args ...interface{}) dbusError {
//TODO: complete this
name := "UnknowError"
switch errType {
case NoObjectError:
name = "org.freedesktop.DBus.Error.NoSuchObject"
}
return dbusError{
name,
args,
}
}
func NewPropertyNotWritableError(name string) dbusError {
return dbusError{
"org.freedesktop.DBus.Error.NoWritable",
[]interface{}{"Can't write this property."},
}
}
func NewUnknowInterfaceError(ifcName string) dbusError {
return dbusError{
"org.freedesktop.DBus.Error.NoSuchInterface",
[]interface{}{"No such interface"},
}
}
func NewUnknowPropertyError(name string) dbusError {
return dbusError{
"org.freedesktop.DBus.Error.UnknownProperty",
[]interface{}{"Unknown / invalid Property"},
}
}
func NewOtherError(body interface{}) dbusError {
return dbusError{
"com.deepin.DBus.Error.UnknowError",
[]interface{}{body},
}
}
func newInternalError(body interface{}) dbusError {
return dbusError{
"com.deepin.DBus.Error.InternalError",
[]interface{}{body},
}
}
func NewUnknowMethod(path ObjectPath, ifc, name string) dbusError {
return dbusError{
"org.freedesktop.DBus.Error.UnknownMethod",
[]interface{}{"Cant find the method of " + name},
}
}
func NewInvalidArg(content string) dbusError {
return dbusError{
"org.freedesktop.DBus.Error.InvalidArgs",
[]interface{}{"Invalid type / number of args" + content},
}
}