]>
Commit | Line | Data |
---|---|---|
1e59de90 TL |
1 | // Copyright The OpenTelemetry Authors |
2 | // SPDX-License-Identifier: Apache-2.0 | |
3 | ||
4 | #include "opentelemetry/plugin/factory.h" | |
5 | #include "opentelemetry/plugin/hook.h" | |
6 | #include "tracer.h" | |
7 | ||
8 | namespace nostd = opentelemetry::nostd; | |
9 | namespace plugin = opentelemetry::plugin; | |
10 | ||
11 | class TracerHandle final : public plugin::TracerHandle | |
12 | { | |
13 | public: | |
14 | explicit TracerHandle(std::shared_ptr<Tracer> &&tracer) noexcept : tracer_{std::move(tracer)} {} | |
15 | ||
16 | // opentelemetry::plugin::TracerHandle | |
17 | Tracer &tracer() const noexcept override { return *tracer_; } | |
18 | ||
19 | private: | |
20 | std::shared_ptr<Tracer> tracer_; | |
21 | }; | |
22 | ||
23 | class FactoryImpl final : public plugin::Factory::FactoryImpl | |
24 | { | |
25 | public: | |
26 | // opentelemetry::plugin::Factory::FactoryImpl | |
27 | nostd::unique_ptr<plugin::TracerHandle> MakeTracerHandle( | |
28 | nostd::string_view tracer_config, | |
29 | nostd::unique_ptr<char[]> &error_message) const noexcept override | |
30 | { | |
31 | std::shared_ptr<Tracer> tracer{new (std::nothrow) Tracer{""}}; | |
32 | if (tracer == nullptr) | |
33 | { | |
34 | return nullptr; | |
35 | } | |
36 | return nostd::unique_ptr<TracerHandle>{new (std::nothrow) TracerHandle{std::move(tracer)}}; | |
37 | } | |
38 | }; | |
39 | ||
40 | static nostd::unique_ptr<plugin::Factory::FactoryImpl> MakeFactoryImpl( | |
41 | const plugin::LoaderInfo &loader_info, | |
42 | nostd::unique_ptr<char[]> &error_message) noexcept | |
43 | { | |
44 | (void)loader_info; | |
45 | (void)error_message; | |
46 | return nostd::unique_ptr<plugin::Factory::FactoryImpl>{new (std::nothrow) FactoryImpl{}}; | |
47 | } | |
48 | ||
49 | OPENTELEMETRY_DEFINE_PLUGIN_HOOK(MakeFactoryImpl); |