#ifndef NIX_IRC_SERIALIZER_H
#define NIX_IRC_SERIALIZER_H

#include "types.h"
#include <string>
#include <vector>
#include <fstream>

namespace nix_irc {

class Serializer {
public:
    Serializer();
    ~Serializer();
    
    void serialize(const IRModule& module, const std::string& path);
    std::vector<uint8_t> serialize_to_bytes(const IRModule& module);
    
private:
    struct Impl;
    std::unique_ptr<Impl> pImpl;
};

class Deserializer {
public:
    Deserializer();
    ~Deserializer();
    
    IRModule deserialize(const std::string& path);
    IRModule deserialize(const std::vector<uint8_t>& data);
    
private:
    struct Impl;
    std::unique_ptr<Impl> pImpl;
};

}

#endif