Line data Source code
1 : /**
2 : * @file
3 : *
4 : * @brief Source for yambi plugin
5 : *
6 : * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
7 : *
8 : */
9 :
10 : #include <stdexcept>
11 :
12 : #include <kdb.hpp>
13 : #include <kdberrors.h>
14 : #include <kdbmacros.h>
15 :
16 : #include "convert.hpp"
17 : #include "yambi.hpp"
18 :
19 : using ckdb::keyNew;
20 :
21 : using CppKey = kdb::Key;
22 : using CppKeySet = kdb::KeySet;
23 :
24 : using std::exception;
25 : using std::runtime_error;
26 : using std::string;
27 :
28 : namespace
29 : {
30 :
31 : /**
32 : * @brief This function returns a key set containing the plugin contract.
33 : *
34 : * @return A key set specifying the capabilities of the plugin
35 : */
36 134 : CppKeySet getContract ()
37 : {
38 : return CppKeySet{ 30,
39 : keyNew ("system/elektra/modules/yambi", KEY_VALUE, "yambi plugin waits for your orders", KEY_END),
40 : keyNew ("system/elektra/modules/yambi/exports", KEY_END),
41 : keyNew ("system/elektra/modules/yambi/exports/get", KEY_FUNC, elektraYambiGet, KEY_END),
42 : keyNew ("system/elektra/modules/yambi/exports/set", KEY_FUNC, elektraYambiSet, KEY_END),
43 : #include ELEKTRA_README
44 : keyNew ("system/elektra/modules/yambi/infos/version", KEY_VALUE, PLUGINVERSION, KEY_END),
45 134 : KS_END };
46 : }
47 :
48 : } // end namespace
49 :
50 : extern "C" {
51 :
52 : /** @see elektraDocGet */
53 197 : int elektraYambiGet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * parentKey)
54 : {
55 394 : CppKeySet keys{ returned };
56 394 : CppKey parent{ parentKey };
57 :
58 591 : if (parent.getName () == "system/elektra/modules/yambi")
59 : {
60 402 : keys.append (getContract ());
61 134 : parent.release ();
62 134 : keys.release ();
63 134 : return ELEKTRA_PLUGIN_STATUS_SUCCESS;
64 : }
65 :
66 63 : int status = ELEKTRA_PLUGIN_STATUS_ERROR;
67 : try
68 : {
69 126 : status = addToKeySet (keys, parent, parent.getString ());
70 : }
71 0 : catch (runtime_error const & runtimeError)
72 : {
73 0 : ELEKTRA_SET_VALIDATION_SYNTACTIC_ERROR (*parent, runtimeError.what ());
74 : }
75 0 : catch (exception const & error)
76 : {
77 0 : ELEKTRA_SET_PLUGIN_MISBEHAVIOR_ERRORF (*parent, "Uncaught exception. Reason: %s", error.what ());
78 : }
79 :
80 63 : parent.release ();
81 63 : keys.release ();
82 63 : return status < 0 ? ELEKTRA_PLUGIN_STATUS_ERROR : status;
83 : }
84 :
85 : /** @see elektraDocSet */
86 2 : int elektraYambiSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned ELEKTRA_UNUSED, Key * parentKey ELEKTRA_UNUSED)
87 : {
88 2 : return ELEKTRA_PLUGIN_STATUS_NO_UPDATE;
89 : }
90 :
91 376 : Plugin * ELEKTRA_PLUGIN_EXPORT
92 : {
93 : return elektraPluginExport ("yambi", ELEKTRA_PLUGIN_GET, &elektraYambiGet, ELEKTRA_PLUGIN_SET, &elektraYambiSet,
94 376 : ELEKTRA_PLUGIN_END);
95 : }
96 :
97 : } // end extern "C"
|