forked from c0re100/go-tdlib
/
logStream.go
173 lines (140 loc) · 4.94 KB
/
logStream.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
package tdlib
import (
"encoding/json"
"fmt"
)
// LogStream Describes a stream to which TDLib internal log is written
type LogStream interface {
GetLogStreamEnum() LogStreamEnum
}
// LogStreamEnum Alias for abstract LogStream 'Sub-Classes', used as constant-enum here
type LogStreamEnum string
// LogStream enums
const (
LogStreamDefaultType LogStreamEnum = "logStreamDefault"
LogStreamFileType LogStreamEnum = "logStreamFile"
LogStreamEmptyType LogStreamEnum = "logStreamEmpty"
)
func unmarshalLogStream(rawMsg *json.RawMessage) (LogStream, error) {
if rawMsg == nil {
return nil, nil
}
var objMap map[string]interface{}
err := json.Unmarshal(*rawMsg, &objMap)
if err != nil {
return nil, err
}
switch LogStreamEnum(objMap["@type"].(string)) {
case LogStreamDefaultType:
var logStreamDefault LogStreamDefault
err := json.Unmarshal(*rawMsg, &logStreamDefault)
return &logStreamDefault, err
case LogStreamFileType:
var logStreamFile LogStreamFile
err := json.Unmarshal(*rawMsg, &logStreamFile)
return &logStreamFile, err
case LogStreamEmptyType:
var logStreamEmpty LogStreamEmpty
err := json.Unmarshal(*rawMsg, &logStreamEmpty)
return &logStreamEmpty, err
default:
return nil, fmt.Errorf("Error UnMarshaling, unknown type:" + objMap["@type"].(string))
}
}
// LogStreamDefault The log is written to stderr or an OS specific log
type LogStreamDefault struct {
tdCommon
}
// MessageType return the string telegram-type of LogStreamDefault
func (logStreamDefault *LogStreamDefault) MessageType() string {
return "logStreamDefault"
}
// NewLogStreamDefault creates a new LogStreamDefault
//
func NewLogStreamDefault() *LogStreamDefault {
logStreamDefaultTemp := LogStreamDefault{
tdCommon: tdCommon{Type: "logStreamDefault"},
}
return &logStreamDefaultTemp
}
// GetLogStreamEnum return the enum type of this object
func (logStreamDefault *LogStreamDefault) GetLogStreamEnum() LogStreamEnum {
return LogStreamDefaultType
}
// LogStreamFile The log is written to a file
type LogStreamFile struct {
tdCommon
Path string `json:"path"` // Path to the file to where the internal TDLib log will be written
MaxFileSize int64 `json:"max_file_size"` // The maximum size of the file to where the internal TDLib log is written before the file will automatically be rotated, in bytes
RedirectStderr bool `json:"redirect_stderr"` // Pass true to additionally redirect stderr to the log file. Ignored on Windows
}
// MessageType return the string telegram-type of LogStreamFile
func (logStreamFile *LogStreamFile) MessageType() string {
return "logStreamFile"
}
// NewLogStreamFile creates a new LogStreamFile
//
// @param path Path to the file to where the internal TDLib log will be written
// @param maxFileSize The maximum size of the file to where the internal TDLib log is written before the file will automatically be rotated, in bytes
// @param redirectStderr Pass true to additionally redirect stderr to the log file. Ignored on Windows
func NewLogStreamFile(path string, maxFileSize int64, redirectStderr bool) *LogStreamFile {
logStreamFileTemp := LogStreamFile{
tdCommon: tdCommon{Type: "logStreamFile"},
Path: path,
MaxFileSize: maxFileSize,
RedirectStderr: redirectStderr,
}
return &logStreamFileTemp
}
// GetLogStreamEnum return the enum type of this object
func (logStreamFile *LogStreamFile) GetLogStreamEnum() LogStreamEnum {
return LogStreamFileType
}
// LogStreamEmpty The log is written nowhere
type LogStreamEmpty struct {
tdCommon
}
// MessageType return the string telegram-type of LogStreamEmpty
func (logStreamEmpty *LogStreamEmpty) MessageType() string {
return "logStreamEmpty"
}
// NewLogStreamEmpty creates a new LogStreamEmpty
//
func NewLogStreamEmpty() *LogStreamEmpty {
logStreamEmptyTemp := LogStreamEmpty{
tdCommon: tdCommon{Type: "logStreamEmpty"},
}
return &logStreamEmptyTemp
}
// GetLogStreamEnum return the enum type of this object
func (logStreamEmpty *LogStreamEmpty) GetLogStreamEnum() LogStreamEnum {
return LogStreamEmptyType
}
// GetLogStream Returns information about currently used log stream for internal logging of TDLib. Can be called synchronously
func (client *Client) GetLogStream() (LogStream, error) {
result, err := client.SendAndCatch(UpdateData{
"@type": "getLogStream",
})
if err != nil {
return nil, err
}
if result.Data["@type"].(string) == "error" {
return nil, fmt.Errorf("error! code: %v msg: %s", result.Data["code"], result.Data["message"])
}
switch LogStreamEnum(result.Data["@type"].(string)) {
case LogStreamDefaultType:
var logStream LogStreamDefault
err = json.Unmarshal(result.Raw, &logStream)
return &logStream, err
case LogStreamFileType:
var logStream LogStreamFile
err = json.Unmarshal(result.Raw, &logStream)
return &logStream, err
case LogStreamEmptyType:
var logStream LogStreamEmpty
err = json.Unmarshal(result.Raw, &logStream)
return &logStream, err
default:
return nil, fmt.Errorf("Invalid type")
}
}