Dripline-Cpp  v2.4.2
Dripline Implementation in C++
amqp.cc
Go to the documentation of this file.
1 /*
2  * amqp.hh
3  *
4  * Created on: Sep 25, 2019
5  * Author: N.S. Oblath
6  */
7 
8 #define DRIPLINE_API_EXPORTS
9 
10 #include "amqp.hh"
11 
12 namespace dripline
13 {
14  DRIPLINE_API scarab::param_ptr_t table_to_param( const AmqpClient::Table& a_table )
15  {
16  scarab::param_ptr_t t_param( new scarab::param_node() );
17  scarab::param_node& t_node = (*t_param).as_node();
18  for( auto i_entry = a_table.begin(); i_entry != a_table.end(); ++i_entry )
19  {
20  t_node.add( i_entry->first, table_to_param( i_entry->second ) );
21  }
22  return t_param;
23  }
24 
25  DRIPLINE_API scarab::param_ptr_t table_to_param( const AmqpClient::Array& a_array )
26  {
27  scarab::param_ptr_t t_param( new scarab::param_array() );
28  scarab::param_array& t_array = (*t_param).as_array();
29  for( auto i_entry = a_array.begin(); i_entry != a_array.end(); ++i_entry )
30  {
31  t_array.push_back( table_to_param( *i_entry ) );
32  }
33  return t_param;
34  }
35 
36  DRIPLINE_API scarab::param_ptr_t table_to_param( const AmqpClient::TableValue& a_value )
37  {
38  using AmqpClient::TableValue;
39 
40  switch( a_value.GetType() )
41  {
42  case TableValue::ValueType::VT_void:
43  return scarab::param_ptr_t( new scarab::param() );
44  break;
45  case TableValue::ValueType::VT_bool:
46  return scarab::param_ptr_t( new scarab::param_value( a_value.GetBool() ) );
47  break;
48  case TableValue::ValueType::VT_int8:
49  return scarab::param_ptr_t( new scarab::param_value( a_value.GetInt8() ) );
50  break;
51  case TableValue::ValueType::VT_int16:
52  return scarab::param_ptr_t( new scarab::param_value( a_value.GetInt16() ) );
53  break;
54  case TableValue::ValueType::VT_int32:
55  return scarab::param_ptr_t( new scarab::param_value( a_value.GetInt32() ) );
56  break;
57  case TableValue::ValueType::VT_int64:
58  return scarab::param_ptr_t( new scarab::param_value( a_value.GetInt64() ) );
59  break;
60  case TableValue::ValueType::VT_float:
61  return scarab::param_ptr_t( new scarab::param_value( a_value.GetFloat() ) );
62  break;
63  case TableValue::ValueType::VT_double:
64  return scarab::param_ptr_t( new scarab::param_value( a_value.GetDouble() ) );
65  break;
66  case TableValue::ValueType::VT_string:
67  return scarab::param_ptr_t( new scarab::param_value( a_value.GetString() ) );
68  break;
69  case TableValue::ValueType::VT_array:
70  return table_to_param( a_value.GetArray() );
71  break;
72  case TableValue::ValueType::VT_table:
73  return table_to_param( a_value.GetTable() );
74  break;
75  case TableValue::ValueType::VT_uint8:
76  return scarab::param_ptr_t( new scarab::param_value( a_value.GetUint8() ) );
77  break;
78  case TableValue::ValueType::VT_uint16:
79  return scarab::param_ptr_t( new scarab::param_value( a_value.GetUint16() ) );
80  break;
81  case TableValue::ValueType::VT_uint32:
82  return scarab::param_ptr_t( new scarab::param_value( a_value.GetUint32() ) );
83  break;
84  case TableValue::ValueType::VT_uint64:
85  return scarab::param_ptr_t( new scarab::param_value( a_value.GetUint64() ) );
86  break;
87  default:
88  throw std::domain_error( "Invalid SimpleAMQPClient TableValue type" );
89  }
90  // should never get here
91  return scarab::param_ptr_t();
92  }
93 
94  DRIPLINE_API AmqpClient::TableValue param_to_table( const scarab::param_node& a_node )
95  {
96  AmqpClient::Table t_table;
97  for( auto i_entry = a_node.begin(); i_entry != a_node.end(); ++i_entry )
98  {
99  t_table.insert( AmqpClient::TableEntry( i_entry.name(), param_to_table(*i_entry) ) );
100  }
101  return t_table;
102  }
103 
104  DRIPLINE_API AmqpClient::TableValue param_to_table( const scarab::param_array& a_array )
105  {
106  AmqpClient::Array t_array;
107  for( auto i_entry = a_array.begin(); i_entry != a_array.end(); ++i_entry )
108  {
109  t_array.push_back( param_to_table( *i_entry ) );
110  }
111  return t_array;
112  }
113 
114  DRIPLINE_API AmqpClient::TableValue param_to_table( const scarab::param_value& a_value )
115  {
116  if( a_value.is_bool() ) return AmqpClient::TableValue( a_value.as_bool() );
117  if( a_value.is_int() ) return AmqpClient::TableValue( a_value.as_int() );
118  if( a_value.is_uint() ) return AmqpClient::TableValue( a_value.as_uint() );
119  if( a_value.is_double() ) return AmqpClient::TableValue( a_value.as_double() );
120  if( a_value.is_string() ) return AmqpClient::TableValue( a_value.as_string() );
121  throw std::domain_error( "Invalid param value type" );
122  }
123 
124  DRIPLINE_API AmqpClient::TableValue param_to_table( const scarab::param& a_param )
125  {
126  if( a_param.is_null() ) return AmqpClient::TableValue();
127  if( a_param.is_node() ) return param_to_table( a_param.as_node() );
128  if( a_param.is_array() ) return param_to_table( a_param.as_array() );
129  if( a_param.is_value() ) return param_to_table( a_param.as_value() );
130  throw std::domain_error( "Invalid param type" );
131  }
132 
133 
134 } /* namespace dripline */
scarab::param_ptr_t table_to_param(const AmqpClient::Table &a_table)
Definition: amqp.cc:14
#define DRIPLINE_API
Definition: dripline_api.hh:34
AmqpClient::TableValue param_to_table(const scarab::param_node &a_node)
Definition: amqp.cc:94