marcelb 2 years ago
commit a6d188960f
  1. 21
      .vscode/settings.json
  2. 42
      lib/api.hpp
  3. 87
      src/api.cpp
  4. 1
      test/compile.sh
  5. 25
      test/test.cpp
  6. BIN
      test/test.o

@ -0,0 +1,21 @@
{
"files.associations": {
"string": "cpp",
"string_view": "cpp",
"array": "cpp",
"atomic": "cpp",
"cwchar": "cpp",
"exception": "cpp",
"functional": "cpp",
"random": "cpp",
"initializer_list": "cpp",
"iosfwd": "cpp",
"istream": "cpp",
"new": "cpp",
"ostream": "cpp",
"streambuf": "cpp",
"tuple": "cpp",
"type_traits": "cpp",
"utility": "cpp"
}
}

@ -0,0 +1,42 @@
#ifndef _API_
#define _API_
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
class defapi {
public:
vector<string> options;
vector<string> keys;
map<string, vector<string>> val_matrix;
defapi(const vector<string> _options, const vector<string> _keys);
void necessary(const string _option, const vector<string> _keys);
};
class api {
public:
defapi *def;
string option;
map<string, string> object;
string body;
api(defapi *_def, const string _option, const map<string, string> _object);
api(defapi *_def, const string _body);
private:
bool validate();
void parse(); // čitaj api
void format(); // šalji api
// ~api();
};
#endif

@ -0,0 +1,87 @@
#include "../lib/api.hpp"
defapi::defapi(const vector<string> _options, const vector<string> _keys) {
options = _options;
keys = _keys;
}
void defapi::necessary(const string _option, const vector<string> _keys) {
val_matrix[_option].insert( val_matrix[_option].end(), _keys.begin(), _keys.end());
}
api::api(defapi *_def, const string _option, const map<string, string> _object) {
def = _def;
object = _object;
option = _option;
if (!validate()) {
cout << "Validate API error" << endl;
}
format();
}
api::api(defapi *_def, const string _body) {
def = _def;
body = _body;
parse();
if (!validate()) {
cout << "Validate API error" << endl;
}
}
bool api::validate() {
bool isValidate = true;
for (uint i=0; i<def->val_matrix[option].size(); i++) {
def->val_matrix[option][i];
if (object[def->val_matrix[option][i]].empty()) {
isValidate = false;
break;
}
}
return isValidate;
}
void api::parse() {
for (uint i=0; i<def->options.size(); i++) {
if (body.find("/"+def->options[i]+"/") < body.length()) {
option = def->options[i];
}
}
for (uint i=0; i<def->keys.size(); i++) {
string key = def->keys[i]+"=";
string value;
if (body.find(key) < body.length()) {
value = body.substr(body.find(key)+key.length(), body.find('&',body.find(key)+key.length())-body.find(key)-key.length() < body.find(' ',body.find(key)+key.length())-body.find(key)-key.length() ? body.find('&',body.find(key)+key.length())-body.find(key)-key.length() : body.find(' ',body.find(key)+key.length())-body.find(key)-key.length());
}
object[def->keys[i]] = value;
}
}
void api::format() {
body = "GET /";
if (!option.empty()) {
body += option + '/';
}
body += '?';
for (uint i=0; i<def->keys.size(); i++) {
if (!object[def->keys[i]].empty()) {
body += def->keys[i] + "=" + object[def->keys[i]] + "&";
}
}
body.pop_back();
body += " HTTP/1.1";
}

@ -0,0 +1 @@
g++ test.cpp ../src/* -o test.o

@ -0,0 +1,25 @@
#include <iostream>
#include "../lib/api.hpp"
using namespace std;
int main() {
defapi myDef({"add", "delete", "update"}, {"id", "key", "value"});
// cout << myDef.keys[2];
myDef.necessary("add", {"id", "key", "value"});
myDef.necessary("delete", {"id"});
myDef.necessary("update", {"id"});
myDef.necessary("update", {"value"});
// cout << myDef.val_matrix["delete"].empty();
api myApi(&myDef, "GET /update/?id=1&value=true HTTP/1.1");
cout << myApi.object["value"];
}

Binary file not shown.
Loading…
Cancel
Save