Skip to content

File channel_kind.hpp

File List > backends > cxx > include > zmbt > model > channel_kind.hpp

Go to the documentation of this file

#ifndef ZMBT_MODEL_CHANNEL_KIND_HPP_
#define ZMBT_MODEL_CHANNEL_KIND_HPP_


#include "zmbt/reflect.hpp"

namespace zmbt {

enum class ChannelKind
{
    Undefined, Args, Return, Exception, Timestamp, ThreadId, CallCount,
};



template<>
struct reflect::custom_serialization<ChannelKind> {

    static boost::json::value
    json_from(ChannelKind const& k)
    {
        switch(k)
        {
            case ChannelKind::Args:       return "args";
            case ChannelKind::Return:     return "return";
            case ChannelKind::CallCount:  return "call_count";
            case ChannelKind::Exception:  return "exception";
            case ChannelKind::Timestamp:  return "ts";
            case ChannelKind::ThreadId:   return "tid";
            default:
                return nullptr;
        }
    }

    static ChannelKind
    dejsonize(boost::json::value const& v)
    {
        if("args"       == v) return ChannelKind::Args;
        if("return"     == v) return ChannelKind::Return;
        if("call_count" == v) return ChannelKind::CallCount;
        if("exception"  == v) return ChannelKind::Exception;
        if("ts"         == v) return ChannelKind::Timestamp;
        if("tid"        == v) return ChannelKind::ThreadId;
        return ChannelKind::Undefined;
    }
};

}  // namespace zmbt

#endif  // ZMBT_MODEL_CHANNEL_KIND_HPP_