json parser
This commit is contained in:
parent
3aa3cee61c
commit
de9a3f94f7
4 changed files with 156 additions and 0 deletions
39
src/File.cpp
Normal file
39
src/File.cpp
Normal file
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
* File.cpp
|
||||
*
|
||||
* Created on: 17.10.2015
|
||||
* Author: jdi
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include "File.h"
|
||||
|
||||
std::string File::read(std::string path) {
|
||||
if (!fs::exists(home)) {
|
||||
fs::create_directory(home);
|
||||
}
|
||||
|
||||
fs::ifstream in((home / path), std::ios::in | std::ios::binary);
|
||||
if (in) {
|
||||
std::string contents;
|
||||
in.seekg(0, std::ios::end);
|
||||
contents.resize(in.tellg());
|
||||
in.seekg(0, std::ios::beg);
|
||||
in.read(&contents[0], contents.size());
|
||||
in.close();
|
||||
return (contents);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
int File::write(std::string path, std::string content) {
|
||||
if (!fs::exists(home)) {
|
||||
fs::create_directory(home);
|
||||
}
|
||||
fs::path p = home / path;
|
||||
fs::ofstream file(p);
|
||||
file << content;
|
||||
file.close();
|
||||
return 0;
|
||||
}
|
||||
|
28
src/File.h
Normal file
28
src/File.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* File.h
|
||||
*
|
||||
* Created on: 17.10.2015
|
||||
* Author: jdi
|
||||
*/
|
||||
|
||||
#ifndef FILE_H_
|
||||
#define FILE_H_
|
||||
|
||||
#include <boost/filesystem.hpp>
|
||||
#include <boost/filesystem/fstream.hpp>
|
||||
namespace fs = boost::filesystem;
|
||||
|
||||
#include <string>
|
||||
|
||||
class File {
|
||||
public:
|
||||
File() {
|
||||
home = fs::path(getenv("HOME")) / ".smrtlink";
|
||||
}
|
||||
std::string read(std::string);
|
||||
int write(std::string, std::string);
|
||||
private:
|
||||
fs::path home;
|
||||
};
|
||||
|
||||
#endif /* FILE_H_ */
|
51
src/jsonNode.cpp
Normal file
51
src/jsonNode.cpp
Normal file
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* jsonNode.cpp
|
||||
*
|
||||
* Created on: 17.10.2015
|
||||
* Author: jdi
|
||||
*/
|
||||
|
||||
#include "jsonNode.h"
|
||||
|
||||
jsonNode::jsonNode(const std::string &x, doc &root) {
|
||||
super(rapidjson::kStringType);
|
||||
char buffer[30];
|
||||
int len = sprintf(buffer, "%s", x.c_str());
|
||||
this->SetString(buffer, static_cast<size_t>(len), root.GetAllocator());
|
||||
memset(buffer, 0, sizeof(buffer));
|
||||
}
|
||||
|
||||
jsonNode::jsonNode(const ipAddr &x, doc &root) {
|
||||
super(rapidjson::kStringType);
|
||||
char buffer[16];
|
||||
int len = sprintf(buffer, "%d.%d.%d.%d", x[0], x[1],
|
||||
x[2], x[3]);
|
||||
this->SetString(buffer, static_cast<size_t>(len), root.GetAllocator());
|
||||
memset(buffer, 0, sizeof(buffer));
|
||||
}
|
||||
|
||||
jsonNode::jsonNode(const macAddr &x, doc &root) {
|
||||
super(rapidjson::kStringType);
|
||||
char buffer[18];
|
||||
int len = sprintf(buffer, "%02x:%02x:%02x:%02x:%02x:%02x", x[0], x[1],
|
||||
x[2], x[3], x[4], x[5]);
|
||||
this->SetString(buffer, static_cast<size_t>(len), root.GetAllocator());
|
||||
memset(buffer, 0, sizeof(buffer));
|
||||
}
|
||||
|
||||
jsonNode::jsonNode(const vlan &x, doc &root) {
|
||||
super(rapidjson::kObjectType);
|
||||
AddMember("id", x.vlan_id, root.GetAllocator());
|
||||
AddMember("name", jsonNode(x.name, root), root.GetAllocator());
|
||||
AddMember("tagged-members", jsonNode(x.tagged_member, root),
|
||||
root.GetAllocator());
|
||||
AddMember("untagged-members", jsonNode(x.untagged_member, root),
|
||||
root.GetAllocator());
|
||||
}
|
||||
|
||||
jsonNode::jsonNode(const port &x, doc &root) {
|
||||
super(rapidjson::kObjectType);
|
||||
AddMember("id", x.id, root.GetAllocator());
|
||||
AddMember("status", x.status, root.GetAllocator());
|
||||
AddMember("pvid", x.pvid, root.GetAllocator());
|
||||
}
|
38
src/jsonNode.h
Normal file
38
src/jsonNode.h
Normal file
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* jsonNode.h
|
||||
*
|
||||
* Created on: 17.10.2015
|
||||
* Author: jdi
|
||||
*/
|
||||
|
||||
#ifndef JSONNODE_H_
|
||||
#define JSONNODE_H_
|
||||
|
||||
#include "../include/rapidjson/document.h"
|
||||
#include "../include/rapidjson/prettywriter.h"
|
||||
#include "Switch.h"
|
||||
|
||||
class jsonNode: public rapidjson::Value {
|
||||
typedef rapidjson::Value super;
|
||||
typedef rapidjson::Document doc;
|
||||
public:
|
||||
jsonNode(const std::string&, doc&);
|
||||
jsonNode(const macAddr&, doc&);
|
||||
jsonNode(const ipAddr&, doc&);
|
||||
jsonNode(const vlan&, doc&);
|
||||
jsonNode(const port&, doc&);
|
||||
|
||||
template<class T>
|
||||
jsonNode(const T &templ_arg, doc &root){
|
||||
std::cerr<<"Not serializable Type: "<<typeid(T).name()<<"\n";
|
||||
}
|
||||
|
||||
template<class T>
|
||||
jsonNode(const std::vector<T> &x, doc &root) {
|
||||
super(rapidjson::kArrayType);
|
||||
for (T y : x)
|
||||
PushBack(jsonNode(y, root), root.GetAllocator());
|
||||
}
|
||||
};
|
||||
|
||||
#endif /* JSONNODE_H_ */
|
Loading…
Reference in a new issue