/** Object Data Persistence.
    See_Also: https://stackoverflow.com/questions/20932921/automatic-object-persistence-in-d/20934647?noredirect=1#20934647
*/
module nxt.persist;

/// Persistent storage of variables of type `T`.
struct persistent(T, string file = __FILE__, size_t line = __LINE__)
{
    T store;
    alias store this;

    @disable this();    // require an initializer

    // with the initializer
    this(T t)
    {
        // if it is in the file, we should load it here
        // else...
        store = t;
    }

    ~this()
    {
        import std.stdio : writeln;
        // you should actually save it to the file. TODO Import file and
        // calculate its sha1 all at compile-time!
        // TODO Save store, " as key ", file,":",line);
    }
}

unittest
{
    persistent!int x = 10;
}