/*
 * Copyright (C) 2016 Charybdis Development Team
 * Copyright (C) 2016 Jason Volk <jason@zemos.net>
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice is present in all copies.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

namespace ircd   {
namespace client {
namespace serv   {

struct serv
{
	list users;
	list servers;

	std::shared_ptr<struct user> user;   // who activated this connection
	std::string by;

	int caps;       /* capabilities bit-field */
	std::string fullcaps;

	std::shared_ptr<cache::serv::entry> nameinfo;

	serv();
	~serv() noexcept;
};

serv::serv()
{
}

serv::~serv()
noexcept
{
}

std::shared_ptr<struct user> &
user(serv &serv)
{
	return serv.user;
}

std::string &
by(serv &serv)
{
	return serv.by;
}

int &
caps(serv &serv)
{
	return serv.caps;
}

std::string &
fullcaps(serv &serv)
{
	return serv.fullcaps;
}

list &
users(serv &serv)
{
	return serv.users;
}

list &
servers(serv &serv)
{
	return serv.servers;
}

std::shared_ptr<cache::serv::entry> &
nameinfo(serv &serv)
{
	return serv.nameinfo;
}

const std::shared_ptr<cache::serv::entry> &
nameinfo(const serv &serv)
{
	return serv.nameinfo;
}

} // namespace serv
} // namespace client
} // namespace ircd