#pragma once
#ifndef LEXESIS_TEMPLATE_H
#define LEXESIS_TEMPLATE_H

#include <map>
#include <string>
#include <vector>
#include <mstch/mstch.hpp>

namespace lxs {
namespace templ {
    using TemplateContext = mstch::node;

    TemplateContext make_string(std::string);
    TemplateContext make_map(std::map<const std::string, TemplateContext>);
    TemplateContext make_array(std::vector<TemplateContext>);

    class Template {
        public:
            Template(std::string filename);
            ~Template();

            void render(std::ostream& out, TemplateContext& context);
        private:
            std::string m_filename;
    };

} //namespace templ
} //namespace lxs

#endif //LEXESIS_TEMPLATE_H
