Commit 25d7d1f0 authored by Giorgio Azzinnaro's avatar Giorgio Azzinnaro

removed python grpc tests; added boost test; switched to externally generated pb

parent 7ab1034d
......@@ -7,9 +7,15 @@ set(CMAKE_CXX_STANDARD 14)
option(BUILD_SHARED_LIBS "Build libprofanedb.so, to embed ProfaneDB" ON)
option(BUILD_PROFANEDB_SERVER "Build ProfaneDB gRPC server" OFF)
option(BUILD_TESTS "Build ProfaneDB tests" OFF)
set(PROTOBUF_IMPORT_DIRS "${CMAKE_SOURCE_DIR}/src")
# Even tests will need to include file from here
include_directories(${CMAKE_CURRENT_BINARY_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/src)
# same with profanedb/protobuf objects
set(PROTOBUF_IMPORT_DIRS ${PROTOBUF_IMPORT_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/src)
add_subdirectory(src)
add_subdirectory(src/profanedb)
if (BUILD_TESTS)
add_subdirectory(test)
endif()
# Created by https://www.gitignore.io/api/python,virtualenv
### Python ###
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
.hypothesis/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# dotenv
.env
# virtualenv
.venv
venv/
ENV/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
### VirtualEnv ###
# Virtualenv
# http://iamzed.com/2009/05/07/a-primer-on-virtualenv/
[Bb]in
[Ii]nclude
[Ll]ib
[Ll]ib64
[Ll]ocal
[Ss]cripts
pyvenv.cfg
pip-selfcheck.json
# End of https://www.gitignore.io/api/python,virtualenv
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: nested.proto
import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
from profanedb.protobuf import options_pb2 as profanedb_dot_protobuf_dot_options__pb2
DESCRIPTOR = _descriptor.FileDescriptor(
name='nested.proto',
package='test',
syntax='proto3',
serialized_pb=_b('\n\x0cnested.proto\x12\x04test\x1a profanedb/protobuf/options.proto\"1\n\x0e\x45xternalNested\x12\x1f\n\x10\x66ield_one_double\x18\x01 \x01(\x01\x42\x05\xe2@\x02\x08\x01\x62\x06proto3')
,
dependencies=[profanedb_dot_protobuf_dot_options__pb2.DESCRIPTOR,])
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
_EXTERNALNESTED = _descriptor.Descriptor(
name='ExternalNested',
full_name='test.ExternalNested',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='field_one_double', full_name='test.ExternalNested.field_one_double', index=0,
number=1, type=1, cpp_type=5, label=1,
has_default_value=False, default_value=float(0),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), _b('\342@\002\010\001'))),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=56,
serialized_end=105,
)
DESCRIPTOR.message_types_by_name['ExternalNested'] = _EXTERNALNESTED
ExternalNested = _reflection.GeneratedProtocolMessageType('ExternalNested', (_message.Message,), dict(
DESCRIPTOR = _EXTERNALNESTED,
__module__ = 'nested_pb2'
# @@protoc_insertion_point(class_scope:test.ExternalNested)
))
_sym_db.RegisterMessage(ExternalNested)
_EXTERNALNESTED.fields_by_name['field_one_double'].has_options = True
_EXTERNALNESTED.fields_by_name['field_one_double']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), _b('\342@\002\010\001'))
try:
# THESE ELEMENTS WILL BE DEPRECATED.
# Please use the generated *_pb2_grpc.py files instead.
import grpc
from grpc.beta import implementations as beta_implementations
from grpc.beta import interfaces as beta_interfaces
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities
except ImportError:
pass
# @@protoc_insertion_point(module_scope)
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
import grpc
../../../src/profanedb/protobuf/db.proto
\ No newline at end of file
This diff is collapsed.
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
import grpc
import profanedb.protobuf.db_pb2 as profanedb_dot_protobuf_dot_db__pb2
class DbStub(object):
def __init__(self, channel):
"""Constructor.
Args:
channel: A grpc.Channel.
"""
self.Get = channel.unary_unary(
'/profanedb.protobuf.Db/Get',
request_serializer=profanedb_dot_protobuf_dot_db__pb2.GetReq.SerializeToString,
response_deserializer=profanedb_dot_protobuf_dot_db__pb2.GetResp.FromString,
)
self.Put = channel.unary_unary(
'/profanedb.protobuf.Db/Put',
request_serializer=profanedb_dot_protobuf_dot_db__pb2.PutReq.SerializeToString,
response_deserializer=profanedb_dot_protobuf_dot_db__pb2.PutResp.FromString,
)
self.Delete = channel.unary_unary(
'/profanedb.protobuf.Db/Delete',
request_serializer=profanedb_dot_protobuf_dot_db__pb2.DelReq.SerializeToString,
response_deserializer=profanedb_dot_protobuf_dot_db__pb2.DelResp.FromString,
)
class DbServicer(object):
def Get(self, request, context):
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def Put(self, request, context):
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def Delete(self, request, context):
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def add_DbServicer_to_server(servicer, server):
rpc_method_handlers = {
'Get': grpc.unary_unary_rpc_method_handler(
servicer.Get,
request_deserializer=profanedb_dot_protobuf_dot_db__pb2.GetReq.FromString,
response_serializer=profanedb_dot_protobuf_dot_db__pb2.GetResp.SerializeToString,
),
'Put': grpc.unary_unary_rpc_method_handler(
servicer.Put,
request_deserializer=profanedb_dot_protobuf_dot_db__pb2.PutReq.FromString,
response_serializer=profanedb_dot_protobuf_dot_db__pb2.PutResp.SerializeToString,
),
'Delete': grpc.unary_unary_rpc_method_handler(
servicer.Delete,
request_deserializer=profanedb_dot_protobuf_dot_db__pb2.DelReq.FromString,
response_serializer=profanedb_dot_protobuf_dot_db__pb2.DelResp.SerializeToString,
),
}
generic_handler = grpc.method_handlers_generic_handler(
'profanedb.protobuf.Db', rpc_method_handlers)
server.add_generic_rpc_handlers((generic_handler,))
../../../src/profanedb/protobuf/options.proto
\ No newline at end of file
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: profanedb/protobuf/options.proto
import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2
DESCRIPTOR = _descriptor.FileDescriptor(
name='profanedb/protobuf/options.proto',
package='profanedb.protobuf',
syntax='proto2',
serialized_pb=_b('\n profanedb/protobuf/options.proto\x12\x12profanedb.protobuf\x1a google/protobuf/descriptor.proto\"\x1b\n\x0c\x46ieldOptions\x12\x0b\n\x03key\x18\x01 \x01(\x08:Q\n\x07options\x12\x1d.google.protobuf.FieldOptions\x18\x8c\x08 \x01(\x0b\x32 .profanedb.protobuf.FieldOptionsBZ\n\x16\x63om.profanedb.protobufZ%gitlab.com/profanedb/protobuf/options\xa2\x02\x03PDB\xaa\x02\x12ProfaneDB.Protobuf')
,
dependencies=[google_dot_protobuf_dot_descriptor__pb2.DESCRIPTOR,])
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
OPTIONS_FIELD_NUMBER = 1036
options = _descriptor.FieldDescriptor(
name='options', full_name='profanedb.protobuf.options', index=0,
number=1036, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=True, extension_scope=None,
options=None)
_FIELDOPTIONS = _descriptor.Descriptor(
name='FieldOptions',
full_name='profanedb.protobuf.FieldOptions',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='key', full_name='profanedb.protobuf.FieldOptions.key', index=0,
number=1, type=8, cpp_type=7, label=1,
has_default_value=False, default_value=False,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto2',
extension_ranges=[],
oneofs=[
],
serialized_start=90,
serialized_end=117,
)
DESCRIPTOR.message_types_by_name['FieldOptions'] = _FIELDOPTIONS
DESCRIPTOR.extensions_by_name['options'] = options
FieldOptions = _reflection.GeneratedProtocolMessageType('FieldOptions', (_message.Message,), dict(
DESCRIPTOR = _FIELDOPTIONS,
__module__ = 'profanedb.protobuf.options_pb2'
# @@protoc_insertion_point(class_scope:profanedb.protobuf.FieldOptions)
))
_sym_db.RegisterMessage(FieldOptions)
options.message_type = _FIELDOPTIONS
google_dot_protobuf_dot_descriptor__pb2.FieldOptions.RegisterExtension(options)
DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\026com.profanedb.protobufZ%gitlab.com/profanedb/protobuf/options\242\002\003PDB\252\002\022ProfaneDB.Protobuf'))
try:
# THESE ELEMENTS WILL BE DEPRECATED.
# Please use the generated *_pb2_grpc.py files instead.
import grpc
from grpc.beta import implementations as beta_implementations
from grpc.beta import interfaces as beta_interfaces
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities
except ImportError:
pass
# @@protoc_insertion_point(module_scope)
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
import grpc
import grpc
from profanedb.protobuf import db_pb2, db_pb2_grpc
import test_pb2, nested_pb2
from google.protobuf import any_pb2
def run():
channel = grpc.insecure_channel('localhost:50051')
stub = db_pb2_grpc.DbStub(channel)
to_serialize = test_pb2.Test(
field_one_int = 123,
field_two_str = "my_string",
field_three_bool = True,
field_four_bytes = b'bytes',
field_five_nested =
test_pb2.Nested(
nested_field_one_str = "nested string",
nested_field_two_int = 1902923490,
nested_field_three_double = 1728.543344
),
field_six_externalnested =
nested_pb2.ExternalNested(
field_one_double = 123.456
),
field_seven_repeated_keyable =
test_pb2.Nested.KeyableNestedInNested(
nested_in_nested_field_one_repeated_str = ["repeated", "string", "key"]
)
)
serializable = any_pb2.Any()
serializable.Pack(to_serialize)
stub.Put(db_pb2.PutReq(
serializable = serializable
))
stub.Get(db_pb2.GetReq(
key = "test.Test.field_one_int$123"
))
if __name__ == '__main__':
run()
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: test.proto
import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
from profanedb.protobuf import options_pb2 as profanedb_dot_protobuf_dot_options__pb2
import nested_pb2 as nested__pb2
DESCRIPTOR = _descriptor.FileDescriptor(
name='test.proto',
package='test',
syntax='proto3',
serialized_pb=_b('\n\ntest.proto\x12\x04test\x1a profanedb/protobuf/options.proto\x1a\x0cnested.proto\"\x9a\x02\n\x04Test\x12\x1c\n\rfield_one_int\x18\x01 \x01(\x05\x42\x05\xe2@\x02\x08\x01\x12\x15\n\rfield_two_str\x18\x02 \x01(\t\x12\x18\n\x10\x66ield_three_bool\x18\x03 \x01(\x08\x12\'\n\x11\x66ield_five_nested\x18\x05 \x01(\x0b\x32\x0c.test.Nested\x12\x18\n\x10\x66ield_four_bytes\x18\x04 \x01(\x0c\x12\x36\n\x18\x66ield_six_externalnested\x18\x06 \x01(\x0b\x32\x14.test.ExternalNested\x12H\n\x1c\x66ield_seven_repeated_keyable\x18\x07 \x01(\x0b\x32\".test.Nested.KeyableNestedInNested\"\xbf\x01\n\x06Nested\x12#\n\x14nested_field_one_str\x18\x01 \x01(\tB\x05\xe2@\x02\x08\x01\x12\x1c\n\x14nested_field_two_int\x18\x02 \x01(\x03\x12!\n\x19nested_field_three_double\x18\x03 \x01(\x01\x1aO\n\x15KeyableNestedInNested\x12\x36\n\'nested_in_nested_field_one_repeated_str\x18\x01 \x03(\tB\x05\xe2@\x02\x08\x01\x62\x06proto3')
,
dependencies=[profanedb_dot_protobuf_dot_options__pb2.DESCRIPTOR,nested__pb2.DESCRIPTOR,])
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
_TEST = _descriptor.Descriptor(
name='Test',
full_name='test.Test',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='field_one_int', full_name='test.Test.field_one_int', index=0,
number=1, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), _b('\342@\002\010\001'))),
_descriptor.FieldDescriptor(
name='field_two_str', full_name='test.Test.field_two_str', index=1,
number=2, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='field_three_bool', full_name='test.Test.field_three_bool', index=2,
number=3, type=8, cpp_type=7, label=1,
has_default_value=False, default_value=False,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='field_five_nested', full_name='test.Test.field_five_nested', index=3,
number=5, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='field_four_bytes', full_name='test.Test.field_four_bytes', index=4,
number=4, type=12, cpp_type=9, label=1,
has_default_value=False, default_value=_b(""),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='field_six_externalnested', full_name='test.Test.field_six_externalnested', index=5,
number=6, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='field_seven_repeated_keyable', full_name='test.Test.field_seven_repeated_keyable', index=6,
number=7, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=69,
serialized_end=351,
)
_NESTED_KEYABLENESTEDINNESTED = _descriptor.Descriptor(
name='KeyableNestedInNested',
full_name='test.Nested.KeyableNestedInNested',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='nested_in_nested_field_one_repeated_str', full_name='test.Nested.KeyableNestedInNested.nested_in_nested_field_one_repeated_str', index=0,
number=1, type=9, cpp_type=9, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), _b('\342@\002\010\001'))),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=466,
serialized_end=545,
)
_NESTED = _descriptor.Descriptor(
name='Nested',
full_name='test.Nested',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='nested_field_one_str', full_name='test.Nested.nested_field_one_str', index=0,
number=1, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), _b('\342@\002\010\001'))),
_descriptor.FieldDescriptor(
name='nested_field_two_int', full_name='test.Nested.nested_field_two_int', index=1,
number=2, type=3, cpp_type=2, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='nested_field_three_double', full_name='test.Nested.nested_field_three_double', index=2,
number=3, type=1, cpp_type=5, label=1,
has_default_value=False, default_value=float(0),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[_NESTED_KEYABLENESTEDINNESTED, ],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=354,
serialized_end=545,
)
_TEST.fields_by_name['field_five_nested'].message_type = _NESTED
_TEST.fields_by_name['field_six_externalnested'].message_type = nested__pb2._EXTERNALNESTED
_TEST.fields_by_name['field_seven_repeated_keyable'].message_type = _NESTED_KEYABLENESTEDINNESTED
_NESTED_KEYABLENESTEDINNESTED.containing_type = _NESTED
DESCRIPTOR.message_types_by_name['Test'] = _TEST
DESCRIPTOR.message_types_by_name['Nested'] = _NESTED
Test = _reflection.GeneratedProtocolMessageType('Test', (_message.Message,), dict(
DESCRIPTOR = _TEST,
__module__ = 'test_pb2'
# @@protoc_insertion_point(class_scope:test.Test)
))
_sym_db.RegisterMessage(Test)
Nested = _reflection.GeneratedProtocolMessageType('Nested', (_message.Message,), dict(
KeyableNestedInNested = _reflection.GeneratedProtocolMessageType('KeyableNestedInNested', (_message.Message,), dict(
DESCRIPTOR = _NESTED_KEYABLENESTEDINNESTED,
__module__ = 'test_pb2'
# @@protoc_insertion_point(class_scope:test.Nested.KeyableNestedInNested)
))
,
DESCRIPTOR = _NESTED,
__module__ = 'test_pb2'
# @@protoc_insertion_point(class_scope:test.Nested)
))
_sym_db.RegisterMessage(Nested)
_sym_db.RegisterMessage(Nested.KeyableNestedInNested)
_TEST.fields_by_name['field_one_int'].has_options = True
_TEST.fields_by_name['field_one_int']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), _b('\342@\002\010\001'))
_NESTED_KEYABLENESTEDINNESTED.fields_by_name['nested_in_nested_field_one_repeated_str'].has_options = True
_NESTED_KEYABLENESTEDINNESTED.fields_by_name['nested_in_nested_field_one_repeated_str']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), _b('\342@\002\010\001'))
_NESTED.fields_by_name['nested_field_one_str'].has_options = True
_NESTED.fields_by_name['nested_field_one_str']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), _b('\342@\002\010\001'))
try:
# THESE ELEMENTS WILL BE DEPRECATED.
# Please use the generated *_pb2_grpc.py files instead.
import grpc
from grpc.beta import implementations as beta_implementations
from grpc.beta import interfaces as beta_interfaces
from grpc.framework.common import cardinality
from grpc.framework.interfaces.face import utilities as face_utilities
except ImportError:
pass
# @@protoc_insertion_point(module_scope)
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
import grpc
add_subdirectory(profanedb)
......@@ -4,8 +4,8 @@ add_subdirectory(format)
add_subdirectory(vault)
# TODO Maybe we could build for google::protobuf::Message somewhere
# add_library(profanedb db.cpp)
# target_link_libraries(profanedb profanedb_format profanedb_vault profanedb_protobuf)
add_library(profanedb)
target_link_libraries(profanedb profanedb_format profanedb_vault profanedb_protobuf)
if(BUILD_PROFANEDB_SERVER)
add_subdirectory(server)
......
ProfaneDB/protobuf build - master
======
007ed411e22fb219a3553b09064c99eb21d5d64d
*built by giorgio.azzinnaro@gmail.com on Thu Jun 1 20:26:19 UTC 2017*