commit
a6d188960f
@ -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…
Reference in new issue