[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/wravery/cppgraphqlgen/main/samples/learn/schema/QueryObject.h [Back]  [Original]

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

// WARNING! Do not edit this file manually, your changes will be overwritten.

#pragma once

#ifndef QUERYOBJECT_H
#define QUERYOBJECT_H

#include "StarWarsSchema.h"

namespace graphql::learn::object {
namespace methods::QueryHas {

template 
concept getHeroWithParams = requires (TImpl impl, service::FieldParams params, std::optional episodeArg)
{
	{ service::AwaitableObject { impl.getHero(std::move(params), std::move(episodeArg)) } };
};

template 
concept getHero = requires (TImpl impl, std::optional episodeArg)
{
	{ service::AwaitableObject { impl.getHero(std::move(episodeArg)) } };
};

template 
concept getHumanWithParams = requires (TImpl impl, service::FieldParams params, response::IdType idArg)
{
	{ service::AwaitableObject { impl.getHuman(std::move(params), std::move(idArg)) } };
};

template 
concept getHuman = requires (TImpl impl, response::IdType idArg)
{
	{ service::AwaitableObject { impl.getHuman(std::move(idArg)) } };
};

template 
concept getDroidWithParams = requires (TImpl impl, service::FieldParams params, response::IdType idArg)
{
	{ service::AwaitableObject { impl.getDroid(std::move(params), std::move(idArg)) } };
};

template 
concept getDroid = requires (TImpl impl, response::IdType idArg)
{
	{ service::AwaitableObject { impl.getDroid(std::move(idArg)) } };
};

template 
concept beginSelectionSet = requires (TImpl impl, const service::SelectionSetParams params)
{
	{ impl.beginSelectionSet(params) };
};

template 
concept endSelectionSet = requires (TImpl impl, const service::SelectionSetParams params)
{
	{ impl.endSelectionSet(params) };
};

} // namespace methods::QueryHas

class [[nodiscard("unnecessary construction")]] Query final
	: public service::Object
{
private:
	[[nodiscard("unnecessary call")]] service::AwaitableResolver resolveHero(service::ResolverParams&& params) const;
	[[nodiscard("unnecessary call")]] service::AwaitableResolver resolveHuman(service::ResolverParams&& params) const;
	[[nodiscard("unnecessary call")]] service::AwaitableResolver resolveDroid(service::ResolverParams&& params) const;

	[[nodiscard("unnecessary call")]] service::AwaitableResolver resolve_typename(service::ResolverParams&& params) const;
	[[nodiscard("unnecessary call")]] service::AwaitableResolver resolve_schema(service::ResolverParams&& params) const;
	[[nodiscard("unnecessary call")]] service::AwaitableResolver resolve_type(service::ResolverParams&& params) const;

	std::shared_ptr _schema;

	struct [[nodiscard("unnecessary construction")]] Concept
	{
		virtual ~Concept() = default;

		virtual void beginSelectionSet(const service::SelectionSetParams& params) const = 0;
		virtual void endSelectionSet(const service::SelectionSetParams& params) const = 0;

		[[nodiscard("unnecessary call")]] virtual service::AwaitableObject getHero(service::FieldParams&& params, std::optional&& episodeArg) const = 0;
		[[nodiscard("unnecessary call")]] virtual service::AwaitableObject getHuman(service::FieldParams&& params, response::IdType&& idArg) const = 0;
		[[nodiscard("unnecessary call")]] virtual service::AwaitableObject getDroid(service::FieldParams&& params, response::IdType&& idArg) const = 0;
	};

	template 
	struct [[nodiscard("unnecessary construction")]] Model final
		: Concept
	{
		explicit Model(std::shared_ptr pimpl) noexcept
			: _pimpl { std::move(pimpl) }
		{
		}

		[[nodiscard("unnecessary call")]] service::AwaitableObject getHero(service::FieldParams&& params, std::optional&& episodeArg) const override
		{
			if constexpr (methods::QueryHas::getHeroWithParams)
			{
				return { _pimpl->getHero(std::move(params), std::move(episodeArg)) };
			}
			else
			{
				static_assert(methods::QueryHas::getHero, R"msg(Query::getHero is not implemented)msg");
				return { _pimpl->getHero(std::move(episodeArg)) };
			}
		}

		[[nodiscard("unnecessary call")]] service::AwaitableObject getHuman(service::FieldParams&& params, response::IdType&& idArg) const override
		{
			if constexpr (methods::QueryHas::getHumanWithParams)
			{
				return { _pimpl->getHuman(std::move(params), std::move(idArg)) };
			}
			else
			{
				static_assert(methods::QueryHas::getHuman, R"msg(Query::getHuman is not implemented)msg");
				return { _pimpl->getHuman(std::move(idArg)) };
			}
		}

		[[nodiscard("unnecessary call")]] service::AwaitableObject getDroid(service::FieldParams&& params, response::IdType&& idArg) const override
		{
			if constexpr (methods::QueryHas::getDroidWithParams)
			{
				return { _pimpl->getDroid(std::move(params), std::move(idArg)) };
			}
			else
			{
				static_assert(methods::QueryHas::getDroid, R"msg(Query::getDroid is not implemented)msg");
				return { _pimpl->getDroid(std::move(idArg)) };
			}
		}

		void beginSelectionSet(const service::SelectionSetParams& params) const override
		{
			if constexpr (methods::QueryHas::beginSelectionSet)
			{
				_pimpl->beginSelectionSet(params);
			}
		}

		void endSelectionSet(const service::SelectionSetParams& params) const override
		{
			if constexpr (methods::QueryHas::endSelectionSet)
			{
				_pimpl->endSelectionSet(params);
			}
		}

	private:
		const std::shared_ptr _pimpl;
	};

	explicit Query(std::unique_ptr pimpl) noexcept;

	[[nodiscard("unnecessary call")]] service::TypeNames getTypeNames() const noexcept;
	[[nodiscard("unnecessary call")]] service::ResolverMap getResolvers() const noexcept;

	void beginSelectionSet(const service::SelectionSetParams& params) const override;
	void endSelectionSet(const service::SelectionSetParams& params) const override;

	const std::unique_ptr _pimpl;

public:
	template 
	explicit Query(std::shared_ptr pimpl) noexcept
		: Query { std::unique_ptr { std::make_unique(std::move(pimpl)) } }
	{
	}

	[[nodiscard("unnecessary call")]] static constexpr std::string_view getObjectType() noexcept
	{
		return { R"gql(Query)gql" };
	}
};

} // namespace graphql::learn::object

#endif // QUERYOBJECT_H

Web Proxy Viewer  |  New URL  |  Original Page