forked from sendgrid/go-gmime
/
data_wrapper.go
64 lines (51 loc) · 1.5 KB
/
data_wrapper.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
package gmime
/*
#cgo pkg-config: gmime-2.6
#include <stdlib.h>
#include <gmime/gmime.h>
*/
import "C"
type DataWrapper interface {
Janitor
Encoding() string
WriteToStream(stream Stream) uintptr
Stream() Stream
}
type rawDataWrapper interface {
DataWrapper
rawDataWrapper() *C.GMimeDataWrapper
}
type aDataWrapper struct {
*PointerMixin
}
func CastDataWrapper(dw *C.GMimeDataWrapper) *aDataWrapper {
return &aDataWrapper{CastPointer(C.gpointer(dw))}
}
func NewDataWrapper() DataWrapper {
dw := C.g_mime_data_wrapper_new()
defer unref(C.gpointer(dw))
return CastDataWrapper(dw)
}
func NewDataWrapperWithStream(stream Stream, encoding string) DataWrapper {
var rawEncoding C.GMimeContentEncoding
rawStream := stream.(rawStream)
rawEncoding = goGMimeString2Encoding(encoding)
dw := C.g_mime_data_wrapper_new_with_stream(rawStream.rawStream(), rawEncoding)
defer unref(C.gpointer(dw))
return CastDataWrapper(dw)
}
func (d *aDataWrapper) Stream() Stream {
return CastStream(C.g_mime_data_wrapper_get_stream(d.rawDataWrapper()))
}
func (d *aDataWrapper) Encoding() string {
var enc C.GMimeContentEncoding
enc = C.g_mime_data_wrapper_get_encoding(d.rawDataWrapper())
return goGMimeEncoding2String(enc)
}
func (d *aDataWrapper) WriteToStream(stream Stream) uintptr {
rawStream := stream.(rawStream)
return uintptr(C.g_mime_data_wrapper_write_to_stream(d.rawDataWrapper(), rawStream.rawStream()))
}
func (d *aDataWrapper) rawDataWrapper() *C.GMimeDataWrapper {
return (*C.GMimeDataWrapper)(d.pointer())
}