diff --git a/.github/workflows/build_cmake.yml b/.github/workflows/build_cmake.yml index 263f70df8..5bc3ca43b 100644 --- a/.github/workflows/build_cmake.yml +++ b/.github/workflows/build_cmake.yml @@ -26,13 +26,17 @@ jobs: os: windows-latest, build_type: "Release", cc: "gcc-9", cxx: "g++-9", cmake_platform: "-A x64", + # On msvc, the -j flag does not help build times and causes intermittent + # file permission errors. + cmake_number_of_jobs: "" } - { name: "Ubuntu Build", artifact: "Linux.tar.xz", os: ubuntu-18.04, build_type: "Release", cc: "gcc-9", cxx: "g++-9", cmake_platform: "", - glibc_version: "2_27" + glibc_version: "2_27", + cmake_number_of_jobs: "-j 2" } steps: @@ -83,7 +87,7 @@ jobs: shell: cmake -P {0} run: | execute_process( - COMMAND cmake --build build --config $ENV{BUILD_TYPE} + COMMAND cmake --build build --config $ENV{BUILD_TYPE} ${{ matrix.config.cmake_number_of_jobs }} RESULT_VARIABLE result OUTPUT_VARIABLE output ERROR_VARIABLE output diff --git a/.github/workflows/build_nilrt.yml b/.github/workflows/build_nilrt.yml index 32f4716f9..6685c7547 100644 --- a/.github/workflows/build_nilrt.yml +++ b/.github/workflows/build_nilrt.yml @@ -121,7 +121,7 @@ jobs: shell: cmake -P {0} run: | execute_process( - COMMAND cmake --build build --config $ENV{BUILD_TYPE} + COMMAND cmake --build build --config $ENV{BUILD_TYPE} -j 2 RESULT_VARIABLE result OUTPUT_VARIABLE output ERROR_VARIABLE output diff --git a/CMakeLists.txt b/CMakeLists.txt index 622fa05af..7aa19b494 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,10 +94,12 @@ set(codegen_scripts "${codegen_dir}/client_helpers.py" "${codegen_dir}/common_helpers.py" "${codegen_dir}/generate_service.py" + "${codegen_dir}/generate_shared_service_files.py" "${codegen_dir}/service_helpers.py" "${codegen_dir}/proto_helpers.py" "${codegen_dir}/metadata_mutation.py" "${codegen_dir}/metadata_validation.py" + "${codegen_dir}/template_helpers.py" "${codegen_dir}/templates/client.cpp.mako" "${codegen_dir}/templates/client.h.mako" "${codegen_dir}/templates/client_helpers.mako" @@ -107,15 +109,19 @@ set(codegen_scripts "${codegen_dir}/templates/mock_library.h.mako" "${codegen_dir}/templates/proto.mako" "${codegen_dir}/templates/proto_helpers.mako" + "${codegen_dir}/templates/register_all_services.h.mako" + "${codegen_dir}/templates/register_all_services.cpp.mako" "${codegen_dir}/templates/service.cpp.mako" "${codegen_dir}/templates/service_helpers.mako" - "${codegen_dir}/templates/service.h.mako") + "${codegen_dir}/templates/service.h.mako" + "${codegen_dir}/templates/service_registrar.h.mako" + "${codegen_dir}/templates/service_registrar.cpp.mako" + ) # Populated in the api loop below. set(nidriver_service_srcs "") set(nidriver_client_srcs "") - foreach(api ${nidrivers}) set(codegen_dependencies "${metadata_dir}/${api}/attributes.py" @@ -136,12 +142,16 @@ foreach(api ${nidrivers}) ${service_output_dir}/${api}/${api}_mock_library.h ${service_output_dir}/${api}/${api}.proto ${service_output_dir}/${api}/${api}_service.cpp - ${service_output_dir}/${api}/${api}_service.h) + ${service_output_dir}/${api}/${api}_service.h + ${service_output_dir}/${api}/${api}_service_registrar.cpp + ${service_output_dir}/${api}/${api}_service_registrar.h + ) set(gen_command COMMAND ${PYTHON_EXE} ${codegen_dir}/generate_service.py ${metadata_dir}/${api}/ -o ${service_output_dir}/) if (NOT api MATCHES "^nifake.*") set(nidriver_service_srcs ${nidriver_service_srcs} "${service_output_dir}/${api}/${api}_service.cpp" + "${service_output_dir}/${api}/${api}_service_registrar.cpp" "${service_output_dir}/${api}/${api}_library.cpp" "${custom_dir}/${api}_service.custom.cpp") set(nidriver_client_srcs @@ -158,6 +168,23 @@ foreach(api ${nidrivers}) DEPENDS ${proto_dependencies}) endforeach() +add_custom_command( + OUTPUT + ${service_output_dir}/register_all_services.cpp + ${service_output_dir}/register_all_services.h + COMMAND + ${PYTHON_EXE} ${codegen_dir}/generate_shared_service_files.py ${metadata_dir}/ -o ${service_output_dir}/ + COMMENT + "Generating shared service files" + DEPENDS + ${proto_dependencies} +) + +set(nidriver_service_srcs + ${nidriver_service_srcs} + ${service_output_dir}/register_all_services.cpp +) + #---------------------------------------------------------------------- # Proto file #---------------------------------------------------------------------- @@ -237,6 +264,7 @@ endforeach() add_executable(ni_grpc_device_server "source/server/core_server.cpp" + "source/server/core_service_registrar.cpp" "source/server/device_enumerator.cpp" "source/server/feature_toggles.cpp" "source/server/logging.cpp" @@ -406,6 +434,7 @@ add_custom_command( add_executable(SystemTestsRunner "source/tests/utilities/run_all_tests.cpp" + "source/server/core_service_registrar.cpp" "source/tests/system/device_server.cpp" "source/tests/system/enumerate_devices.cpp" "source/tests/system/session_utilities_service_tests.cpp" diff --git a/generated/nidaqmx/nidaqmx_service.cpp b/generated/nidaqmx/nidaqmx_service.cpp index 507aa7daa..1a62353ba 100644 --- a/generated/nidaqmx/nidaqmx_service.cpp +++ b/generated/nidaqmx/nidaqmx_service.cpp @@ -28,7 +28,7 @@ namespace nidaqmx_grpc { NiDAQmxService::NiDAQmxService( NiDAQmxLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles) + const NiDAQmxFeatureToggles& feature_toggles) : library_(library), session_repository_(session_repository), feature_toggles_(feature_toggles) { } @@ -17769,12 +17769,8 @@ namespace nidaqmx_grpc { } } - bool NiDAQmxService::is_enabled() - { - return feature_toggles_.is_enabled; - } - NiDAQmxService::NiDAQmxFeatureToggles::NiDAQmxFeatureToggles( + NiDAQmxFeatureToggles::NiDAQmxFeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) : is_enabled( feature_toggles.is_feature_enabled("nidaqmx", CodeReadiness::kRelease)), diff --git a/generated/nidaqmx/nidaqmx_service.h b/generated/nidaqmx/nidaqmx_service.h index 859315d57..b1eda52aa 100644 --- a/generated/nidaqmx/nidaqmx_service.h +++ b/generated/nidaqmx/nidaqmx_service.h @@ -23,6 +23,15 @@ namespace nidaqmx_grpc { +struct NiDAQmxFeatureToggles +{ + using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + NiDAQmxFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles = {}); + + bool is_enabled; + bool is_allow_undefined_attributes_enabled; +}; + class NiDAQmxService final : public NiDAQmx::WithCallbackMethod_RegisterSignalEvent>> { public: using ResourceRepositorySharedPtr = std::shared_ptr>; @@ -30,7 +39,7 @@ class NiDAQmxService final : public NiDAQmx::WithCallbackMethod_RegisterSignalEv NiDAQmxService( NiDAQmxLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles = {}); + const NiDAQmxFeatureToggles& feature_toggles = {}); virtual ~NiDAQmxService(); ::grpc::Status AddCDAQSyncConnection(::grpc::ServerContext* context, const AddCDAQSyncConnectionRequest* request, AddCDAQSyncConnectionResponse* response) override; @@ -419,21 +428,10 @@ class NiDAQmxService final : public NiDAQmx::WithCallbackMethod_RegisterSignalEv ::grpc::Status WriteRaw(::grpc::ServerContext* context, const WriteRawRequest* request, WriteRawResponse* response) override; ::grpc::Status WriteToTEDSFromArray(::grpc::ServerContext* context, const WriteToTEDSFromArrayRequest* request, WriteToTEDSFromArrayResponse* response) override; ::grpc::Status WriteToTEDSFromFile(::grpc::ServerContext* context, const WriteToTEDSFromFileRequest* request, WriteToTEDSFromFileResponse* response) override; - - bool is_enabled(); private: NiDAQmxLibraryInterface* library_; ResourceRepositorySharedPtr session_repository_; - struct NiDAQmxFeatureToggles - { - using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; - NiDAQmxFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles); - - bool is_enabled; - bool is_allow_undefined_attributes_enabled; - }; - NiDAQmxFeatureToggles feature_toggles_; }; diff --git a/generated/nidaqmx/nidaqmx_service_registrar.cpp b/generated/nidaqmx/nidaqmx_service_registrar.cpp new file mode 100644 index 000000000..086e364ee --- /dev/null +++ b/generated/nidaqmx/nidaqmx_service_registrar.cpp @@ -0,0 +1,52 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar implementation for the NI-DAQMX Metadata +//--------------------------------------------------------------------- +#include "nidaqmx_library.h" + +#include + +#include "nidaqmx_service.h" +#include "nidaqmx_service_registrar.h" + +namespace nidaqmx_grpc { + +namespace { +struct LibraryAndService { + LibraryAndService( + const std::shared_ptr>& resource_repository, + const NiDAQmxFeatureToggles& feature_toggles) + : library(), + service( + &library, + resource_repository, + feature_toggles) { + } + NiDAQmxLibrary library; + NiDAQmxService service; +}; +} + +std::shared_ptr register_service( + grpc::ServerBuilder& builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles) +{ + auto toggles = NiDAQmxFeatureToggles(feature_toggles); + + if (toggles.is_enabled) + { + auto library_and_service_ptr = std::make_shared( + resource_repository, + toggles); + auto& service = library_and_service_ptr->service; + builder.RegisterService(&service); + return library_and_service_ptr; + } + + return {}; +} + +} // nidaqmx_grpc diff --git a/generated/nidaqmx/nidaqmx_service_registrar.h b/generated/nidaqmx/nidaqmx_service_registrar.h new file mode 100644 index 000000000..95edc7a7e --- /dev/null +++ b/generated/nidaqmx/nidaqmx_service_registrar.h @@ -0,0 +1,30 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar header for the NI-DAQMX Metadata +//--------------------------------------------------------------------- +#ifndef NIDAQMX_GRPC_SERVICE_REGISTRAR_H +#define NIDAQMX_GRPC_SERVICE_REGISTRAR_H +#include +#include + +#include + +#include // for TaskHandle + +namespace grpc { +class ServerBuilder; +} + +namespace nidaqmx_grpc { +using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + +std::shared_ptr register_service( + grpc::ServerBuilder& server_builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles); + +} // nidaqmx_grpc + +#endif // NIDAQMX_GRPC_SERVICE_REGISTRAR_H diff --git a/generated/nidcpower/nidcpower_service.cpp b/generated/nidcpower/nidcpower_service.cpp index 678ff10da..7685d3e6f 100644 --- a/generated/nidcpower/nidcpower_service.cpp +++ b/generated/nidcpower/nidcpower_service.cpp @@ -24,7 +24,7 @@ namespace nidcpower_grpc { NiDCPowerService::NiDCPowerService( NiDCPowerLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles) + const NiDCPowerFeatureToggles& feature_toggles) : library_(library), session_repository_(session_repository), feature_toggles_(feature_toggles) { } @@ -3472,12 +3472,8 @@ namespace nidcpower_grpc { } } - bool NiDCPowerService::is_enabled() - { - return feature_toggles_.is_enabled; - } - NiDCPowerService::NiDCPowerFeatureToggles::NiDCPowerFeatureToggles( + NiDCPowerFeatureToggles::NiDCPowerFeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) : is_enabled( feature_toggles.is_feature_enabled("nidcpower", CodeReadiness::kRelease)) diff --git a/generated/nidcpower/nidcpower_service.h b/generated/nidcpower/nidcpower_service.h index 0f4f2de23..a0704800a 100644 --- a/generated/nidcpower/nidcpower_service.h +++ b/generated/nidcpower/nidcpower_service.h @@ -23,6 +23,14 @@ namespace nidcpower_grpc { +struct NiDCPowerFeatureToggles +{ + using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + NiDCPowerFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles = {}); + + bool is_enabled; +}; + class NiDCPowerService final : public NiDCPower::Service { public: using ResourceRepositorySharedPtr = std::shared_ptr>; @@ -30,7 +38,7 @@ class NiDCPowerService final : public NiDCPower::Service { NiDCPowerService( NiDCPowerLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles = {}); + const NiDCPowerFeatureToggles& feature_toggles = {}); virtual ~NiDCPowerService(); ::grpc::Status AbortWithChannels(::grpc::ServerContext* context, const AbortWithChannelsRequest* request, AbortWithChannelsResponse* response) override; @@ -166,21 +174,11 @@ class NiDCPowerService final : public NiDCPower::Service { ::grpc::Status SetAttributeViString(::grpc::ServerContext* context, const SetAttributeViStringRequest* request, SetAttributeViStringResponse* response) override; ::grpc::Status SetSequence(::grpc::ServerContext* context, const SetSequenceRequest* request, SetSequenceResponse* response) override; ::grpc::Status WaitForEvent(::grpc::ServerContext* context, const WaitForEventRequest* request, WaitForEventResponse* response) override; - - bool is_enabled(); private: NiDCPowerLibraryInterface* library_; ResourceRepositorySharedPtr session_repository_; void Copy(const std::vector& input, google::protobuf::RepeatedField* output); - struct NiDCPowerFeatureToggles - { - using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; - NiDCPowerFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles); - - bool is_enabled; - }; - NiDCPowerFeatureToggles feature_toggles_; }; diff --git a/generated/nidcpower/nidcpower_service_registrar.cpp b/generated/nidcpower/nidcpower_service_registrar.cpp new file mode 100644 index 000000000..a2345b8fc --- /dev/null +++ b/generated/nidcpower/nidcpower_service_registrar.cpp @@ -0,0 +1,52 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar implementation for the NI-DCPower Metadata +//--------------------------------------------------------------------- +#include "nidcpower_library.h" + +#include + +#include "nidcpower_service.h" +#include "nidcpower_service_registrar.h" + +namespace nidcpower_grpc { + +namespace { +struct LibraryAndService { + LibraryAndService( + const std::shared_ptr>& resource_repository, + const NiDCPowerFeatureToggles& feature_toggles) + : library(), + service( + &library, + resource_repository, + feature_toggles) { + } + NiDCPowerLibrary library; + NiDCPowerService service; +}; +} + +std::shared_ptr register_service( + grpc::ServerBuilder& builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles) +{ + auto toggles = NiDCPowerFeatureToggles(feature_toggles); + + if (toggles.is_enabled) + { + auto library_and_service_ptr = std::make_shared( + resource_repository, + toggles); + auto& service = library_and_service_ptr->service; + builder.RegisterService(&service); + return library_and_service_ptr; + } + + return {}; +} + +} // nidcpower_grpc diff --git a/generated/nidcpower/nidcpower_service_registrar.h b/generated/nidcpower/nidcpower_service_registrar.h new file mode 100644 index 000000000..7eb762aec --- /dev/null +++ b/generated/nidcpower/nidcpower_service_registrar.h @@ -0,0 +1,30 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar header for the NI-DCPower Metadata +//--------------------------------------------------------------------- +#ifndef NIDCPOWER_GRPC_SERVICE_REGISTRAR_H +#define NIDCPOWER_GRPC_SERVICE_REGISTRAR_H +#include +#include + +#include + +#include // for ViSession + +namespace grpc { +class ServerBuilder; +} + +namespace nidcpower_grpc { +using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + +std::shared_ptr register_service( + grpc::ServerBuilder& server_builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles); + +} // nidcpower_grpc + +#endif // NIDCPOWER_GRPC_SERVICE_REGISTRAR_H diff --git a/generated/nidigitalpattern/nidigitalpattern_service.cpp b/generated/nidigitalpattern/nidigitalpattern_service.cpp index 10b805c36..e7c2b3907 100644 --- a/generated/nidigitalpattern/nidigitalpattern_service.cpp +++ b/generated/nidigitalpattern/nidigitalpattern_service.cpp @@ -24,7 +24,7 @@ namespace nidigitalpattern_grpc { NiDigitalService::NiDigitalService( NiDigitalLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles) + const NiDigitalFeatureToggles& feature_toggles) : library_(library), session_repository_(session_repository), feature_toggles_(feature_toggles) { } @@ -3660,12 +3660,8 @@ namespace nidigitalpattern_grpc { } } - bool NiDigitalService::is_enabled() - { - return feature_toggles_.is_enabled; - } - NiDigitalService::NiDigitalFeatureToggles::NiDigitalFeatureToggles( + NiDigitalFeatureToggles::NiDigitalFeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) : is_enabled( feature_toggles.is_feature_enabled("nidigitalpattern", CodeReadiness::kRelease)) diff --git a/generated/nidigitalpattern/nidigitalpattern_service.h b/generated/nidigitalpattern/nidigitalpattern_service.h index 2da9f855b..a73cc7a38 100644 --- a/generated/nidigitalpattern/nidigitalpattern_service.h +++ b/generated/nidigitalpattern/nidigitalpattern_service.h @@ -23,6 +23,14 @@ namespace nidigitalpattern_grpc { +struct NiDigitalFeatureToggles +{ + using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + NiDigitalFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles = {}); + + bool is_enabled; +}; + class NiDigitalService final : public NiDigital::Service { public: using ResourceRepositorySharedPtr = std::shared_ptr>; @@ -30,7 +38,7 @@ class NiDigitalService final : public NiDigital::Service { NiDigitalService( NiDigitalLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles = {}); + const NiDigitalFeatureToggles& feature_toggles = {}); virtual ~NiDigitalService(); ::grpc::Status Abort(::grpc::ServerContext* context, const AbortRequest* request, AbortResponse* response) override; @@ -163,8 +171,6 @@ class NiDigitalService final : public NiDigital::Service { ::grpc::Status WriteSourceWaveformDataFromFileTDMS(::grpc::ServerContext* context, const WriteSourceWaveformDataFromFileTDMSRequest* request, WriteSourceWaveformDataFromFileTDMSResponse* response) override; ::grpc::Status WriteStatic(::grpc::ServerContext* context, const WriteStaticRequest* request, WriteStaticResponse* response) override; ::grpc::Status WriteSourceWaveformSiteUniqueU32(::grpc::ServerContext* context, const WriteSourceWaveformSiteUniqueU32Request* request, WriteSourceWaveformSiteUniqueU32Response* response) override; - - bool is_enabled(); private: NiDigitalLibraryInterface* library_; ResourceRepositorySharedPtr session_repository_; @@ -172,14 +178,6 @@ class NiDigitalService final : public NiDigital::Service { template void CopyBytesToEnums(const std::string& input, google::protobuf::RepeatedField* output); - struct NiDigitalFeatureToggles - { - using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; - NiDigitalFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles); - - bool is_enabled; - }; - NiDigitalFeatureToggles feature_toggles_; }; diff --git a/generated/nidigitalpattern/nidigitalpattern_service_registrar.cpp b/generated/nidigitalpattern/nidigitalpattern_service_registrar.cpp new file mode 100644 index 000000000..0e3f68ac4 --- /dev/null +++ b/generated/nidigitalpattern/nidigitalpattern_service_registrar.cpp @@ -0,0 +1,52 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar implementation for the NI-Digital Pattern Driver Metadata +//--------------------------------------------------------------------- +#include "nidigitalpattern_library.h" + +#include + +#include "nidigitalpattern_service.h" +#include "nidigitalpattern_service_registrar.h" + +namespace nidigitalpattern_grpc { + +namespace { +struct LibraryAndService { + LibraryAndService( + const std::shared_ptr>& resource_repository, + const NiDigitalFeatureToggles& feature_toggles) + : library(), + service( + &library, + resource_repository, + feature_toggles) { + } + NiDigitalLibrary library; + NiDigitalService service; +}; +} + +std::shared_ptr register_service( + grpc::ServerBuilder& builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles) +{ + auto toggles = NiDigitalFeatureToggles(feature_toggles); + + if (toggles.is_enabled) + { + auto library_and_service_ptr = std::make_shared( + resource_repository, + toggles); + auto& service = library_and_service_ptr->service; + builder.RegisterService(&service); + return library_and_service_ptr; + } + + return {}; +} + +} // nidigitalpattern_grpc diff --git a/generated/nidigitalpattern/nidigitalpattern_service_registrar.h b/generated/nidigitalpattern/nidigitalpattern_service_registrar.h new file mode 100644 index 000000000..7440e499e --- /dev/null +++ b/generated/nidigitalpattern/nidigitalpattern_service_registrar.h @@ -0,0 +1,30 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar header for the NI-Digital Pattern Driver Metadata +//--------------------------------------------------------------------- +#ifndef NIDIGITALPATTERN_GRPC_SERVICE_REGISTRAR_H +#define NIDIGITALPATTERN_GRPC_SERVICE_REGISTRAR_H +#include +#include + +#include + +#include // for ViSession + +namespace grpc { +class ServerBuilder; +} + +namespace nidigitalpattern_grpc { +using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + +std::shared_ptr register_service( + grpc::ServerBuilder& server_builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles); + +} // nidigitalpattern_grpc + +#endif // NIDIGITALPATTERN_GRPC_SERVICE_REGISTRAR_H diff --git a/generated/nidmm/nidmm_service.cpp b/generated/nidmm/nidmm_service.cpp index 20102f53b..ac0280ea3 100644 --- a/generated/nidmm/nidmm_service.cpp +++ b/generated/nidmm/nidmm_service.cpp @@ -24,7 +24,7 @@ namespace nidmm_grpc { NiDmmService::NiDmmService( NiDmmLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles) + const NiDmmFeatureToggles& feature_toggles) : library_(library), session_repository_(session_repository), feature_toggles_(feature_toggles) { } @@ -2598,12 +2598,8 @@ namespace nidmm_grpc { } } - bool NiDmmService::is_enabled() - { - return feature_toggles_.is_enabled; - } - NiDmmService::NiDmmFeatureToggles::NiDmmFeatureToggles( + NiDmmFeatureToggles::NiDmmFeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) : is_enabled( feature_toggles.is_feature_enabled("nidmm", CodeReadiness::kRelease)) diff --git a/generated/nidmm/nidmm_service.h b/generated/nidmm/nidmm_service.h index 817239dcd..cf012a231 100644 --- a/generated/nidmm/nidmm_service.h +++ b/generated/nidmm/nidmm_service.h @@ -23,6 +23,14 @@ namespace nidmm_grpc { +struct NiDmmFeatureToggles +{ + using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + NiDmmFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles = {}); + + bool is_enabled; +}; + class NiDmmService final : public NiDmm::Service { public: using ResourceRepositorySharedPtr = std::shared_ptr>; @@ -30,7 +38,7 @@ class NiDmmService final : public NiDmm::Service { NiDmmService( NiDmmLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles = {}); + const NiDmmFeatureToggles& feature_toggles = {}); virtual ~NiDmmService(); ::grpc::Status Control4022(::grpc::ServerContext* context, const Control4022Request* request, Control4022Response* response) override; @@ -121,20 +129,10 @@ class NiDmmService final : public NiDmm::Service { ::grpc::Status SetAttributeViReal64(::grpc::ServerContext* context, const SetAttributeViReal64Request* request, SetAttributeViReal64Response* response) override; ::grpc::Status SetAttributeViSession(::grpc::ServerContext* context, const SetAttributeViSessionRequest* request, SetAttributeViSessionResponse* response) override; ::grpc::Status SetAttributeViString(::grpc::ServerContext* context, const SetAttributeViStringRequest* request, SetAttributeViStringResponse* response) override; - - bool is_enabled(); private: NiDmmLibraryInterface* library_; ResourceRepositorySharedPtr session_repository_; - struct NiDmmFeatureToggles - { - using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; - NiDmmFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles); - - bool is_enabled; - }; - NiDmmFeatureToggles feature_toggles_; }; diff --git a/generated/nidmm/nidmm_service_registrar.cpp b/generated/nidmm/nidmm_service_registrar.cpp new file mode 100644 index 000000000..565b3724e --- /dev/null +++ b/generated/nidmm/nidmm_service_registrar.cpp @@ -0,0 +1,52 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar implementation for the NI-DMM Metadata +//--------------------------------------------------------------------- +#include "nidmm_library.h" + +#include + +#include "nidmm_service.h" +#include "nidmm_service_registrar.h" + +namespace nidmm_grpc { + +namespace { +struct LibraryAndService { + LibraryAndService( + const std::shared_ptr>& resource_repository, + const NiDmmFeatureToggles& feature_toggles) + : library(), + service( + &library, + resource_repository, + feature_toggles) { + } + NiDmmLibrary library; + NiDmmService service; +}; +} + +std::shared_ptr register_service( + grpc::ServerBuilder& builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles) +{ + auto toggles = NiDmmFeatureToggles(feature_toggles); + + if (toggles.is_enabled) + { + auto library_and_service_ptr = std::make_shared( + resource_repository, + toggles); + auto& service = library_and_service_ptr->service; + builder.RegisterService(&service); + return library_and_service_ptr; + } + + return {}; +} + +} // nidmm_grpc diff --git a/generated/nidmm/nidmm_service_registrar.h b/generated/nidmm/nidmm_service_registrar.h new file mode 100644 index 000000000..dfb26a416 --- /dev/null +++ b/generated/nidmm/nidmm_service_registrar.h @@ -0,0 +1,30 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar header for the NI-DMM Metadata +//--------------------------------------------------------------------- +#ifndef NIDMM_GRPC_SERVICE_REGISTRAR_H +#define NIDMM_GRPC_SERVICE_REGISTRAR_H +#include +#include + +#include + +#include // for ViSession + +namespace grpc { +class ServerBuilder; +} + +namespace nidmm_grpc { +using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + +std::shared_ptr register_service( + grpc::ServerBuilder& server_builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles); + +} // nidmm_grpc + +#endif // NIDMM_GRPC_SERVICE_REGISTRAR_H diff --git a/generated/nifake/nifake_service.cpp b/generated/nifake/nifake_service.cpp index a39463504..333a379e9 100644 --- a/generated/nifake/nifake_service.cpp +++ b/generated/nifake/nifake_service.cpp @@ -24,7 +24,7 @@ namespace nifake_grpc { NiFakeService::NiFakeService( NiFakeLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles) + const NiFakeFeatureToggles& feature_toggles) : library_(library), session_repository_(session_repository), feature_toggles_(feature_toggles) { } @@ -1925,12 +1925,8 @@ namespace nifake_grpc { } } - bool NiFakeService::is_enabled() - { - return feature_toggles_.is_enabled; - } - NiFakeService::NiFakeFeatureToggles::NiFakeFeatureToggles( + NiFakeFeatureToggles::NiFakeFeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) : is_enabled( feature_toggles.is_feature_enabled("nifake", CodeReadiness::kRelease)) diff --git a/generated/nifake/nifake_service.h b/generated/nifake/nifake_service.h index 93cfd097e..c3511eade 100644 --- a/generated/nifake/nifake_service.h +++ b/generated/nifake/nifake_service.h @@ -23,6 +23,14 @@ namespace nifake_grpc { +struct NiFakeFeatureToggles +{ + using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + NiFakeFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles = {}); + + bool is_enabled; +}; + class NiFakeService final : public NiFake::Service { public: using ResourceRepositorySharedPtr = std::shared_ptr>; @@ -30,7 +38,7 @@ class NiFakeService final : public NiFake::Service { NiFakeService( NiFakeLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles = {}); + const NiFakeFeatureToggles& feature_toggles = {}); virtual ~NiFakeService(); ::grpc::Status Abort(::grpc::ServerContext* context, const AbortRequest* request, AbortResponse* response) override; @@ -100,8 +108,6 @@ class NiFakeService final : public NiFake::Service { ::grpc::Status ViUInt8ArrayInputFunction(::grpc::ServerContext* context, const ViUInt8ArrayInputFunctionRequest* request, ViUInt8ArrayInputFunctionResponse* response) override; ::grpc::Status ViUInt8ArrayOutputFunction(::grpc::ServerContext* context, const ViUInt8ArrayOutputFunctionRequest* request, ViUInt8ArrayOutputFunctionResponse* response) override; ::grpc::Status ViInt16ArrayInputFunction(::grpc::ServerContext* context, const ViInt16ArrayInputFunctionRequest* request, ViInt16ArrayInputFunctionResponse* response) override; - - bool is_enabled(); private: NiFakeLibraryInterface* library_; ResourceRepositorySharedPtr session_repository_; @@ -115,14 +121,6 @@ class NiFakeService final : public NiFake::Service { std::map nifakereal64attributevaluesmapped_input_map_ { {1, 3.5f},{2, 4.5f},{3, 5.5f},{4, 6.5f},{5, 7.5f}, }; std::map nifakereal64attributevaluesmapped_output_map_ { {3.5f, 1},{4.5f, 2},{5.5f, 3},{6.5f, 4},{7.5f, 5}, }; - struct NiFakeFeatureToggles - { - using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; - NiFakeFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles); - - bool is_enabled; - }; - NiFakeFeatureToggles feature_toggles_; }; diff --git a/generated/nifake/nifake_service_registrar.cpp b/generated/nifake/nifake_service_registrar.cpp new file mode 100644 index 000000000..5698909e2 --- /dev/null +++ b/generated/nifake/nifake_service_registrar.cpp @@ -0,0 +1,52 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar implementation for the NI-FAKE Metadata +//--------------------------------------------------------------------- +#include "nifake_library.h" + +#include + +#include "nifake_service.h" +#include "nifake_service_registrar.h" + +namespace nifake_grpc { + +namespace { +struct LibraryAndService { + LibraryAndService( + const std::shared_ptr>& resource_repository, + const NiFakeFeatureToggles& feature_toggles) + : library(), + service( + &library, + resource_repository, + feature_toggles) { + } + NiFakeLibrary library; + NiFakeService service; +}; +} + +std::shared_ptr register_service( + grpc::ServerBuilder& builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles) +{ + auto toggles = NiFakeFeatureToggles(feature_toggles); + + if (toggles.is_enabled) + { + auto library_and_service_ptr = std::make_shared( + resource_repository, + toggles); + auto& service = library_and_service_ptr->service; + builder.RegisterService(&service); + return library_and_service_ptr; + } + + return {}; +} + +} // nifake_grpc diff --git a/generated/nifake/nifake_service_registrar.h b/generated/nifake/nifake_service_registrar.h new file mode 100644 index 000000000..60d75c6cd --- /dev/null +++ b/generated/nifake/nifake_service_registrar.h @@ -0,0 +1,30 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar header for the NI-FAKE Metadata +//--------------------------------------------------------------------- +#ifndef NIFAKE_GRPC_SERVICE_REGISTRAR_H +#define NIFAKE_GRPC_SERVICE_REGISTRAR_H +#include +#include + +#include + +#include // for ViSession + +namespace grpc { +class ServerBuilder; +} + +namespace nifake_grpc { +using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + +std::shared_ptr register_service( + grpc::ServerBuilder& server_builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles); + +} // nifake_grpc + +#endif // NIFAKE_GRPC_SERVICE_REGISTRAR_H diff --git a/generated/nifake_extension/nifake_extension_service.cpp b/generated/nifake_extension/nifake_extension_service.cpp index 86aeec1da..13431d26f 100644 --- a/generated/nifake_extension/nifake_extension_service.cpp +++ b/generated/nifake_extension/nifake_extension_service.cpp @@ -21,7 +21,7 @@ namespace nifake_extension_grpc { NiFakeExtensionService::NiFakeExtensionService( NiFakeExtensionLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles) + const NiFakeExtensionFeatureToggles& feature_toggles) : library_(library), session_repository_(session_repository), feature_toggles_(feature_toggles) { } @@ -50,12 +50,8 @@ namespace nifake_extension_grpc { } } - bool NiFakeExtensionService::is_enabled() - { - return feature_toggles_.is_enabled; - } - NiFakeExtensionService::NiFakeExtensionFeatureToggles::NiFakeExtensionFeatureToggles( + NiFakeExtensionFeatureToggles::NiFakeExtensionFeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) : is_enabled( feature_toggles.is_feature_enabled("nifake_extension", CodeReadiness::kRelease)) diff --git a/generated/nifake_extension/nifake_extension_service.h b/generated/nifake_extension/nifake_extension_service.h index 57f602320..52f31c85a 100644 --- a/generated/nifake_extension/nifake_extension_service.h +++ b/generated/nifake_extension/nifake_extension_service.h @@ -23,6 +23,14 @@ namespace nifake_extension_grpc { +struct NiFakeExtensionFeatureToggles +{ + using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + NiFakeExtensionFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles = {}); + + bool is_enabled; +}; + class NiFakeExtensionService final : public NiFakeExtension::Service { public: using ResourceRepositorySharedPtr = std::shared_ptr>; @@ -30,24 +38,14 @@ class NiFakeExtensionService final : public NiFakeExtension::Service { NiFakeExtensionService( NiFakeExtensionLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles = {}); + const NiFakeExtensionFeatureToggles& feature_toggles = {}); virtual ~NiFakeExtensionService(); ::grpc::Status AddCoolFunctionality(::grpc::ServerContext* context, const AddCoolFunctionalityRequest* request, AddCoolFunctionalityResponse* response) override; - - bool is_enabled(); private: NiFakeExtensionLibraryInterface* library_; ResourceRepositorySharedPtr session_repository_; - struct NiFakeExtensionFeatureToggles - { - using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; - NiFakeExtensionFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles); - - bool is_enabled; - }; - NiFakeExtensionFeatureToggles feature_toggles_; }; diff --git a/generated/nifake_extension/nifake_extension_service_registrar.cpp b/generated/nifake_extension/nifake_extension_service_registrar.cpp new file mode 100644 index 000000000..d665215cd --- /dev/null +++ b/generated/nifake_extension/nifake_extension_service_registrar.cpp @@ -0,0 +1,52 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar implementation for the NI-FAKE-EXTENSION Metadata +//--------------------------------------------------------------------- +#include "nifake_extension_library.h" + +#include + +#include "nifake_extension_service.h" +#include "nifake_extension_service_registrar.h" + +namespace nifake_extension_grpc { + +namespace { +struct LibraryAndService { + LibraryAndService( + const std::shared_ptr>& resource_repository, + const NiFakeExtensionFeatureToggles& feature_toggles) + : library(), + service( + &library, + resource_repository, + feature_toggles) { + } + NiFakeExtensionLibrary library; + NiFakeExtensionService service; +}; +} + +std::shared_ptr register_service( + grpc::ServerBuilder& builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles) +{ + auto toggles = NiFakeExtensionFeatureToggles(feature_toggles); + + if (toggles.is_enabled) + { + auto library_and_service_ptr = std::make_shared( + resource_repository, + toggles); + auto& service = library_and_service_ptr->service; + builder.RegisterService(&service); + return library_and_service_ptr; + } + + return {}; +} + +} // nifake_extension_grpc diff --git a/generated/nifake_extension/nifake_extension_service_registrar.h b/generated/nifake_extension/nifake_extension_service_registrar.h new file mode 100644 index 000000000..f90986cf7 --- /dev/null +++ b/generated/nifake_extension/nifake_extension_service_registrar.h @@ -0,0 +1,30 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar header for the NI-FAKE-EXTENSION Metadata +//--------------------------------------------------------------------- +#ifndef NIFAKE_EXTENSION_GRPC_SERVICE_REGISTRAR_H +#define NIFAKE_EXTENSION_GRPC_SERVICE_REGISTRAR_H +#include +#include + +#include + +#include // for ViSession + +namespace grpc { +class ServerBuilder; +} + +namespace nifake_extension_grpc { +using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + +std::shared_ptr register_service( + grpc::ServerBuilder& server_builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles); + +} // nifake_extension_grpc + +#endif // NIFAKE_EXTENSION_GRPC_SERVICE_REGISTRAR_H diff --git a/generated/nifake_non_ivi/nifake_non_ivi_service.cpp b/generated/nifake_non_ivi/nifake_non_ivi_service.cpp index 2b827d2fd..02587455d 100644 --- a/generated/nifake_non_ivi/nifake_non_ivi_service.cpp +++ b/generated/nifake_non_ivi/nifake_non_ivi_service.cpp @@ -24,7 +24,7 @@ namespace nifake_non_ivi_grpc { NiFakeNonIviService::NiFakeNonIviService( NiFakeNonIviLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles) + const NiFakeNonIviFeatureToggles& feature_toggles) : library_(library), session_repository_(session_repository), feature_toggles_(feature_toggles) { } @@ -864,12 +864,8 @@ namespace nifake_non_ivi_grpc { } } - bool NiFakeNonIviService::is_enabled() - { - return feature_toggles_.is_enabled; - } - NiFakeNonIviService::NiFakeNonIviFeatureToggles::NiFakeNonIviFeatureToggles( + NiFakeNonIviFeatureToggles::NiFakeNonIviFeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) : is_enabled( feature_toggles.is_feature_enabled("nifake_non_ivi", CodeReadiness::kNextRelease)), diff --git a/generated/nifake_non_ivi/nifake_non_ivi_service.h b/generated/nifake_non_ivi/nifake_non_ivi_service.h index 7336038e4..e2978767c 100644 --- a/generated/nifake_non_ivi/nifake_non_ivi_service.h +++ b/generated/nifake_non_ivi/nifake_non_ivi_service.h @@ -23,6 +23,15 @@ namespace nifake_non_ivi_grpc { +struct NiFakeNonIviFeatureToggles +{ + using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + NiFakeNonIviFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles = {}); + + bool is_enabled; + bool is_allow_undefined_attributes_enabled; +}; + class NiFakeNonIviService final : public NiFakeNonIvi::WithCallbackMethod_ReadStream> { public: using ResourceRepositorySharedPtr = std::shared_ptr>; @@ -30,7 +39,7 @@ class NiFakeNonIviService final : public NiFakeNonIvi::WithCallbackMethod_ReadSt NiFakeNonIviService( NiFakeNonIviLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles = {}); + const NiFakeNonIviFeatureToggles& feature_toggles = {}); virtual ~NiFakeNonIviService(); ::grpc::Status Close(::grpc::ServerContext* context, const CloseRequest* request, CloseResponse* response) override; @@ -57,21 +66,10 @@ class NiFakeNonIviService final : public NiFakeNonIvi::WithCallbackMethod_ReadSt ::grpc::Status SetColors(::grpc::ServerContext* context, const SetColorsRequest* request, SetColorsResponse* response) override; ::grpc::Status GetStructsWithCoercion(::grpc::ServerContext* context, const GetStructsWithCoercionRequest* request, GetStructsWithCoercionResponse* response) override; ::grpc::Status SetStructsWithCoercion(::grpc::ServerContext* context, const SetStructsWithCoercionRequest* request, SetStructsWithCoercionResponse* response) override; - - bool is_enabled(); private: NiFakeNonIviLibraryInterface* library_; ResourceRepositorySharedPtr session_repository_; - struct NiFakeNonIviFeatureToggles - { - using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; - NiFakeNonIviFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles); - - bool is_enabled; - bool is_allow_undefined_attributes_enabled; - }; - NiFakeNonIviFeatureToggles feature_toggles_; }; diff --git a/generated/nifake_non_ivi/nifake_non_ivi_service_registrar.cpp b/generated/nifake_non_ivi/nifake_non_ivi_service_registrar.cpp new file mode 100644 index 000000000..4a2e83ab2 --- /dev/null +++ b/generated/nifake_non_ivi/nifake_non_ivi_service_registrar.cpp @@ -0,0 +1,52 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar implementation for the NI-FAKE-NON-IVI Metadata +//--------------------------------------------------------------------- +#include "nifake_non_ivi_library.h" + +#include + +#include "nifake_non_ivi_service.h" +#include "nifake_non_ivi_service_registrar.h" + +namespace nifake_non_ivi_grpc { + +namespace { +struct LibraryAndService { + LibraryAndService( + const std::shared_ptr>& resource_repository, + const NiFakeNonIviFeatureToggles& feature_toggles) + : library(), + service( + &library, + resource_repository, + feature_toggles) { + } + NiFakeNonIviLibrary library; + NiFakeNonIviService service; +}; +} + +std::shared_ptr register_service( + grpc::ServerBuilder& builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles) +{ + auto toggles = NiFakeNonIviFeatureToggles(feature_toggles); + + if (toggles.is_enabled) + { + auto library_and_service_ptr = std::make_shared( + resource_repository, + toggles); + auto& service = library_and_service_ptr->service; + builder.RegisterService(&service); + return library_and_service_ptr; + } + + return {}; +} + +} // nifake_non_ivi_grpc diff --git a/generated/nifake_non_ivi/nifake_non_ivi_service_registrar.h b/generated/nifake_non_ivi/nifake_non_ivi_service_registrar.h new file mode 100644 index 000000000..7cc32a874 --- /dev/null +++ b/generated/nifake_non_ivi/nifake_non_ivi_service_registrar.h @@ -0,0 +1,30 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar header for the NI-FAKE-NON-IVI Metadata +//--------------------------------------------------------------------- +#ifndef NIFAKE_NON_IVI_GRPC_SERVICE_REGISTRAR_H +#define NIFAKE_NON_IVI_GRPC_SERVICE_REGISTRAR_H +#include +#include + +#include + +#include // for FakeHandle + +namespace grpc { +class ServerBuilder; +} + +namespace nifake_non_ivi_grpc { +using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + +std::shared_ptr register_service( + grpc::ServerBuilder& server_builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles); + +} // nifake_non_ivi_grpc + +#endif // NIFAKE_NON_IVI_GRPC_SERVICE_REGISTRAR_H diff --git a/generated/nifgen/nifgen_service.cpp b/generated/nifgen/nifgen_service.cpp index 51efc4a26..1bef65568 100644 --- a/generated/nifgen/nifgen_service.cpp +++ b/generated/nifgen/nifgen_service.cpp @@ -24,7 +24,7 @@ namespace nifgen_grpc { NiFgenService::NiFgenService( NiFgenLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles) + const NiFgenFeatureToggles& feature_toggles) : library_(library), session_repository_(session_repository), feature_toggles_(feature_toggles) { } @@ -3424,12 +3424,8 @@ namespace nifgen_grpc { } } - bool NiFgenService::is_enabled() - { - return feature_toggles_.is_enabled; - } - NiFgenService::NiFgenFeatureToggles::NiFgenFeatureToggles( + NiFgenFeatureToggles::NiFgenFeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) : is_enabled( feature_toggles.is_feature_enabled("nifgen", CodeReadiness::kRelease)) diff --git a/generated/nifgen/nifgen_service.h b/generated/nifgen/nifgen_service.h index 5570d332d..99fcca49f 100644 --- a/generated/nifgen/nifgen_service.h +++ b/generated/nifgen/nifgen_service.h @@ -23,6 +23,14 @@ namespace nifgen_grpc { +struct NiFgenFeatureToggles +{ + using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + NiFgenFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles = {}); + + bool is_enabled; +}; + class NiFgenService final : public NiFgen::Service { public: using ResourceRepositorySharedPtr = std::shared_ptr>; @@ -30,7 +38,7 @@ class NiFgenService final : public NiFgen::Service { NiFgenService( NiFgenLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles = {}); + const NiFgenFeatureToggles& feature_toggles = {}); virtual ~NiFgenService(); ::grpc::Status AbortGeneration(::grpc::ServerContext* context, const AbortGenerationRequest* request, AbortGenerationResponse* response) override; @@ -164,20 +172,10 @@ class NiFgenService final : public NiFgen::Service { ::grpc::Status WriteWaveformComplexF64(::grpc::ServerContext* context, const WriteWaveformComplexF64Request* request, WriteWaveformComplexF64Response* response) override; ::grpc::Status WriteNamedWaveformComplexF64(::grpc::ServerContext* context, const WriteNamedWaveformComplexF64Request* request, WriteNamedWaveformComplexF64Response* response) override; ::grpc::Status WriteNamedWaveformComplexI16(::grpc::ServerContext* context, const WriteNamedWaveformComplexI16Request* request, WriteNamedWaveformComplexI16Response* response) override; - - bool is_enabled(); private: NiFgenLibraryInterface* library_; ResourceRepositorySharedPtr session_repository_; - struct NiFgenFeatureToggles - { - using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; - NiFgenFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles); - - bool is_enabled; - }; - NiFgenFeatureToggles feature_toggles_; }; diff --git a/generated/nifgen/nifgen_service_registrar.cpp b/generated/nifgen/nifgen_service_registrar.cpp new file mode 100644 index 000000000..9f74515f1 --- /dev/null +++ b/generated/nifgen/nifgen_service_registrar.cpp @@ -0,0 +1,52 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar implementation for the NI-FGEN Metadata +//--------------------------------------------------------------------- +#include "nifgen_library.h" + +#include + +#include "nifgen_service.h" +#include "nifgen_service_registrar.h" + +namespace nifgen_grpc { + +namespace { +struct LibraryAndService { + LibraryAndService( + const std::shared_ptr>& resource_repository, + const NiFgenFeatureToggles& feature_toggles) + : library(), + service( + &library, + resource_repository, + feature_toggles) { + } + NiFgenLibrary library; + NiFgenService service; +}; +} + +std::shared_ptr register_service( + grpc::ServerBuilder& builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles) +{ + auto toggles = NiFgenFeatureToggles(feature_toggles); + + if (toggles.is_enabled) + { + auto library_and_service_ptr = std::make_shared( + resource_repository, + toggles); + auto& service = library_and_service_ptr->service; + builder.RegisterService(&service); + return library_and_service_ptr; + } + + return {}; +} + +} // nifgen_grpc diff --git a/generated/nifgen/nifgen_service_registrar.h b/generated/nifgen/nifgen_service_registrar.h new file mode 100644 index 000000000..56683a404 --- /dev/null +++ b/generated/nifgen/nifgen_service_registrar.h @@ -0,0 +1,30 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar header for the NI-FGEN Metadata +//--------------------------------------------------------------------- +#ifndef NIFGEN_GRPC_SERVICE_REGISTRAR_H +#define NIFGEN_GRPC_SERVICE_REGISTRAR_H +#include +#include + +#include + +#include // for ViSession + +namespace grpc { +class ServerBuilder; +} + +namespace nifgen_grpc { +using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + +std::shared_ptr register_service( + grpc::ServerBuilder& server_builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles); + +} // nifgen_grpc + +#endif // NIFGEN_GRPC_SERVICE_REGISTRAR_H diff --git a/generated/nirfsa/nirfsa_service.cpp b/generated/nirfsa/nirfsa_service.cpp index d315f89ae..2174d56f1 100644 --- a/generated/nirfsa/nirfsa_service.cpp +++ b/generated/nirfsa/nirfsa_service.cpp @@ -25,7 +25,7 @@ namespace nirfsa_grpc { NiRFSAService::NiRFSAService( NiRFSALibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles) + const NiRFSAFeatureToggles& feature_toggles) : library_(library), session_repository_(session_repository), feature_toggles_(feature_toggles) { } @@ -3019,12 +3019,8 @@ namespace nirfsa_grpc { } } - bool NiRFSAService::is_enabled() - { - return feature_toggles_.is_enabled; - } - NiRFSAService::NiRFSAFeatureToggles::NiRFSAFeatureToggles( + NiRFSAFeatureToggles::NiRFSAFeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) : is_enabled( feature_toggles.is_feature_enabled("nirfsa", CodeReadiness::kNextRelease)) diff --git a/generated/nirfsa/nirfsa_service.h b/generated/nirfsa/nirfsa_service.h index 7ebf9c67f..cab74776c 100644 --- a/generated/nirfsa/nirfsa_service.h +++ b/generated/nirfsa/nirfsa_service.h @@ -23,6 +23,14 @@ namespace nirfsa_grpc { +struct NiRFSAFeatureToggles +{ + using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + NiRFSAFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles = {}); + + bool is_enabled; +}; + class NiRFSAService final : public NiRFSA::Service { public: using ResourceRepositorySharedPtr = std::shared_ptr>; @@ -30,7 +38,7 @@ class NiRFSAService final : public NiRFSA::Service { NiRFSAService( NiRFSALibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles = {}); + const NiRFSAFeatureToggles& feature_toggles = {}); virtual ~NiRFSAService(); ::grpc::Status Abort(::grpc::ServerContext* context, const AbortRequest* request, AbortResponse* response) override; @@ -137,8 +145,6 @@ class NiRFSAService final : public NiRFSA::Service { ::grpc::Status SetAttributeViString(::grpc::ServerContext* context, const SetAttributeViStringRequest* request, SetAttributeViStringResponse* response) override; ::grpc::Status SetCalUserDefinedInfo(::grpc::ServerContext* context, const SetCalUserDefinedInfoRequest* request, SetCalUserDefinedInfoResponse* response) override; ::grpc::Status SetUserData(::grpc::ServerContext* context, const SetUserDataRequest* request, SetUserDataResponse* response) override; - - bool is_enabled(); private: NiRFSALibraryInterface* library_; ResourceRepositorySharedPtr session_repository_; @@ -153,14 +159,6 @@ class NiRFSAService final : public NiRFSA::Service { std::map refclocksource_input_map_ { {1, "None"},{2, "OnboardClock"},{3, "RefIn"},{4, "PXI_Clk"},{5, "ClkIn"},{6, "RefIn2"},{7, "PXI_ClkMaster"}, }; std::map refclocksource_output_map_ { {"None", 1},{"OnboardClock", 2},{"RefIn", 3},{"PXI_Clk", 4},{"ClkIn", 5},{"RefIn2", 6},{"PXI_ClkMaster", 7}, }; - struct NiRFSAFeatureToggles - { - using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; - NiRFSAFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles); - - bool is_enabled; - }; - NiRFSAFeatureToggles feature_toggles_; }; diff --git a/generated/nirfsa/nirfsa_service_registrar.cpp b/generated/nirfsa/nirfsa_service_registrar.cpp new file mode 100644 index 000000000..bd5bfbe78 --- /dev/null +++ b/generated/nirfsa/nirfsa_service_registrar.cpp @@ -0,0 +1,52 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar implementation for the NI-RFSA Metadata +//--------------------------------------------------------------------- +#include "nirfsa_library.h" + +#include + +#include "nirfsa_service.h" +#include "nirfsa_service_registrar.h" + +namespace nirfsa_grpc { + +namespace { +struct LibraryAndService { + LibraryAndService( + const std::shared_ptr>& resource_repository, + const NiRFSAFeatureToggles& feature_toggles) + : library(), + service( + &library, + resource_repository, + feature_toggles) { + } + NiRFSALibrary library; + NiRFSAService service; +}; +} + +std::shared_ptr register_service( + grpc::ServerBuilder& builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles) +{ + auto toggles = NiRFSAFeatureToggles(feature_toggles); + + if (toggles.is_enabled) + { + auto library_and_service_ptr = std::make_shared( + resource_repository, + toggles); + auto& service = library_and_service_ptr->service; + builder.RegisterService(&service); + return library_and_service_ptr; + } + + return {}; +} + +} // nirfsa_grpc diff --git a/generated/nirfsa/nirfsa_service_registrar.h b/generated/nirfsa/nirfsa_service_registrar.h new file mode 100644 index 000000000..8de6a0441 --- /dev/null +++ b/generated/nirfsa/nirfsa_service_registrar.h @@ -0,0 +1,30 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar header for the NI-RFSA Metadata +//--------------------------------------------------------------------- +#ifndef NIRFSA_GRPC_SERVICE_REGISTRAR_H +#define NIRFSA_GRPC_SERVICE_REGISTRAR_H +#include +#include + +#include + +#include // for ViSession + +namespace grpc { +class ServerBuilder; +} + +namespace nirfsa_grpc { +using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + +std::shared_ptr register_service( + grpc::ServerBuilder& server_builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles); + +} // nirfsa_grpc + +#endif // NIRFSA_GRPC_SERVICE_REGISTRAR_H diff --git a/generated/nirfsg/nirfsg_service.cpp b/generated/nirfsg/nirfsg_service.cpp index e83739922..176f12f30 100644 --- a/generated/nirfsg/nirfsg_service.cpp +++ b/generated/nirfsg/nirfsg_service.cpp @@ -24,7 +24,7 @@ namespace nirfsg_grpc { NiRFSGService::NiRFSGService( NiRFSGLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles) + const NiRFSGFeatureToggles& feature_toggles) : library_(library), session_repository_(session_repository), feature_toggles_(feature_toggles) { } @@ -3236,12 +3236,8 @@ namespace nirfsg_grpc { } } - bool NiRFSGService::is_enabled() - { - return feature_toggles_.is_enabled; - } - NiRFSGService::NiRFSGFeatureToggles::NiRFSGFeatureToggles( + NiRFSGFeatureToggles::NiRFSGFeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) : is_enabled( feature_toggles.is_feature_enabled("nirfsg", CodeReadiness::kNextRelease)) diff --git a/generated/nirfsg/nirfsg_service.h b/generated/nirfsg/nirfsg_service.h index 7a8ba4d5f..3ba39c502 100644 --- a/generated/nirfsg/nirfsg_service.h +++ b/generated/nirfsg/nirfsg_service.h @@ -23,6 +23,14 @@ namespace nirfsg_grpc { +struct NiRFSGFeatureToggles +{ + using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + NiRFSGFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles = {}); + + bool is_enabled; +}; + class NiRFSGService final : public NiRFSG::Service { public: using ResourceRepositorySharedPtr = std::shared_ptr>; @@ -30,7 +38,7 @@ class NiRFSGService final : public NiRFSG::Service { NiRFSGService( NiRFSGLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles = {}); + const NiRFSGFeatureToggles& feature_toggles = {}); virtual ~NiRFSGService(); ::grpc::Status Abort(::grpc::ServerContext* context, const AbortRequest* request, AbortResponse* response) override; @@ -142,8 +150,6 @@ class NiRFSGService final : public NiRFSG::Service { ::grpc::Status WriteArbWaveformComplexI16(::grpc::ServerContext* context, const WriteArbWaveformComplexI16Request* request, WriteArbWaveformComplexI16Response* response) override; ::grpc::Status WriteArbWaveformF32(::grpc::ServerContext* context, const WriteArbWaveformF32Request* request, WriteArbWaveformF32Response* response) override; ::grpc::Status WriteScript(::grpc::ServerContext* context, const WriteScriptRequest* request, WriteScriptResponse* response) override; - - bool is_enabled(); private: NiRFSGLibraryInterface* library_; ResourceRepositorySharedPtr session_repository_; @@ -164,14 +170,6 @@ class NiRFSGService final : public NiRFSG::Service { std::map triggersource_input_map_ { {1, "PFI0"},{2, "PFI1"},{3, "PFI2"},{4, "PFI3"},{5, "PXI_Trig0"},{6, "PXI_Trig1"},{7, "PXI_Trig2"},{8, "PXI_Trig3"},{9, "PXI_Trig4"},{10, "PXI_Trig5"},{11, "PXI_Trig6"},{12, "PXI_Trig7"},{13, "PXI_STAR"},{14, "PXIe_DStarB"},{15, "Sync_Start"},{16, "Sync_Script"},{17, "TrigIn"}, }; std::map triggersource_output_map_ { {"PFI0", 1},{"PFI1", 2},{"PFI2", 3},{"PFI3", 4},{"PXI_Trig0", 5},{"PXI_Trig1", 6},{"PXI_Trig2", 7},{"PXI_Trig3", 8},{"PXI_Trig4", 9},{"PXI_Trig5", 10},{"PXI_Trig6", 11},{"PXI_Trig7", 12},{"PXI_STAR", 13},{"PXIe_DStarB", 14},{"Sync_Start", 15},{"Sync_Script", 16},{"TrigIn", 17}, }; - struct NiRFSGFeatureToggles - { - using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; - NiRFSGFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles); - - bool is_enabled; - }; - NiRFSGFeatureToggles feature_toggles_; }; diff --git a/generated/nirfsg/nirfsg_service_registrar.cpp b/generated/nirfsg/nirfsg_service_registrar.cpp new file mode 100644 index 000000000..bf56e3253 --- /dev/null +++ b/generated/nirfsg/nirfsg_service_registrar.cpp @@ -0,0 +1,52 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar implementation for the NI-RFSG Metadata +//--------------------------------------------------------------------- +#include "nirfsg_library.h" + +#include + +#include "nirfsg_service.h" +#include "nirfsg_service_registrar.h" + +namespace nirfsg_grpc { + +namespace { +struct LibraryAndService { + LibraryAndService( + const std::shared_ptr>& resource_repository, + const NiRFSGFeatureToggles& feature_toggles) + : library(), + service( + &library, + resource_repository, + feature_toggles) { + } + NiRFSGLibrary library; + NiRFSGService service; +}; +} + +std::shared_ptr register_service( + grpc::ServerBuilder& builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles) +{ + auto toggles = NiRFSGFeatureToggles(feature_toggles); + + if (toggles.is_enabled) + { + auto library_and_service_ptr = std::make_shared( + resource_repository, + toggles); + auto& service = library_and_service_ptr->service; + builder.RegisterService(&service); + return library_and_service_ptr; + } + + return {}; +} + +} // nirfsg_grpc diff --git a/generated/nirfsg/nirfsg_service_registrar.h b/generated/nirfsg/nirfsg_service_registrar.h new file mode 100644 index 000000000..f8edd9211 --- /dev/null +++ b/generated/nirfsg/nirfsg_service_registrar.h @@ -0,0 +1,30 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar header for the NI-RFSG Metadata +//--------------------------------------------------------------------- +#ifndef NIRFSG_GRPC_SERVICE_REGISTRAR_H +#define NIRFSG_GRPC_SERVICE_REGISTRAR_H +#include +#include + +#include + +#include // for ViSession + +namespace grpc { +class ServerBuilder; +} + +namespace nirfsg_grpc { +using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + +std::shared_ptr register_service( + grpc::ServerBuilder& server_builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles); + +} // nirfsg_grpc + +#endif // NIRFSG_GRPC_SERVICE_REGISTRAR_H diff --git a/generated/niscope/niscope_service.cpp b/generated/niscope/niscope_service.cpp index 918bd8aa1..fbce07c35 100644 --- a/generated/niscope/niscope_service.cpp +++ b/generated/niscope/niscope_service.cpp @@ -24,7 +24,7 @@ namespace niscope_grpc { NiScopeService::NiScopeService( NiScopeLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles) + const NiScopeFeatureToggles& feature_toggles) : library_(library), session_repository_(session_repository), feature_toggles_(feature_toggles) { } @@ -2339,12 +2339,8 @@ namespace niscope_grpc { } } - bool NiScopeService::is_enabled() - { - return feature_toggles_.is_enabled; - } - NiScopeService::NiScopeFeatureToggles::NiScopeFeatureToggles( + NiScopeFeatureToggles::NiScopeFeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) : is_enabled( feature_toggles.is_feature_enabled("niscope", CodeReadiness::kRelease)) diff --git a/generated/niscope/niscope_service.h b/generated/niscope/niscope_service.h index 2a3572fab..5040cc241 100644 --- a/generated/niscope/niscope_service.h +++ b/generated/niscope/niscope_service.h @@ -23,6 +23,14 @@ namespace niscope_grpc { +struct NiScopeFeatureToggles +{ + using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + NiScopeFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles = {}); + + bool is_enabled; +}; + class NiScopeService final : public NiScope::Service { public: using ResourceRepositorySharedPtr = std::shared_ptr>; @@ -30,7 +38,7 @@ class NiScopeService final : public NiScope::Service { NiScopeService( NiScopeLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles = {}); + const NiScopeFeatureToggles& feature_toggles = {}); virtual ~NiScopeService(); ::grpc::Status Abort(::grpc::ServerContext* context, const AbortRequest* request, AbortResponse* response) override; @@ -121,20 +129,10 @@ class NiScopeService final : public NiScope::Service { ::grpc::Status SetAttributeViReal64(::grpc::ServerContext* context, const SetAttributeViReal64Request* request, SetAttributeViReal64Response* response) override; ::grpc::Status SetAttributeViSession(::grpc::ServerContext* context, const SetAttributeViSessionRequest* request, SetAttributeViSessionResponse* response) override; ::grpc::Status SetAttributeViString(::grpc::ServerContext* context, const SetAttributeViStringRequest* request, SetAttributeViStringResponse* response) override; - - bool is_enabled(); private: NiScopeLibraryInterface* library_; ResourceRepositorySharedPtr session_repository_; - struct NiScopeFeatureToggles - { - using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; - NiScopeFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles); - - bool is_enabled; - }; - NiScopeFeatureToggles feature_toggles_; }; diff --git a/generated/niscope/niscope_service_registrar.cpp b/generated/niscope/niscope_service_registrar.cpp new file mode 100644 index 000000000..4e309ba42 --- /dev/null +++ b/generated/niscope/niscope_service_registrar.cpp @@ -0,0 +1,52 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar implementation for the NI-SCOPE Metadata +//--------------------------------------------------------------------- +#include "niscope_library.h" + +#include + +#include "niscope_service.h" +#include "niscope_service_registrar.h" + +namespace niscope_grpc { + +namespace { +struct LibraryAndService { + LibraryAndService( + const std::shared_ptr>& resource_repository, + const NiScopeFeatureToggles& feature_toggles) + : library(), + service( + &library, + resource_repository, + feature_toggles) { + } + NiScopeLibrary library; + NiScopeService service; +}; +} + +std::shared_ptr register_service( + grpc::ServerBuilder& builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles) +{ + auto toggles = NiScopeFeatureToggles(feature_toggles); + + if (toggles.is_enabled) + { + auto library_and_service_ptr = std::make_shared( + resource_repository, + toggles); + auto& service = library_and_service_ptr->service; + builder.RegisterService(&service); + return library_and_service_ptr; + } + + return {}; +} + +} // niscope_grpc diff --git a/generated/niscope/niscope_service_registrar.h b/generated/niscope/niscope_service_registrar.h new file mode 100644 index 000000000..9dac0d51a --- /dev/null +++ b/generated/niscope/niscope_service_registrar.h @@ -0,0 +1,30 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar header for the NI-SCOPE Metadata +//--------------------------------------------------------------------- +#ifndef NISCOPE_GRPC_SERVICE_REGISTRAR_H +#define NISCOPE_GRPC_SERVICE_REGISTRAR_H +#include +#include + +#include + +#include // for ViSession + +namespace grpc { +class ServerBuilder; +} + +namespace niscope_grpc { +using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + +std::shared_ptr register_service( + grpc::ServerBuilder& server_builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles); + +} // niscope_grpc + +#endif // NISCOPE_GRPC_SERVICE_REGISTRAR_H diff --git a/generated/niswitch/niswitch_service.cpp b/generated/niswitch/niswitch_service.cpp index aea7bbd6b..85b5e76d5 100644 --- a/generated/niswitch/niswitch_service.cpp +++ b/generated/niswitch/niswitch_service.cpp @@ -24,7 +24,7 @@ namespace niswitch_grpc { NiSwitchService::NiSwitchService( NiSwitchLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles) + const NiSwitchFeatureToggles& feature_toggles) : library_(library), session_repository_(session_repository), feature_toggles_(feature_toggles) { } @@ -1678,12 +1678,8 @@ namespace niswitch_grpc { } } - bool NiSwitchService::is_enabled() - { - return feature_toggles_.is_enabled; - } - NiSwitchService::NiSwitchFeatureToggles::NiSwitchFeatureToggles( + NiSwitchFeatureToggles::NiSwitchFeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) : is_enabled( feature_toggles.is_feature_enabled("niswitch", CodeReadiness::kRelease)) diff --git a/generated/niswitch/niswitch_service.h b/generated/niswitch/niswitch_service.h index edecafa63..7382695f3 100644 --- a/generated/niswitch/niswitch_service.h +++ b/generated/niswitch/niswitch_service.h @@ -23,6 +23,14 @@ namespace niswitch_grpc { +struct NiSwitchFeatureToggles +{ + using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + NiSwitchFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles = {}); + + bool is_enabled; +}; + class NiSwitchService final : public NiSwitch::Service { public: using ResourceRepositorySharedPtr = std::shared_ptr>; @@ -30,7 +38,7 @@ class NiSwitchService final : public NiSwitch::Service { NiSwitchService( NiSwitchLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles = {}); + const NiSwitchFeatureToggles& feature_toggles = {}); virtual ~NiSwitchService(); ::grpc::Status AbortScan(::grpc::ServerContext* context, const AbortScanRequest* request, AbortScanResponse* response) override; @@ -93,20 +101,10 @@ class NiSwitchService final : public NiSwitch::Service { ::grpc::Status SetPath(::grpc::ServerContext* context, const SetPathRequest* request, SetPathResponse* response) override; ::grpc::Status WaitForDebounce(::grpc::ServerContext* context, const WaitForDebounceRequest* request, WaitForDebounceResponse* response) override; ::grpc::Status WaitForScanComplete(::grpc::ServerContext* context, const WaitForScanCompleteRequest* request, WaitForScanCompleteResponse* response) override; - - bool is_enabled(); private: NiSwitchLibraryInterface* library_; ResourceRepositorySharedPtr session_repository_; - struct NiSwitchFeatureToggles - { - using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; - NiSwitchFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles); - - bool is_enabled; - }; - NiSwitchFeatureToggles feature_toggles_; }; diff --git a/generated/niswitch/niswitch_service_registrar.cpp b/generated/niswitch/niswitch_service_registrar.cpp new file mode 100644 index 000000000..1e5caf42a --- /dev/null +++ b/generated/niswitch/niswitch_service_registrar.cpp @@ -0,0 +1,52 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar implementation for the NI-SWITCH Metadata +//--------------------------------------------------------------------- +#include "niswitch_library.h" + +#include + +#include "niswitch_service.h" +#include "niswitch_service_registrar.h" + +namespace niswitch_grpc { + +namespace { +struct LibraryAndService { + LibraryAndService( + const std::shared_ptr>& resource_repository, + const NiSwitchFeatureToggles& feature_toggles) + : library(), + service( + &library, + resource_repository, + feature_toggles) { + } + NiSwitchLibrary library; + NiSwitchService service; +}; +} + +std::shared_ptr register_service( + grpc::ServerBuilder& builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles) +{ + auto toggles = NiSwitchFeatureToggles(feature_toggles); + + if (toggles.is_enabled) + { + auto library_and_service_ptr = std::make_shared( + resource_repository, + toggles); + auto& service = library_and_service_ptr->service; + builder.RegisterService(&service); + return library_and_service_ptr; + } + + return {}; +} + +} // niswitch_grpc diff --git a/generated/niswitch/niswitch_service_registrar.h b/generated/niswitch/niswitch_service_registrar.h new file mode 100644 index 000000000..8b57ea7c4 --- /dev/null +++ b/generated/niswitch/niswitch_service_registrar.h @@ -0,0 +1,30 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar header for the NI-SWITCH Metadata +//--------------------------------------------------------------------- +#ifndef NISWITCH_GRPC_SERVICE_REGISTRAR_H +#define NISWITCH_GRPC_SERVICE_REGISTRAR_H +#include +#include + +#include + +#include // for ViSession + +namespace grpc { +class ServerBuilder; +} + +namespace niswitch_grpc { +using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + +std::shared_ptr register_service( + grpc::ServerBuilder& server_builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles); + +} // niswitch_grpc + +#endif // NISWITCH_GRPC_SERVICE_REGISTRAR_H diff --git a/generated/nisync/nisync_service.cpp b/generated/nisync/nisync_service.cpp index 16a878330..34525cfc2 100644 --- a/generated/nisync/nisync_service.cpp +++ b/generated/nisync/nisync_service.cpp @@ -24,7 +24,7 @@ namespace nisync_grpc { NiSyncService::NiSyncService( NiSyncLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles) + const NiSyncFeatureToggles& feature_toggles) : library_(library), session_repository_(session_repository), feature_toggles_(feature_toggles) { } @@ -1672,12 +1672,8 @@ namespace nisync_grpc { } } - bool NiSyncService::is_enabled() - { - return feature_toggles_.is_enabled; - } - NiSyncService::NiSyncFeatureToggles::NiSyncFeatureToggles( + NiSyncFeatureToggles::NiSyncFeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) : is_enabled( feature_toggles.is_feature_enabled("nisync", CodeReadiness::kRelease)) diff --git a/generated/nisync/nisync_service.h b/generated/nisync/nisync_service.h index a0af92c22..8b5ca90bf 100644 --- a/generated/nisync/nisync_service.h +++ b/generated/nisync/nisync_service.h @@ -23,6 +23,14 @@ namespace nisync_grpc { +struct NiSyncFeatureToggles +{ + using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + NiSyncFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles = {}); + + bool is_enabled; +}; + class NiSyncService final : public NiSync::Service { public: using ResourceRepositorySharedPtr = std::shared_ptr>; @@ -30,7 +38,7 @@ class NiSyncService final : public NiSync::Service { NiSyncService( NiSyncLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles = {}); + const NiSyncFeatureToggles& feature_toggles = {}); virtual ~NiSyncService(); ::grpc::Status Init(::grpc::ServerContext* context, const InitRequest* request, InitResponse* response) override; @@ -103,20 +111,10 @@ class NiSyncService final : public NiSync::Service { ::grpc::Status CalAdjustClk10PhaseVoltage(::grpc::ServerContext* context, const CalAdjustClk10PhaseVoltageRequest* request, CalAdjustClk10PhaseVoltageResponse* response) override; ::grpc::Status CalAdjustDDSStartPulsePhaseVoltage(::grpc::ServerContext* context, const CalAdjustDDSStartPulsePhaseVoltageRequest* request, CalAdjustDDSStartPulsePhaseVoltageResponse* response) override; ::grpc::Status CalAdjustDDSInitialPhase(::grpc::ServerContext* context, const CalAdjustDDSInitialPhaseRequest* request, CalAdjustDDSInitialPhaseResponse* response) override; - - bool is_enabled(); private: NiSyncLibraryInterface* library_; ResourceRepositorySharedPtr session_repository_; - struct NiSyncFeatureToggles - { - using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; - NiSyncFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles); - - bool is_enabled; - }; - NiSyncFeatureToggles feature_toggles_; }; diff --git a/generated/nisync/nisync_service_registrar.cpp b/generated/nisync/nisync_service_registrar.cpp new file mode 100644 index 000000000..37d90b907 --- /dev/null +++ b/generated/nisync/nisync_service_registrar.cpp @@ -0,0 +1,52 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar implementation for the NI-SYNC Metadata +//--------------------------------------------------------------------- +#include "nisync_library.h" + +#include + +#include "nisync_service.h" +#include "nisync_service_registrar.h" + +namespace nisync_grpc { + +namespace { +struct LibraryAndService { + LibraryAndService( + const std::shared_ptr>& resource_repository, + const NiSyncFeatureToggles& feature_toggles) + : library(), + service( + &library, + resource_repository, + feature_toggles) { + } + NiSyncLibrary library; + NiSyncService service; +}; +} + +std::shared_ptr register_service( + grpc::ServerBuilder& builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles) +{ + auto toggles = NiSyncFeatureToggles(feature_toggles); + + if (toggles.is_enabled) + { + auto library_and_service_ptr = std::make_shared( + resource_repository, + toggles); + auto& service = library_and_service_ptr->service; + builder.RegisterService(&service); + return library_and_service_ptr; + } + + return {}; +} + +} // nisync_grpc diff --git a/generated/nisync/nisync_service_registrar.h b/generated/nisync/nisync_service_registrar.h new file mode 100644 index 000000000..a7dcff757 --- /dev/null +++ b/generated/nisync/nisync_service_registrar.h @@ -0,0 +1,30 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar header for the NI-SYNC Metadata +//--------------------------------------------------------------------- +#ifndef NISYNC_GRPC_SERVICE_REGISTRAR_H +#define NISYNC_GRPC_SERVICE_REGISTRAR_H +#include +#include + +#include + +#include // for ViSession + +namespace grpc { +class ServerBuilder; +} + +namespace nisync_grpc { +using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + +std::shared_ptr register_service( + grpc::ServerBuilder& server_builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles); + +} // nisync_grpc + +#endif // NISYNC_GRPC_SERVICE_REGISTRAR_H diff --git a/generated/nitclk/nitclk_service.cpp b/generated/nitclk/nitclk_service.cpp index 598170fb9..cb577e365 100644 --- a/generated/nitclk/nitclk_service.cpp +++ b/generated/nitclk/nitclk_service.cpp @@ -24,7 +24,7 @@ namespace nitclk_grpc { NiTClkService::NiTClkService( NiTClkLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles) + const NiTClkFeatureToggles& feature_toggles) : library_(library), session_repository_(session_repository), feature_toggles_(feature_toggles) { } @@ -399,12 +399,8 @@ namespace nitclk_grpc { } } - bool NiTClkService::is_enabled() - { - return feature_toggles_.is_enabled; - } - NiTClkService::NiTClkFeatureToggles::NiTClkFeatureToggles( + NiTClkFeatureToggles::NiTClkFeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) : is_enabled( feature_toggles.is_feature_enabled("nitclk", CodeReadiness::kRelease)) diff --git a/generated/nitclk/nitclk_service.h b/generated/nitclk/nitclk_service.h index e4f58fca9..77670326f 100644 --- a/generated/nitclk/nitclk_service.h +++ b/generated/nitclk/nitclk_service.h @@ -23,6 +23,14 @@ namespace nitclk_grpc { +struct NiTClkFeatureToggles +{ + using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + NiTClkFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles = {}); + + bool is_enabled; +}; + class NiTClkService final : public NiTClk::Service { public: using ResourceRepositorySharedPtr = std::shared_ptr>; @@ -30,7 +38,7 @@ class NiTClkService final : public NiTClk::Service { NiTClkService( NiTClkLibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles = {}); + const NiTClkFeatureToggles& feature_toggles = {}); virtual ~NiTClkService(); ::grpc::Status ConfigureForHomogeneousTriggers(::grpc::ServerContext* context, const ConfigureForHomogeneousTriggersRequest* request, ConfigureForHomogeneousTriggersResponse* response) override; @@ -48,20 +56,10 @@ class NiTClkService final : public NiTClk::Service { ::grpc::Status Synchronize(::grpc::ServerContext* context, const SynchronizeRequest* request, SynchronizeResponse* response) override; ::grpc::Status SynchronizeToSyncPulseSender(::grpc::ServerContext* context, const SynchronizeToSyncPulseSenderRequest* request, SynchronizeToSyncPulseSenderResponse* response) override; ::grpc::Status WaitUntilDone(::grpc::ServerContext* context, const WaitUntilDoneRequest* request, WaitUntilDoneResponse* response) override; - - bool is_enabled(); private: NiTClkLibraryInterface* library_; ResourceRepositorySharedPtr session_repository_; - struct NiTClkFeatureToggles - { - using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; - NiTClkFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles); - - bool is_enabled; - }; - NiTClkFeatureToggles feature_toggles_; }; diff --git a/generated/nitclk/nitclk_service_registrar.cpp b/generated/nitclk/nitclk_service_registrar.cpp new file mode 100644 index 000000000..a121fe5a3 --- /dev/null +++ b/generated/nitclk/nitclk_service_registrar.cpp @@ -0,0 +1,52 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar implementation for the NI-TClk Metadata +//--------------------------------------------------------------------- +#include "nitclk_library.h" + +#include + +#include "nitclk_service.h" +#include "nitclk_service_registrar.h" + +namespace nitclk_grpc { + +namespace { +struct LibraryAndService { + LibraryAndService( + const std::shared_ptr>& resource_repository, + const NiTClkFeatureToggles& feature_toggles) + : library(), + service( + &library, + resource_repository, + feature_toggles) { + } + NiTClkLibrary library; + NiTClkService service; +}; +} + +std::shared_ptr register_service( + grpc::ServerBuilder& builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles) +{ + auto toggles = NiTClkFeatureToggles(feature_toggles); + + if (toggles.is_enabled) + { + auto library_and_service_ptr = std::make_shared( + resource_repository, + toggles); + auto& service = library_and_service_ptr->service; + builder.RegisterService(&service); + return library_and_service_ptr; + } + + return {}; +} + +} // nitclk_grpc diff --git a/generated/nitclk/nitclk_service_registrar.h b/generated/nitclk/nitclk_service_registrar.h new file mode 100644 index 000000000..17ad65e90 --- /dev/null +++ b/generated/nitclk/nitclk_service_registrar.h @@ -0,0 +1,30 @@ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar header for the NI-TClk Metadata +//--------------------------------------------------------------------- +#ifndef NITCLK_GRPC_SERVICE_REGISTRAR_H +#define NITCLK_GRPC_SERVICE_REGISTRAR_H +#include +#include + +#include + +#include // for ViSession + +namespace grpc { +class ServerBuilder; +} + +namespace nitclk_grpc { +using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + +std::shared_ptr register_service( + grpc::ServerBuilder& server_builder, + const std::shared_ptr>& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles); + +} // nitclk_grpc + +#endif // NITCLK_GRPC_SERVICE_REGISTRAR_H diff --git a/generated/register_all_services.cpp b/generated/register_all_services.cpp new file mode 100644 index 000000000..41dd8b0d2 --- /dev/null +++ b/generated/register_all_services.cpp @@ -0,0 +1,102 @@ +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Register all services implementation. +//--------------------------------------------------------------------- +#include "register_all_services.h" + +#include +#include + +#include +#include + +#include "nidaqmx/nidaqmx_service_registrar.h" +#include "nidcpower/nidcpower_service_registrar.h" +#include "nidigitalpattern/nidigitalpattern_service_registrar.h" +#include "nidmm/nidmm_service_registrar.h" +#include "nifgen/nifgen_service_registrar.h" +#include "nirfsa/nirfsa_service_registrar.h" +#include "nirfsg/nirfsg_service_registrar.h" +#include "niscope/niscope_service_registrar.h" +#include "niswitch/niswitch_service_registrar.h" +#include "nisync/nisync_service_registrar.h" +#include "nitclk/nitclk_service_registrar.h" + +namespace nidevice_grpc { + +std::shared_ptr register_all_services( + grpc::ServerBuilder& server_builder, + const nidevice_grpc::FeatureToggles& feature_toggles) +{ + auto service_vector = std::make_shared>>(); + + auto session_repository = std::make_shared(); + auto core_service = nidevice_grpc::register_core_service(server_builder, session_repository); + service_vector->insert( + service_vector->end(), + {session_repository, core_service}); + + auto task_handle_repository = std::make_shared>(session_repository.get()); + auto vi_session_repository = std::make_shared>(session_repository.get()); + + service_vector->push_back( + nidaqmx_grpc::register_service( + server_builder, + task_handle_repository, + feature_toggles)); + service_vector->push_back( + nidcpower_grpc::register_service( + server_builder, + vi_session_repository, + feature_toggles)); + service_vector->push_back( + nidigitalpattern_grpc::register_service( + server_builder, + vi_session_repository, + feature_toggles)); + service_vector->push_back( + nidmm_grpc::register_service( + server_builder, + vi_session_repository, + feature_toggles)); + service_vector->push_back( + nifgen_grpc::register_service( + server_builder, + vi_session_repository, + feature_toggles)); + service_vector->push_back( + nirfsa_grpc::register_service( + server_builder, + vi_session_repository, + feature_toggles)); + service_vector->push_back( + nirfsg_grpc::register_service( + server_builder, + vi_session_repository, + feature_toggles)); + service_vector->push_back( + niscope_grpc::register_service( + server_builder, + vi_session_repository, + feature_toggles)); + service_vector->push_back( + niswitch_grpc::register_service( + server_builder, + vi_session_repository, + feature_toggles)); + service_vector->push_back( + nisync_grpc::register_service( + server_builder, + vi_session_repository, + feature_toggles)); + service_vector->push_back( + nitclk_grpc::register_service( + server_builder, + vi_session_repository, + feature_toggles)); + + return service_vector; +} + +} // nitclk_grpc diff --git a/generated/register_all_services.h b/generated/register_all_services.h new file mode 100644 index 000000000..03acab032 --- /dev/null +++ b/generated/register_all_services.h @@ -0,0 +1,24 @@ +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Register all services header. +//--------------------------------------------------------------------- +#ifndef NIDEVICE_GRPC_REGISTER_ALL_SERVICES_H +#define NIDEVICE_GRPC_REGISTER_ALL_SERVICES_H +#include + +#include + +namespace grpc { +class ServerBuilder; +} + +namespace nidevice_grpc { + +std::shared_ptr register_all_services( + grpc::ServerBuilder& server_builder, + const nidevice_grpc::FeatureToggles& feature_toggles); + +} // nidevice_grpc + +#endif // NIDEVICE_GRPC_REGISTER_ALL_SERVICES_H diff --git a/source/codegen/generate_service.py b/source/codegen/generate_service.py index 5b45a0c97..c16012cf6 100644 --- a/source/codegen/generate_service.py +++ b/source/codegen/generate_service.py @@ -1,56 +1,26 @@ -import sys import os import argparse -import importlib -import importlib.util -import mako.template import metadata_mutation import metadata_validation from mako.lookup import TemplateLookup import common_helpers +from template_helpers import instantiate_mako_template, load_metadata, write_if_changed def generate_service_file(metadata, template_file_name, generated_file_suffix, gen_dir): - current_dir = os.path.dirname(__file__) - template_file_path = os.path.join( - current_dir, "templates", template_file_name) - template_directory = os.path.dirname(template_file_path) module_name = metadata["config"]["module_name"] output_dir = os.path.join(gen_dir, module_name) file_name = module_name + generated_file_suffix output_file_path = os.path.join(output_dir, file_name) os.makedirs(output_dir, exist_ok=True) - template_lookup = TemplateLookup(directories=template_directory + "/") - template = mako.template.Template( - filename=template_file_path, lookup=template_lookup) + template = instantiate_mako_template(template_file_name) write_if_changed( output_file_path, template.render(data=metadata)) -def read_file_contents(output_file_path: str) -> str: - try: - with open(output_file_path, "r", newline="") as f: - return f.read() - except FileNotFoundError: - return "" - - -def write_if_changed(output_file_path: str, new_contents: str) -> None: - """Write new_contents to output_file_path if new_contents != the contents - of output_file_path. - - This prevents downstream recompiles when codegen runs but does not change - a given file. - """ - old_contents = read_file_contents(output_file_path) - if old_contents != new_contents: - with open(output_file_path, "w+", newline="") as f: - f.write(new_contents) - - def mutate_metadata(metadata: dict): config = metadata["config"] for custom_type in config.get("custom_types", []): @@ -74,14 +44,7 @@ def mutate_metadata(metadata: dict): def generate_all(metadata_dir: str, gen_dir: str, validate_only: bool): - sys.path.append(metadata_dir) - init_file = os.path.join(metadata_dir, "__init__.py") - - spec = importlib.util.spec_from_file_location("metadata", init_file) - module = importlib.util.module_from_spec(spec) - spec.loader.exec_module(module) - - metadata = module.metadata + metadata = load_metadata(metadata_dir) metadata_validation.validate_metadata(metadata) if validate_only: return @@ -93,6 +56,16 @@ def generate_all(metadata_dir: str, gen_dir: str, validate_only: bool): generate_service_file(metadata, "service.h.mako", "_service.h", gen_dir) generate_service_file(metadata, "service.cpp.mako", "_service.cpp", gen_dir) + generate_service_file( + metadata, + "service_registrar.h.mako", + "_service_registrar.h", + gen_dir) + generate_service_file( + metadata, + "service_registrar.cpp.mako", + "_service_registrar.cpp", + gen_dir) generate_service_file(metadata, "library_interface.h.mako", "_library_interface.h", gen_dir) generate_service_file(metadata, "library.cpp.mako", diff --git a/source/codegen/generate_shared_service_files.py b/source/codegen/generate_shared_service_files.py new file mode 100644 index 000000000..dd8cc77f5 --- /dev/null +++ b/source/codegen/generate_shared_service_files.py @@ -0,0 +1,38 @@ +from argparse import ArgumentParser +from pathlib import Path + +from template_helpers import instantiate_mako_template, write_if_changed, load_metadata + +def generate_register_all_services(metadata_dir: Path, output_dir: Path) -> None: + driver_modules = [ + load_metadata(p) + for p in metadata_dir.iterdir() + if p.is_dir() and not "fake" in p.name + ] + + template = instantiate_mako_template("register_all_services.h.mako") + + write_if_changed( + output_dir / "register_all_services.h", + template.render(drivers=driver_modules) + ) + + template = instantiate_mako_template("register_all_services.cpp.mako") + + write_if_changed( + output_dir / "register_all_services.cpp", + template.render(drivers=driver_modules) + ) + + +if __name__ == "__main__": + parser = ArgumentParser( + description="Generate shared service files for grpc-device.") + parser.add_argument( + "metadata", help="The path to the root directory containing all API metadata.") + parser.add_argument( + "--output", "-o", help="The path to the top-level directory to save the generated files..") + + args = parser.parse_args() + output_path = "." if args.output is None else args.output + generate_register_all_services(Path(args.metadata), Path(output_path)) diff --git a/source/codegen/metadata/nidaqmx/__init__.py b/source/codegen/metadata/nidaqmx/__init__.py index 463dfc53a..9f9d122c0 100644 --- a/source/codegen/metadata/nidaqmx/__init__.py +++ b/source/codegen/metadata/nidaqmx/__init__.py @@ -1,8 +1,8 @@ -from functions import functions -from functions_addon import functions_validation_suppressions -from attributes import attributes -from enums import enums -from config import config +from .functions import functions +from .functions_addon import functions_validation_suppressions +from .attributes import attributes +from .enums import enums +from .config import config metadata = { "functions" : functions, diff --git a/source/codegen/metadata/nidcpower/__init__.py b/source/codegen/metadata/nidcpower/__init__.py index 079afe063..479c7c96a 100644 --- a/source/codegen/metadata/nidcpower/__init__.py +++ b/source/codegen/metadata/nidcpower/__init__.py @@ -1,7 +1,7 @@ -from functions import functions -from attributes import attributes -from enums import enums -from config import config +from .functions import functions +from .attributes import attributes +from .enums import enums +from .config import config metadata = { "functions" : functions, diff --git a/source/codegen/metadata/nidigitalpattern/__init__.py b/source/codegen/metadata/nidigitalpattern/__init__.py index a493ce803..5ce3d4082 100644 --- a/source/codegen/metadata/nidigitalpattern/__init__.py +++ b/source/codegen/metadata/nidigitalpattern/__init__.py @@ -1,8 +1,8 @@ -from functions import functions -from functions_addon import functions_validation_suppressions -from attributes import attributes -from enums import enums -from config import config +from .functions import functions +from .functions_addon import functions_validation_suppressions +from .attributes import attributes +from .enums import enums +from .config import config metadata = { "functions" : functions, diff --git a/source/codegen/metadata/nidmm/__init__.py b/source/codegen/metadata/nidmm/__init__.py index 079afe063..479c7c96a 100644 --- a/source/codegen/metadata/nidmm/__init__.py +++ b/source/codegen/metadata/nidmm/__init__.py @@ -1,7 +1,7 @@ -from functions import functions -from attributes import attributes -from enums import enums -from config import config +from .functions import functions +from .attributes import attributes +from .enums import enums +from .config import config metadata = { "functions" : functions, diff --git a/source/codegen/metadata/nifake/__init__.py b/source/codegen/metadata/nifake/__init__.py index a493ce803..5ce3d4082 100644 --- a/source/codegen/metadata/nifake/__init__.py +++ b/source/codegen/metadata/nifake/__init__.py @@ -1,8 +1,8 @@ -from functions import functions -from functions_addon import functions_validation_suppressions -from attributes import attributes -from enums import enums -from config import config +from .functions import functions +from .functions_addon import functions_validation_suppressions +from .attributes import attributes +from .enums import enums +from .config import config metadata = { "functions" : functions, diff --git a/source/codegen/metadata/nifake_extension/__init__.py b/source/codegen/metadata/nifake_extension/__init__.py index 079afe063..479c7c96a 100644 --- a/source/codegen/metadata/nifake_extension/__init__.py +++ b/source/codegen/metadata/nifake_extension/__init__.py @@ -1,7 +1,7 @@ -from functions import functions -from attributes import attributes -from enums import enums -from config import config +from .functions import functions +from .attributes import attributes +from .enums import enums +from .config import config metadata = { "functions" : functions, diff --git a/source/codegen/metadata/nifake_non_ivi/__init__.py b/source/codegen/metadata/nifake_non_ivi/__init__.py index 463dfc53a..9f9d122c0 100644 --- a/source/codegen/metadata/nifake_non_ivi/__init__.py +++ b/source/codegen/metadata/nifake_non_ivi/__init__.py @@ -1,8 +1,8 @@ -from functions import functions -from functions_addon import functions_validation_suppressions -from attributes import attributes -from enums import enums -from config import config +from .functions import functions +from .functions_addon import functions_validation_suppressions +from .attributes import attributes +from .enums import enums +from .config import config metadata = { "functions" : functions, diff --git a/source/codegen/metadata/nifgen/__init__.py b/source/codegen/metadata/nifgen/__init__.py index cf1b999e2..3cafc0c89 100644 --- a/source/codegen/metadata/nifgen/__init__.py +++ b/source/codegen/metadata/nifgen/__init__.py @@ -1,8 +1,8 @@ -from functions import functions -from attributes import attributes -from enums import enums -from enums_addon import enums_validation_suppressions -from config import config +from .functions import functions +from .attributes import attributes +from .enums import enums +from .enums_addon import enums_validation_suppressions +from .config import config metadata = { "functions" : functions, diff --git a/source/codegen/metadata/nirfsa/__init__.py b/source/codegen/metadata/nirfsa/__init__.py index e970a88ed..d9cdfd5f6 100644 --- a/source/codegen/metadata/nirfsa/__init__.py +++ b/source/codegen/metadata/nirfsa/__init__.py @@ -1,8 +1,8 @@ -from functions import functions -from attributes import attributes -from enums import enums -from enums_addon import enums_validation_suppressions -from config import config +from .functions import functions +from .attributes import attributes +from .enums import enums +from .enums_addon import enums_validation_suppressions +from .config import config metadata = { "functions" : functions, diff --git a/source/codegen/metadata/nirfsg/__init__.py b/source/codegen/metadata/nirfsg/__init__.py index b6a503e72..e816712e6 100644 --- a/source/codegen/metadata/nirfsg/__init__.py +++ b/source/codegen/metadata/nirfsg/__init__.py @@ -1,7 +1,7 @@ -from functions import functions -from attributes import attributes -from enums import enums -from config import config +from .functions import functions +from .attributes import attributes +from .enums import enums +from .config import config metadata = { "functions" : functions, diff --git a/source/codegen/metadata/niscope/__init__.py b/source/codegen/metadata/niscope/__init__.py index 079afe063..479c7c96a 100644 --- a/source/codegen/metadata/niscope/__init__.py +++ b/source/codegen/metadata/niscope/__init__.py @@ -1,7 +1,7 @@ -from functions import functions -from attributes import attributes -from enums import enums -from config import config +from .functions import functions +from .attributes import attributes +from .enums import enums +from .config import config metadata = { "functions" : functions, diff --git a/source/codegen/metadata/niswitch/__init__.py b/source/codegen/metadata/niswitch/__init__.py index 079afe063..479c7c96a 100644 --- a/source/codegen/metadata/niswitch/__init__.py +++ b/source/codegen/metadata/niswitch/__init__.py @@ -1,7 +1,7 @@ -from functions import functions -from attributes import attributes -from enums import enums -from config import config +from .functions import functions +from .attributes import attributes +from .enums import enums +from .config import config metadata = { "functions" : functions, diff --git a/source/codegen/metadata/nisync/__init__.py b/source/codegen/metadata/nisync/__init__.py index 079afe063..479c7c96a 100644 --- a/source/codegen/metadata/nisync/__init__.py +++ b/source/codegen/metadata/nisync/__init__.py @@ -1,7 +1,7 @@ -from functions import functions -from attributes import attributes -from enums import enums -from config import config +from .functions import functions +from .attributes import attributes +from .enums import enums +from .config import config metadata = { "functions" : functions, diff --git a/source/codegen/metadata/nitclk/__init__.py b/source/codegen/metadata/nitclk/__init__.py index 079afe063..479c7c96a 100644 --- a/source/codegen/metadata/nitclk/__init__.py +++ b/source/codegen/metadata/nitclk/__init__.py @@ -1,7 +1,7 @@ -from functions import functions -from attributes import attributes -from enums import enums -from config import config +from .functions import functions +from .attributes import attributes +from .enums import enums +from .config import config metadata = { "functions" : functions, diff --git a/source/codegen/service_helpers.py b/source/codegen/service_helpers.py index ea439bc3e..43b64c348 100644 --- a/source/codegen/service_helpers.py +++ b/source/codegen/service_helpers.py @@ -361,3 +361,13 @@ def get_bitfield_value_to_name_mapping(parameter: dict, enums: dict) -> Dict[int for v in enum["values"] if v["value"] != 0 # zero values can't be flags! } + + +def get_resource_handle_type(config: dict) -> str: + return config.get("resource_handle_type", "ViSession") + + +def get_shared_resource_repository_ptr_type(config: dict) -> str: + resource_handle_type = get_resource_handle_type(config) + resource_repository_type = f"nidevice_grpc::SessionResourceRepository<{resource_handle_type}>" + return f"std::shared_ptr<{resource_repository_type}>" diff --git a/source/codegen/template_helpers.py b/source/codegen/template_helpers.py new file mode 100644 index 000000000..8659ada7c --- /dev/null +++ b/source/codegen/template_helpers.py @@ -0,0 +1,41 @@ +from importlib import import_module +from pathlib import Path + +from mako.lookup import TemplateLookup +from mako.template import Template, Template + + +def instantiate_mako_template(template_file_name: str) -> Template: + current_dir = Path(__file__).parent + template_directory = current_dir / "templates" + template_file_path = template_directory / template_file_name + template_lookup = TemplateLookup(directories = str(template_directory)) + return Template(filename=str(template_file_path), lookup=template_lookup) + + +def write_if_changed(output_file_path: str, new_contents: str) -> None: + """Write new_contents to output_file_path if new_contents != the contents + of output_file_path. + + This prevents downstream recompiles when codegen runs but does not change + a given file. + """ + old_contents = _read_file_contents(output_file_path) + if old_contents != new_contents: + with open(output_file_path, "w+", newline="") as f: + f.write(new_contents) + + +def load_metadata(metadata_dir: str) -> dict: + metadata_path = Path(metadata_dir) + module = import_module("metadata." + metadata_path.name) + + return module.metadata + + +def _read_file_contents(output_file_path: str) -> str: + try: + with open(output_file_path, "r", newline="") as f: + return f.read() + except FileNotFoundError: + return "" diff --git a/source/codegen/templates/register_all_services.cpp.mako b/source/codegen/templates/register_all_services.cpp.mako new file mode 100644 index 000000000..efefa2d33 --- /dev/null +++ b/source/codegen/templates/register_all_services.cpp.mako @@ -0,0 +1,65 @@ +<% +import common_helpers +import service_helpers + +namespace = "nidevice_grpc" +driver_configs = [data["config"] for data in drivers] +module_names = [config["module_name"] for config in driver_configs] +handle_types = [service_helpers.get_resource_handle_type(config) for config in driver_configs] +repository_type_to_local_name = { + t: f"{common_helpers.pascal_to_snake(t)}_repository" + for t in handle_types +} +%>\ +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Register all services implementation. +//--------------------------------------------------------------------- +#include "register_all_services.h" + +#include +#include + +#include +#include + +% for module_name in module_names: +#include "${module_name}/${module_name}_service_registrar.h" +% endfor + +namespace ${namespace} { + +std::shared_ptr register_all_services( + grpc::ServerBuilder& server_builder, + const nidevice_grpc::FeatureToggles& feature_toggles) +{ + auto service_vector = std::make_shared>>(); + + auto session_repository = std::make_shared(); + auto core_service = nidevice_grpc::register_core_service(server_builder, session_repository); + service_vector->insert( + service_vector->end(), + {session_repository, core_service}); + +% for type_name, local_name in repository_type_to_local_name.items(): + auto ${local_name} = std::make_shared>(session_repository.get()); +% endfor + +% for config in driver_configs: +<% + namespace = f"{config['namespace_component']}_grpc" + resource_handle_type = service_helpers.get_resource_handle_type(config) + resource_repository_local_name = repository_type_to_local_name[resource_handle_type] +%>\ + service_vector->push_back( + ${namespace}::register_service( + server_builder, + ${resource_repository_local_name}, + feature_toggles)); +% endfor + + return service_vector; +} + +} // ${namespace} diff --git a/source/codegen/templates/register_all_services.h.mako b/source/codegen/templates/register_all_services.h.mako new file mode 100644 index 000000000..a2ec58157 --- /dev/null +++ b/source/codegen/templates/register_all_services.h.mako @@ -0,0 +1,28 @@ +<% +include_guard_name = "NIDEVICE_GRPC_REGISTER_ALL_SERVICES_H" +namespace = "nidevice_grpc" +%>\ +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Register all services header. +//--------------------------------------------------------------------- +#ifndef ${include_guard_name} +#define ${include_guard_name} +#include + +#include + +namespace grpc { +class ServerBuilder; +} + +namespace ${namespace} { + +std::shared_ptr register_all_services( + grpc::ServerBuilder& server_builder, + const nidevice_grpc::FeatureToggles& feature_toggles); + +} // ${namespace} + +#endif // ${include_guard_name} diff --git a/source/codegen/templates/service.cpp.mako b/source/codegen/templates/service.cpp.mako index 715d7d013..b5bef2b47 100644 --- a/source/codegen/templates/service.cpp.mako +++ b/source/codegen/templates/service.cpp.mako @@ -59,7 +59,7 @@ namespace ${config["namespace_component"]}_grpc { ${service_class_prefix}Service::${service_class_prefix}Service( ${service_class_prefix}LibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles) + const ${service_class_prefix}FeatureToggles& feature_toggles) : library_(library), session_repository_(session_repository), feature_toggles_(feature_toggles) { } @@ -130,15 +130,11 @@ ${mako_helper.define_simple_method_body(function_name=function_name, function_da % endif % endfor - bool ${service_class_prefix}Service::is_enabled() - { - return feature_toggles_.is_enabled; - } <% feature_toggles = service_helpers.get_feature_toggles(config) %>\ - ${service_class_prefix}Service::${service_class_prefix}FeatureToggles::${service_class_prefix}FeatureToggles( + ${service_class_prefix}FeatureToggles::${service_class_prefix}FeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) <%block filter="common_helpers.trim_trailing_comma()">\ : is_enabled( diff --git a/source/codegen/templates/service.h.mako b/source/codegen/templates/service.h.mako index 4663caba5..4f91f4260 100644 --- a/source/codegen/templates/service.h.mako +++ b/source/codegen/templates/service.h.mako @@ -14,9 +14,7 @@ include_guard_name = service_helpers.get_include_guard_name(config, "_SERVICE_H" namespace_prefix = config["namespace_component"] + "_grpc::" custom_types = common_helpers.get_custom_types(config) (input_custom_types, output_custom_types) = common_helpers.get_input_and_output_custom_types(functions) -resource_handle_type = config.get("resource_handle_type", "ViSession") -resource_repository_type = f"nidevice_grpc::SessionResourceRepository<{resource_handle_type}>" -resource_repository_ptr = f"std::shared_ptr<{resource_repository_type}>" +resource_repository_ptr = service_helpers.get_shared_resource_repository_ptr_type(config) async_functions = service_helpers.get_async_functions(functions) has_async_functions = any(async_functions) @@ -49,6 +47,17 @@ for async_function in async_functions.keys(): namespace ${config["namespace_component"]}_grpc { +struct ${service_class_prefix}FeatureToggles +{ + using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + ${service_class_prefix}FeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles = {}); + + bool is_enabled; +% for toggle in service_helpers.get_feature_toggles(config): + bool ${service_helpers.get_toggle_member_name(toggle)}; +% endfor +}; + class ${service_class_prefix}Service final : public ${base_class_name} { public: using ResourceRepositorySharedPtr = ${resource_repository_ptr}; @@ -56,7 +65,7 @@ public: ${service_class_prefix}Service( ${service_class_prefix}LibraryInterface* library, ResourceRepositorySharedPtr session_repository, - const nidevice_grpc::FeatureToggles& feature_toggles = {}); + const ${service_class_prefix}FeatureToggles& feature_toggles = {}); virtual ~${service_class_prefix}Service(); % for function in common_helpers.filter_proto_rpc_functions(functions): @@ -72,8 +81,6 @@ public: ::grpc::Status ${method_name}(::grpc::ServerContext* context, const ${request_type}* request, ${response_type}* response) override; % endif % endfor - - bool is_enabled(); private: ${driver_library_interface}* library_; ResourceRepositorySharedPtr session_repository_; @@ -92,17 +99,6 @@ private: std::map<${enum_value}, std::int32_t> ${enum.lower()}_output_map_ { ${service_helpers.get_output_lookup_values(enums[enum])} }; % endfor - struct ${service_class_prefix}FeatureToggles - { - using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; - ${service_class_prefix}FeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles); - - bool is_enabled; -% for toggle in service_helpers.get_feature_toggles(config): - bool ${service_helpers.get_toggle_member_name(toggle)}; -% endfor - }; - ${service_class_prefix}FeatureToggles feature_toggles_; }; diff --git a/source/codegen/templates/service_registrar.cpp.mako b/source/codegen/templates/service_registrar.cpp.mako new file mode 100644 index 000000000..38dc429d4 --- /dev/null +++ b/source/codegen/templates/service_registrar.cpp.mako @@ -0,0 +1,63 @@ +<% +import common_helpers +import service_helpers + +config = data["config"] + +namespace = f"{config['namespace_component']}_grpc" +module_name = config["module_name"] +resource_repository_type = service_helpers.get_shared_resource_repository_ptr_type(config) +service_class_prefix = config["service_class_prefix"] +%>\ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar implementation for the ${config["driver_name"]} Metadata +//--------------------------------------------------------------------- +#include "${module_name}_library.h" + +#include + +#include "${module_name}_service.h" +#include "${module_name}_service_registrar.h" + +namespace ${namespace} { + +namespace { +struct LibraryAndService { + LibraryAndService( + const ${resource_repository_type}& resource_repository, + const ${service_class_prefix}FeatureToggles& feature_toggles) + : library(), + service( + &library, + resource_repository, + feature_toggles) { + } + ${service_class_prefix}Library library; + ${service_class_prefix}Service service; +}; +} + +std::shared_ptr register_service( + grpc::ServerBuilder& builder, + const ${resource_repository_type}& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles) +{ + auto toggles = ${service_class_prefix}FeatureToggles(feature_toggles); + + if (toggles.is_enabled) + { + auto library_and_service_ptr = std::make_shared( + resource_repository, + toggles); + auto& service = library_and_service_ptr->service; + builder.RegisterService(&service); + return library_and_service_ptr; + } + + return {}; +} + +} // ${namespace} diff --git a/source/codegen/templates/service_registrar.h.mako b/source/codegen/templates/service_registrar.h.mako new file mode 100644 index 000000000..14ec075c5 --- /dev/null +++ b/source/codegen/templates/service_registrar.h.mako @@ -0,0 +1,41 @@ +<% +import common_helpers +import service_helpers + +config = data["config"] + +include_guard_name = service_helpers.get_include_guard_name(config, "_SERVICE_REGISTRAR_H") +namespace = f"{config['namespace_component']}_grpc" +resource_handle_type = service_helpers.get_resource_handle_type(config) +resource_repository_type = service_helpers.get_shared_resource_repository_ptr_type(config) +%>\ + +//--------------------------------------------------------------------- +// This file is automatically generated. All manual edits will be lost. +//--------------------------------------------------------------------- +// Service registrar header for the ${config["driver_name"]} Metadata +//--------------------------------------------------------------------- +#ifndef ${include_guard_name} +#define ${include_guard_name} +#include +#include + +#include + +#include <${config["c_header"]}> // for ${resource_handle_type} + +namespace grpc { +class ServerBuilder; +} + +namespace ${namespace} { +using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + +std::shared_ptr register_service( + grpc::ServerBuilder& server_builder, + const ${resource_repository_type}& resource_repository, + const nidevice_grpc::FeatureToggles& feature_toggles); + +} // ${namespace} + +#endif // ${include_guard_name} diff --git a/source/server/core_server.cpp b/source/server/core_server.cpp index 6e778f7b5..1fe336fe2 100644 --- a/source/server/core_server.cpp +++ b/source/server/core_server.cpp @@ -1,25 +1,6 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include #include @@ -27,8 +8,6 @@ #include "logging.h" #include "server_configuration_parser.h" #include "server_security_configuration.h" -#include "session_utilities_service.h" -#include "syscfg_library.h" #if defined(__GNUC__) #include "linux/daemonize.h" @@ -91,69 +70,8 @@ static void RunServer(const ServerConfiguration& config) int listeningPort = 0; nidevice_grpc::ServerSecurityConfiguration server_security_config(config.server_cert, config.server_key, config.root_cert); builder.AddListeningPort(config.server_address, server_security_config.get_credentials(), &listeningPort); - // Register services available on the server. - nidevice_grpc::SessionRepository session_repository; - nidevice_grpc::SysCfgLibrary syscfg_library; - nidevice_grpc::DeviceEnumerator device_enumerator(&syscfg_library); - nidevice_grpc::SessionUtilitiesService core_service(&session_repository, &device_enumerator); - builder.RegisterService(&core_service); - using MIResourceRepository = nidevice_grpc::SessionResourceRepository; - auto mi_shared_resource_repository = std::make_shared(&session_repository); - - nidigitalpattern_grpc::NiDigitalLibrary nidigital_library; - nidigitalpattern_grpc::NiDigitalService nidigital_service(&nidigital_library, mi_shared_resource_repository); - builder.RegisterService(&nidigital_service); - - niscope_grpc::NiScopeLibrary niscope_library; - niscope_grpc::NiScopeService niscope_service(&niscope_library, mi_shared_resource_repository); - builder.RegisterService(&niscope_service); - - niswitch_grpc::NiSwitchLibrary niswitch_library; - niswitch_grpc::NiSwitchService niswitch_service(&niswitch_library, mi_shared_resource_repository); - builder.RegisterService(&niswitch_service); - - nidmm_grpc::NiDmmLibrary nidmm_library; - nidmm_grpc::NiDmmService nidmm_service(&nidmm_library, mi_shared_resource_repository); - builder.RegisterService(&nidmm_service); - - nisync_grpc::NiSyncLibrary nisync_library; - nisync_grpc::NiSyncService nisync_service(&nisync_library, mi_shared_resource_repository); - builder.RegisterService(&nisync_service); - - nitclk_grpc::NiTClkLibrary nitclk_library; - nitclk_grpc::NiTClkService nitclk_service(&nitclk_library, mi_shared_resource_repository); - builder.RegisterService(&nitclk_service); - - nidcpower_grpc::NiDCPowerLibrary nidcpower_library; - nidcpower_grpc::NiDCPowerService nidcpower_service(&nidcpower_library, mi_shared_resource_repository); - builder.RegisterService(&nidcpower_service); - - nirfsg_grpc::NiRFSGLibrary nirfsg_library; - nirfsg_grpc::NiRFSGService nirfsg_service(&nirfsg_library, mi_shared_resource_repository, config.feature_toggles); - if (nirfsg_service.is_enabled()) { - builder.RegisterService(&nirfsg_service); - } - - nifgen_grpc::NiFgenLibrary nifgen_library; - nifgen_grpc::NiFgenService nifgen_service(&nifgen_library, mi_shared_resource_repository); - builder.RegisterService(&nifgen_service); - - nidaqmx_grpc::NiDAQmxLibrary nidaqmx_library; - using DAQmxResourceRepository = nidevice_grpc::SessionResourceRepository; - auto daq_resource_repository = std::make_shared(&session_repository); - nidaqmx_grpc::NiDAQmxService nidaqmx_service(&nidaqmx_library, daq_resource_repository, config.feature_toggles); - - if (nidaqmx_service.is_enabled()) { - builder.RegisterService(&nidaqmx_service); - } - - nirfsa_grpc::NiRFSALibrary nirfsa_library; - nirfsa_grpc::NiRFSAService nirfsa_service(&nirfsa_library, mi_shared_resource_repository, config.feature_toggles); - - if (nirfsa_service.is_enabled()) { - builder.RegisterService(&nirfsa_service); - } + auto services = nidevice_grpc::register_all_services(builder, config.feature_toggles); builder.SetMaxSendMessageSize(config.max_message_size); builder.SetMaxReceiveMessageSize(config.max_message_size); @@ -194,9 +112,6 @@ static void RunServer(const ServerConfiguration& config) "Security is configured with %s%s.", security_description, tls_description); // This call will block until another thread shuts down the server. server->Wait(); - // This code is currently unreachable, but if the call to wait exits, we need to clean up the service here. - session_repository.reset_server(); - device_enumerator.clear_syscfg_session(); } struct Options { diff --git a/source/server/core_service_registrar.cpp b/source/server/core_service_registrar.cpp new file mode 100644 index 000000000..b5e7a7e24 --- /dev/null +++ b/source/server/core_service_registrar.cpp @@ -0,0 +1,37 @@ +#include "core_service_registrar.h" + +#include "device_enumerator.h" +#include "session_utilities_service.h" +#include "syscfg_library.h" + +namespace nidevice_grpc { +namespace { +struct CoreLibraryAndService { + CoreLibraryAndService(const std::shared_ptr& session_repository) + : session_repository(session_repository), + library(), + device_enumerator(&library), + service(session_repository.get(), &device_enumerator) {} + ~CoreLibraryAndService() + { + // This code is currently unreachable, but if the call to wait exits, we need to clean up the service here. + session_repository->reset_server(); + device_enumerator.clear_syscfg_session(); + } + std::shared_ptr session_repository; + SysCfgLibrary library; + DeviceEnumerator device_enumerator; + SessionUtilitiesService service; +}; +} // namespace + +std::shared_ptr register_core_service( + grpc::ServerBuilder& server_builder, + const std::shared_ptr& session_repository) +{ + auto library_and_service = std::make_shared(session_repository); + auto& service_ref = library_and_service->service; + server_builder.RegisterService(&service_ref); + return library_and_service; +} +} // namespace nidevice_grpc diff --git a/source/server/core_service_registrar.h b/source/server/core_service_registrar.h new file mode 100644 index 000000000..54f911c4a --- /dev/null +++ b/source/server/core_service_registrar.h @@ -0,0 +1,16 @@ +#ifndef NIDEVICE_GRPC_DEVICE_CORE_SERVICE_REGISTRAR_H +#define NIDEVICE_GRPC_DEVICE_CORE_SERVICE_REGISTRAR_H + +#include + +#include "session_repository.h" +namespace grpc { +class ServerBuilder; +} + +namespace nidevice_grpc { +std::shared_ptr register_core_service( + grpc::ServerBuilder& server_builder, + const std::shared_ptr& session_repository); +} +#endif // NIDEVICE_GRPC_DEVICE_CORE_SERVICE_REGISTRAR_H diff --git a/source/server/feature_toggles.cpp b/source/server/feature_toggles.cpp index a66c20d57..616aba7dd 100644 --- a/source/server/feature_toggles.cpp +++ b/source/server/feature_toggles.cpp @@ -17,11 +17,9 @@ bool FeatureToggles::is_feature_enabled( FeatureToggles::CodeReadiness feature_readiness) const { auto toggle_state = get_feature_state(feature_name); - switch (feature_readiness) { - case CodeReadiness::kRelease: - return toggle_state != FeatureState::kDisabled; - default: - return toggle_state == FeatureState::kEnabled; + if (feature_readiness >= app_readiness_) { + return toggle_state != FeatureState::kDisabled; } + return toggle_state == FeatureState::kEnabled; } } // namespace nidevice_grpc diff --git a/source/server/feature_toggles.h b/source/server/feature_toggles.h index ab536acd4..4683d87a1 100644 --- a/source/server/feature_toggles.h +++ b/source/server/feature_toggles.h @@ -14,19 +14,24 @@ class FeatureToggles { kUnspecified }; enum class CodeReadiness { - kRelease, - kNextRelease, - kIncomplete, - kPrototype + kPrototype = 0, + kIncomplete = 1, + kNextRelease = 2, + kRelease = 3, }; FeatureToggles() {} - FeatureToggles(FeatureToggleConfigurationMap&& map) : map_(map) {} + FeatureToggles(FeatureToggleConfigurationMap&& map, CodeReadiness app_readiness = CodeReadiness::kRelease) + : map_(map), + app_readiness_(app_readiness) {} FeatureState get_feature_state(const std::string& feature_name) const; - bool is_feature_enabled(const std::string& feature_name, CodeReadiness feature_readiness) const; + bool is_feature_enabled( + const std::string& feature_name, + CodeReadiness feature_readiness) const; private: FeatureToggleConfigurationMap map_; + CodeReadiness app_readiness_ = CodeReadiness::kRelease; }; } // namespace nidevice_grpc diff --git a/source/server/server_configuration_parser.cpp b/source/server/server_configuration_parser.cpp index 9a04873a6..46df11536 100644 --- a/source/server/server_configuration_parser.cpp +++ b/source/server/server_configuration_parser.cpp @@ -161,7 +161,7 @@ FeatureToggles ServerConfigurationParser::parse_feature_toggles() const throw InvalidFeatureToggleException(ex.what()); } } - return FeatureToggles(std::move(map)); + return FeatureToggles(std::move(map), FeatureToggles::CodeReadiness::kRelease); } std::string ServerConfigurationParser::parse_key_from_security_section(const char* key) const diff --git a/source/server/session_repository.cpp b/source/server/session_repository.cpp index f65f7d276..ec149ca0f 100644 --- a/source/server/session_repository.cpp +++ b/source/server/session_repository.cpp @@ -1,5 +1,7 @@ #include "session_repository.h" +#include + namespace nidevice_grpc { SessionRepository::SessionRepository() diff --git a/source/server/session_repository.h b/source/server/session_repository.h index 0a2ec1ae9..b5ef6c865 100644 --- a/source/server/session_repository.h +++ b/source/server/session_repository.h @@ -1,14 +1,18 @@ #ifndef NIDEVICE_GRPC_SESSION_REPOSITORY #define NIDEVICE_GRPC_SESSION_REPOSITORY -#include -#include - #include +#include +#include #include #include "semaphore.h" +namespace grpc { +class ServerContext; +class Status; +} // namespace grpc + namespace nidevice_grpc { class SessionRepository { diff --git a/source/tests/system/device_server.cpp b/source/tests/system/device_server.cpp index 2303f10ff..bca668967 100644 --- a/source/tests/system/device_server.cpp +++ b/source/tests/system/device_server.cpp @@ -1,33 +1,16 @@ #include "device_server.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include namespace ni { namespace tests { namespace system { +using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + DeviceServerInterface::~DeviceServerInterface() {} class DeviceServer : public DeviceServerInterface { @@ -40,90 +23,36 @@ class DeviceServer : public DeviceServerInterface { std::shared_ptr<::grpc::Channel> InProcessChannel() override; private: - using MIResourceRepository = nidevice_grpc::SessionResourceRepository; - using DAQmxResourceRepository = nidevice_grpc::SessionResourceRepository; - nidevice_grpc::SessionRepository session_repository_; - std::shared_ptr mi_shared_resource_repository_; - nidevice_grpc::SysCfgLibrary syscfg_library_; - nidevice_grpc::DeviceEnumerator device_enumerator_; - nidevice_grpc::SessionUtilitiesService core_service_; - niscope_grpc::NiScopeLibrary niscope_library_; - niscope_grpc::NiScopeService niscope_service_; - niswitch_grpc::NiSwitchLibrary niswitch_library_; - niswitch_grpc::NiSwitchService niswitch_service_; - nisync_grpc::NiSyncLibrary nisync_library_; - nisync_grpc::NiSyncService nisync_service_; - nidcpower_grpc::NiDCPowerLibrary nidcpower_library_; - nidcpower_grpc::NiDCPowerService nidcpower_service_; - nidigitalpattern_grpc::NiDigitalLibrary nidigital_library_; - nidigitalpattern_grpc::NiDigitalService nidigital_service_; - nifgen_grpc::NiFgenLibrary nifgen_library_; - nifgen_grpc::NiFgenService nifgen_service_; - nirfsg_grpc::NiRFSGLibrary nirfsg_library_; - nirfsg_grpc::NiRFSGService nirfsg_service_; - nitclk_grpc::NiTClkLibrary nitclk_library_; - nitclk_grpc::NiTClkService nitclk_service_; - nidaqmx_grpc::NiDAQmxLibrary nidaqmx_library_; - nidaqmx_grpc::NiDAQmxService nidaqmx_service_; - nirfsa_grpc::NiRFSALibrary nirfsa_library_; - nirfsa_grpc::NiRFSAService nirfsa_service_; - + grpc::ServerBuilder builder_; + std::shared_ptr services_; std::unique_ptr<::grpc::Server> server_; std::shared_ptr<::grpc::Channel> channel_; + std::unique_ptr session_stub_; }; DeviceServer::DeviceServer() - : session_repository_(), - mi_shared_resource_repository_(std::make_shared(&session_repository_)), - syscfg_library_(), - device_enumerator_(&syscfg_library_), - core_service_(&session_repository_, &device_enumerator_), - niscope_library_(), - niscope_service_(&niscope_library_, mi_shared_resource_repository_), - niswitch_library_(), - niswitch_service_(&niswitch_library_, mi_shared_resource_repository_), - nisync_library_(), - nisync_service_(&nisync_library_, mi_shared_resource_repository_), - nidcpower_library_(), - nidcpower_service_(&nidcpower_library_, mi_shared_resource_repository_), - nidigital_library_(), - nidigital_service_(&nidigital_library_, mi_shared_resource_repository_), - nifgen_library_(), - nifgen_service_(&nifgen_library_, mi_shared_resource_repository_), - nirfsg_library_(), - nirfsg_service_(&nirfsg_library_, mi_shared_resource_repository_), - nitclk_library_(), - nitclk_service_(&nitclk_library_, mi_shared_resource_repository_), - nidaqmx_library_(), - nidaqmx_service_(&nidaqmx_library_, std::make_shared(&session_repository_)), - nirfsa_library_(), - nirfsa_service_(&nirfsa_library_, mi_shared_resource_repository_) + : builder_(), + services_( + nidevice_grpc::register_all_services( + builder_, + // Tests run with NextRelease CodeReadiness. + nidevice_grpc::FeatureToggles({}, CodeReadiness::kNextRelease))), + server_(builder_.BuildAndStart()), + channel_(server_->InProcessChannel(::grpc::ChannelArguments())), + session_stub_(nidevice_grpc::SessionUtilities::NewStub(channel_)) { - grpc::ServerBuilder builder; - builder.RegisterService(&core_service_); - builder.RegisterService(&niscope_service_); - builder.RegisterService(&niswitch_service_); - builder.RegisterService(&nisync_service_); - builder.RegisterService(&nidcpower_service_); - builder.RegisterService(&nidigital_service_); - builder.RegisterService(&nifgen_service_); - builder.RegisterService(&nirfsg_service_); - builder.RegisterService(&nitclk_service_); - builder.RegisterService(&nidaqmx_service_); - builder.RegisterService(&nirfsa_service_); - server_ = builder.BuildAndStart(); } void DeviceServer::ResetServer() { - session_repository_.reset_server(); + grpc::ClientContext context; + auto request = nidevice_grpc::ResetServerRequest{}; + auto response = nidevice_grpc::ResetServerResponse{}; + session_stub_->ResetServer(&context, request, &response); } std::shared_ptr<::grpc::Channel> DeviceServer::InProcessChannel() { - if (!channel_) { - channel_ = server_->InProcessChannel(::grpc::ChannelArguments()); - } return channel_; } diff --git a/source/tests/system/nidaqmx_driver_api_tests.cpp b/source/tests/system/nidaqmx_driver_api_tests.cpp index 3bf3f778d..cf73e82cc 100644 --- a/source/tests/system/nidaqmx_driver_api_tests.cpp +++ b/source/tests/system/nidaqmx_driver_api_tests.cpp @@ -1,3 +1,4 @@ +#include #include #include #include // For EXPECT matchers. @@ -6,11 +7,11 @@ #include #include #include +#include #include "device_server.h" #include "enumerate_devices.h" #include "nidaqmx/nidaqmx_client.h" -#include "nidaqmx/nidaqmx_service.h" using namespace ::testing; using namespace nidaqmx_grpc; diff --git a/source/tests/unit/ni_fake_non_ivi_service_tests.cpp b/source/tests/unit/ni_fake_non_ivi_service_tests.cpp index d80f0acb6..8b7515ee0 100644 --- a/source/tests/unit/ni_fake_non_ivi_service_tests.cpp +++ b/source/tests/unit/ni_fake_non_ivi_service_tests.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -170,7 +171,10 @@ class NiFakeNonIviServiceTests : public ::testing::Test { : session_repository_(), resource_repository_(std::make_shared(&session_repository_)), library_(), - service_(&library_, resource_repository_, feature_toggles) + service_( + &library_, + resource_repository_, + feature_toggles) { } @@ -1154,22 +1158,20 @@ TEST_F(NiFakeNonIviServiceTests, SetColors_PassesColorsArrayToLibrary) EXPECT_EQ(kDriverSuccess, response.status()); } -struct NiFakeNonIviServiceEnabledToggleTests : public NiFakeNonIviServiceTests { - NiFakeNonIviServiceEnabledToggleTests() - : NiFakeNonIviServiceTests( - nidevice_grpc::FeatureToggles({{"nifake_non_ivi", true}})) - { - } -}; - -TEST_F(NiFakeNonIviServiceEnabledToggleTests, UnreleasedServiceWithToggleEnabled_IsEnabled_ReturnsTrue) +TEST_F(NiFakeNonIviServiceTests, UnreleasedServiceWithToggleEnabled_IsEnabled_ReturnsTrue) { - EXPECT_TRUE(service_.is_enabled()); + const auto feature_toggles = nidevice_grpc::FeatureToggles({{"nifake_non_ivi", true}}); + const auto fake_toggles = NiFakeNonIviFeatureToggles{feature_toggles}; + + EXPECT_TRUE(fake_toggles.is_enabled); } TEST_F(NiFakeNonIviServiceTests, UnreleasedServiceWithNoToggles_IsEnabled_ReturnsFalse) { - EXPECT_FALSE(service_.is_enabled()); + const auto feature_toggles = nidevice_grpc::FeatureToggles(); + const auto fake_toggles = NiFakeNonIviFeatureToggles{feature_toggles}; + + EXPECT_FALSE(fake_toggles.is_enabled); } TEST_F(NiFakeNonIviServiceTests, GetStructsWithCoercion_ReturnsInRangeData)