@@ -677,7 +677,8 @@ response::IntType ModifiedArgument<response::IntType>::convert(const response::V
677
677
template <>
678
678
response::FloatType ModifiedArgument<response::FloatType>::convert(const response::Value& value)
679
679
{
680
- if (value.type () != response::Type::Float)
680
+ if (value.type () != response::Type::Float
681
+ && value.type () != response::Type::Int)
681
682
{
682
683
throw schema_exception { { " not a float" } };
683
684
}
@@ -726,8 +727,7 @@ response::IdType ModifiedArgument<response::IdType>::convert(const response::Val
726
727
return Base64::fromBase64 (encoded.c_str (), encoded.size ());
727
728
}
728
729
729
- template <>
730
- std::future<response::Value> ModifiedResult<response::IntType>::convert(FieldResult<response::IntType>&& result, ResolverParams&& params)
730
+ void blockSubFields (const ResolverParams& params)
731
731
{
732
732
// http://spec.graphql.org/June2018/#sec-Leaf-Field-Selections
733
733
if (params.selection != nullptr )
@@ -739,6 +739,12 @@ std::future<response::Value> ModifiedResult<response::IntType>::convert(FieldRes
739
739
740
740
throw schema_exception { { schema_error{ error.str (), { position.line , position.column }, { params.errorPath } } } };
741
741
}
742
+ }
743
+
744
+ template <>
745
+ std::future<response::Value> ModifiedResult<response::IntType>::convert(FieldResult<response::IntType>&& result, ResolverParams&& params)
746
+ {
747
+ blockSubFields (params);
742
748
743
749
return resolve (std::move (result), std::move (params),
744
750
[](response::IntType&& value, const ResolverParams&)
@@ -750,16 +756,7 @@ std::future<response::Value> ModifiedResult<response::IntType>::convert(FieldRes
750
756
template <>
751
757
std::future<response::Value> ModifiedResult<response::FloatType>::convert(FieldResult<response::FloatType>&& result, ResolverParams&& params)
752
758
{
753
- // http://spec.graphql.org/June2018/#sec-Leaf-Field-Selections
754
- if (params.selection != nullptr )
755
- {
756
- auto position = params.selection ->begin ();
757
- std::ostringstream error;
758
-
759
- error << " Field may not have sub-fields name: " << params.fieldName ;
760
-
761
- throw schema_exception { { schema_error{ error.str (), { position.line , position.column }, { params.errorPath } } } };
762
- }
759
+ blockSubFields (params);
763
760
764
761
return resolve (std::move (result), std::move (params),
765
762
[](response::FloatType&& value, const ResolverParams&)
@@ -771,16 +768,7 @@ std::future<response::Value> ModifiedResult<response::FloatType>::convert(FieldR
771
768
template <>
772
769
std::future<response::Value> ModifiedResult<response::StringType>::convert(FieldResult<response::StringType>&& result, ResolverParams&& params)
773
770
{
774
- // http://spec.graphql.org/June2018/#sec-Leaf-Field-Selections
775
- if (params.selection != nullptr )
776
- {
777
- auto position = params.selection ->begin ();
778
- std::ostringstream error;
779
-
780
- error << " Field may not have sub-fields name: " << params.fieldName ;
781
-
782
- throw schema_exception { { schema_error{ error.str (), { position.line , position.column }, { params.errorPath } } } };
783
- }
771
+ blockSubFields (params);
784
772
785
773
return resolve (std::move (result), std::move (params),
786
774
[](response::StringType&& value, const ResolverParams&)
@@ -792,16 +780,7 @@ std::future<response::Value> ModifiedResult<response::StringType>::convert(Field
792
780
template <>
793
781
std::future<response::Value> ModifiedResult<response::BooleanType>::convert(FieldResult<response::BooleanType>&& result, ResolverParams&& params)
794
782
{
795
- // http://spec.graphql.org/June2018/#sec-Leaf-Field-Selections
796
- if (params.selection != nullptr )
797
- {
798
- auto position = params.selection ->begin ();
799
- std::ostringstream error;
800
-
801
- error << " Field may not have sub-fields name: " << params.fieldName ;
802
-
803
- throw schema_exception { { schema_error{ error.str (), { position.line , position.column }, { params.errorPath } } } };
804
- }
783
+ blockSubFields (params);
805
784
806
785
return resolve (std::move (result), std::move (params),
807
786
[](response::BooleanType&& value, const ResolverParams&)
@@ -813,16 +792,7 @@ std::future<response::Value> ModifiedResult<response::BooleanType>::convert(Fiel
813
792
template <>
814
793
std::future<response::Value> ModifiedResult<response::Value>::convert(FieldResult<response::Value>&& result, ResolverParams&& params)
815
794
{
816
- // http://spec.graphql.org/June2018/#sec-Leaf-Field-Selections
817
- if (params.selection != nullptr )
818
- {
819
- auto position = params.selection ->begin ();
820
- std::ostringstream error;
821
-
822
- error << " Field may not have sub-fields name: " << params.fieldName ;
823
-
824
- throw schema_exception { { schema_error{ error.str (), { position.line , position.column }, { params.errorPath } } } };
825
- }
795
+ blockSubFields (params);
826
796
827
797
return resolve (std::move (result), std::move (params),
828
798
[](response::Value&& value, const ResolverParams&)
@@ -834,16 +804,7 @@ std::future<response::Value> ModifiedResult<response::Value>::convert(FieldResul
834
804
template <>
835
805
std::future<response::Value> ModifiedResult<response::IdType>::convert(FieldResult<response::IdType>&& result, ResolverParams&& params)
836
806
{
837
- // http://spec.graphql.org/June2018/#sec-Leaf-Field-Selections
838
- if (params.selection != nullptr )
839
- {
840
- auto position = params.selection ->begin ();
841
- std::ostringstream error;
842
-
843
- error << " Field may not have sub-fields name: " << params.fieldName ;
844
-
845
- throw schema_exception { { schema_error{ error.str (), { position.line , position.column }, { params.errorPath } } } };
846
- }
807
+ blockSubFields (params);
847
808
848
809
return resolve (std::move (result), std::move (params),
849
810
[](response::IdType&& value, const ResolverParams&)
@@ -852,8 +813,7 @@ std::future<response::Value> ModifiedResult<response::IdType>::convert(FieldResu
852
813
});
853
814
}
854
815
855
- template <>
856
- std::future<response::Value> ModifiedResult<Object>::convert(FieldResult<std::shared_ptr<Object>>&& result, ResolverParams&& params)
816
+ void requireSubFields (const ResolverParams& params)
857
817
{
858
818
// http://spec.graphql.org/June2018/#sec-Leaf-Field-Selections
859
819
if (params.selection == nullptr )
@@ -865,6 +825,12 @@ std::future<response::Value> ModifiedResult<Object>::convert(FieldResult<std::sh
865
825
866
826
throw schema_exception { { schema_error{ error.str (), { position.line , position.column }, { params.errorPath } } } };
867
827
}
828
+ }
829
+
830
+ template <>
831
+ std::future<response::Value> ModifiedResult<Object>::convert(FieldResult<std::shared_ptr<Object>>&& result, ResolverParams&& params)
832
+ {
833
+ requireSubFields (params);
868
834
869
835
return std::async (params.launch ,
870
836
[](FieldResult<std::shared_ptr<Object>>&& resultFuture, ResolverParams&& paramsFuture)
0 commit comments