-
-
Notifications
You must be signed in to change notification settings - Fork 17
/
eventContentToContent.go
51 lines (47 loc) · 1.17 KB
/
eventContentToContent.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
package commands
import (
"github.com/plgd-dev/go-coap/v2/message"
extCodes "github.com/plgd-dev/hub/v2/grpc-gateway/pb/codes"
"google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
"google.golang.org/protobuf/runtime/protoiface"
)
type EventContent interface {
GetContent() *Content
GetStatus() Status
protoiface.MessageV1
}
func CheckEventContent(ec EventContent) error {
_, err := EventContentToContent(ec)
return err
}
func EventContentToContent(ec EventContent) (*Content, error) {
var content *Content
c := ec.GetContent()
if c != nil {
contentType := c.GetContentType()
if contentType == "" && c.GetCoapContentFormat() >= 0 {
contentType = message.MediaType(c.GetCoapContentFormat()).String()
}
content = &Content{
Data: c.GetData(),
ContentType: contentType,
}
}
statusCode := ec.GetStatus().ToGrpcCode()
switch statusCode {
case codes.OK:
case codes.Code(extCodes.Accepted):
case codes.Code(extCodes.Created):
default:
s := status.New(statusCode, "error response from device")
if content != nil {
newS, err := s.WithDetails(ec)
if err == nil {
s = newS
}
}
return nil, s.Err()
}
return content, nil
}