0609db2f10d8c7d36988855efe99c4da8470f464
[ric-plt/e2mgr.git] / tools / xapp_mock / frontend / jsonDecoder.go
1 //
2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //      http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 package frontend
18
19 import (
20         "bytes"
21         "encoding/json"
22         "fmt"
23         "github.com/pkg/errors"
24         "io"
25 )
26
27 const (
28         SendRmrMessage  = "send"
29         ReceiveRmrMessage  = "receive"
30 )
31
32
33 type JsonCommand struct {
34  Id string
35  RmrMessageType  string
36  TransactionId string
37  RanName string
38  RanIp string
39  RanPort int
40  PayloadHeader string
41  PackedPayload string
42  Payload string
43  Action string
44  WaitForRmrMessageType string
45 }
46
47 // Id -> Command
48 var Configuration = make(map[string]*JsonCommand)
49 // Rmr Message Id -> Command
50 var WaitedForRmrMessageType = make(map[int]*JsonCommand)
51
52 func JsonCommandDecoder(data []byte, processor func (*JsonCommand) error ) error {
53         dec := json.NewDecoder(bytes.NewReader(data))
54         var cmd JsonCommand
55         if err := dec.Decode(&cmd); err != nil && err != io.EOF {
56                 return errors.New(err.Error())
57         }
58         if err := processor (&cmd); err != nil {
59                 return err
60         }
61         return nil
62 }
63
64 func JsonCommandsDecoder(data []byte, processor func (*JsonCommand) error ) error {
65         dec := json.NewDecoder(bytes.NewReader(data))
66         for {
67                 var commands []JsonCommand
68                 if err := dec.Decode(&commands); err == io.EOF {
69                         break
70                 } else if err != nil {
71                         return errors.New(err.Error())
72                 }
73                 for i, cmd := range commands {
74                         if err := processor(&cmd); err != nil {
75                                 return errors.New(fmt.Sprintf("processing error at #%d, %s",i,err))
76                         }
77                 }
78         }
79         return nil
80 }