module drocks.multivalue;

//import std.stdio;
import drocks.response : Response;
import drocks.pair     : Pair;

alias MultiPair  = Multi!"getPair";
alias MultiKey   = Multi!"getKey";
alias MultiValue = Multi!"getValue";

struct Multi(string ValueType)
{
private:
    alias cursor_t = typeof(mixin("Response.init." ~ ValueType ~ "()"));
    
    Response  _resp;
    cursor_t _cur;

public:

    this(Response resp)
    {
        _resp = resp;
        _cur = mixin("_resp." ~ ValueType ~ "()");
    }

    bool empty() const @property
    {
        return !_resp.isValid();
    }
    auto front() const @property
    {
        return _cur;
    }
    void popFront()
    {
        _cur = mixin("_resp." ~ ValueType ~ "()");
    }
}