{protocol_docs}
template <typename D>
class {protocol_name} : public internal::base_mixin {{
public:
    {protocol_name}() {{
        internal::Check{protocol_name}Subclass<D>();
{constructor_definition}
    }}

protected:
    {protocol_name_snake}_ops_t {protocol_name_snake}_ops_ = {{}};

private:
{protocol_definitions}
}};

class {protocol_name}Client {{
public:
    {protocol_name}Client()
        : ops_(nullptr), ctx_(nullptr) {{}}
    {protocol_name}Client(const {protocol_name_snake}_t* proto)
        : ops_(proto->ops), ctx_(proto->ctx) {{}}

    void GetProto({protocol_name_snake}_t* proto) {{
        proto->ctx = ctx_;
        proto->ops = ops_;
    }}
    bool is_valid() {{
        return ops_ != nullptr;
    }}
    void clear() {{
        ctx_ = nullptr;
        ops_ = nullptr;
    }}

{client_definitions}
private:
    {protocol_name_snake}_ops_t* ops_;
    void* ctx_;
}};
