All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cpp-pistache-server.modelbase-header.mustache Maven / Gradle / Ivy

There is a newer version: 7.8.0
Show newest version
{{>licenseInfo}}
/*
 * {{prefix}}ModelBase.h
 *
 * This is the base class for all model classes
 */

#ifndef {{prefix}}ModelBase_H_
#define {{prefix}}ModelBase_H_

{{{defaultInclude}}}
#include "json.hpp"
#include 
#include 
#include 
#include 

{{#modelNamespaceDeclarations}}
namespace {{this}} {
{{/modelNamespaceDeclarations}}

class {{declspec}} {{prefix}}ModelBase
{
public:
    {{prefix}}ModelBase();
    virtual ~{{prefix}}ModelBase();

    virtual void validate() = 0;

    virtual nlohmann::json toJson() const = 0;
    virtual void fromJson(const nlohmann::json& json) = 0;

    static std::string toJson(  std::string const& value );
    static std::string toJson(  std::time_t const& value );
    static int32_t toJson( int32_t const value );
    static int64_t toJson( int64_t const value );
    static double toJson( double const value );
    static bool toJson( bool const value );
    static nlohmann::json toJson({{prefix}}ModelBase const& content ); 
};

class {{prefix}}ArrayHelper {
private:
    template::value>::value>
    static void itemFromJson(T& item, const nlohmann::json& json){
        item = json;
    }
    static void itemFromJson(ModelBase& item, const nlohmann::json& json){
        item.fromJson(json);
    }
    template::value>::value>
    static nlohmann::json itemtoJson(const T& item){
        return item;
    }
    static nlohmann::json itemtoJson(const ModelBase& item){
        return item.toJson();
    }
public:
    template
    static std::vector fromJson(const nlohmann::json& json) {
        std::vector val;
        if (!json.empty()) {
            for (const auto& item : json.items()) {
                T entry;
                itemFromJson(entry, item.value());
                val.push_back(entry);
            }
        }
        return val;
    }
    template
    static nlohmann::json toJson(const std::vector& val) {
        nlohmann::json json;
        for(const auto& item : val){
            json.push_back(itemtoJson(item));
        }
        return json;
    }
};

class {{prefix}}MapHelper {
private:
    template::value>::value>
    static void itemFromJson(T &item, const nlohmann::json& json){
        item = json;
    }
    static void itemFromJson(ModelBase &item, const nlohmann::json& json){
        item.fromJson(json);
    }
    template::value>::value>
    static nlohmann::json itemtoJson(const T& item){
        return item;
    }
    static nlohmann::json itemtoJson(const ModelBase& item){
        return item.toJson();
    }

public:
    template
    static std::map fromJson(const nlohmann::json& json) {
        std::map val;
        if (!json.empty()) {
            for (const auto& item : json.items()) {
                T entry;
                itemfromJson(entry, item.value());
                val.insert(val.end(),
                        std::pair(item.key(), entry));
            }
        }
        return val;
    }
    template
    static nlohmann::json toJson(const std::map& val) {
        nlohmann::json json;
        for (const auto& item : val) {
          nlohmann::json jitem = itemtoJson(item.second);
          json[item.first] = jitem;
        }
        return json;
    }
};

{{#modelNamespaceDeclarations}}
}
{{/modelNamespaceDeclarations}}

#endif /* {{prefix}}ModelBase_H_ */




© 2015 - 2024 Weber Informatics LLC | Privacy Policy