diff options
| author | Dan Goodliffe <daniel.goodliffe@pressassociation.com> | 2016-10-27 16:48:13 +0100 | 
|---|---|---|
| committer | Dan Goodliffe <daniel.goodliffe@pressassociation.com> | 2016-10-27 16:48:13 +0100 | 
| commit | 1b90fb0f27cf4a57da0a8c68479cd1d2e7b76a42 (patch) | |
| tree | 5f593d51e26e0b5ee6d533070ce433f5540f3e7a | |
| parent | Add basic support for base classes for routes (diff) | |
| download | icespider-1b90fb0f27cf4a57da0a8c68479cd1d2e7b76a42.tar.bz2 icespider-1b90fb0f27cf4a57da0a8c68479cd1d2e7b76a42.tar.xz icespider-1b90fb0f27cf4a57da0a8c68479cd1d2e7b76a42.zip | |
Create response model as a local var that we can operate on if desired
| -rw-r--r-- | icespider/compile/routeCompiler.cpp | 37 | 
1 files changed, 15 insertions, 22 deletions
| diff --git a/icespider/compile/routeCompiler.cpp b/icespider/compile/routeCompiler.cpp index 30f7900..f92d941 100644 --- a/icespider/compile/routeCompiler.cpp +++ b/icespider/compile/routeCompiler.cpp @@ -533,7 +533,7 @@ namespace IceSpider {  		{  			auto operation = r->operation->substr(r->operation->find_last_of('.') + 1);  			if (o->returnsData()) { -				fprintbf(4, output, "request->response(this, prx0->%s(", operation); +				fprintbf(4, output, "auto _responseModel = prx0->%s(", operation);  			}  			else {  				fprintbf(4, output, "prx0->%s(", operation); @@ -547,12 +547,11 @@ namespace IceSpider {  					fprintbf(output, "_pd_%s, ", p->name());  				}  			} -			fprintbf(output, "request->getContext())"); +			fprintbf(output, "request->getContext());\n");  			if (o->returnsData()) { -				fprintbf(output, ")"); +				fprintbf(4, output, "request->response(this, _responseModel);\n");  			} -			fprintbf(output, ";\n"); -			if (!o->returnsData()) { +			else {  				fprintbf(4, output, "request->response(200, \"OK\");\n");  			}  		} @@ -580,42 +579,36 @@ namespace IceSpider {  			auto t = findType(r->type, us);  			Slice::DataMemberList members;  			if (t.second) { -				fprintbf(4, output, "request->response<%s>(this, new %s(", +				fprintbf(4, output, "%s _responseModel = new %s();\n",  						Slice::typeToString(t.second),  						t.second->scoped());  				members = t.second->definition()->dataMembers();  			}  			else { -				fprintbf(4, output, "request->response<%s>(this, {", +				fprintbf(4, output, "%s _responseModel;\n",  						Slice::typeToString(t.first));  				members = t.first->dataMembers();  			} -			for (auto mi = members.begin(); mi != members.end(); mi++) { +			for (const auto & mi : members) {  				bool isOp = false; -				if (mi != members.begin()) { -					fprintbf(output, ","); -				} -				fprintbf(output, "\n"); +				fprintbf(4, output, "_responseModel%s%s = ", +						t.second ? "->" : ".", +						mi->name());  				for (const auto & o : r->operations) {  					auto proxyName = o.second->operation.substr(0, o.second->operation.find_last_of('.'));  					auto operation = o.second->operation.substr(o.second->operation.find_last_of('.') + 1); -					if ((*mi)->name() == o.first) { -						fprintbf(6, output, "prx%s->end_%s(_ar_%s)", proxies.find(proxyName)->second, operation, o.first); +					if (mi->name() == o.first) { +						fprintbf(output, "prx%s->end_%s(_ar_%s)", proxies.find(proxyName)->second, operation, o.first);  						isOp = true;  						break;  					}  				}  				if (!isOp) { -					fprintbf(6, output, "_p_%s", (*mi)->name()); +					fprintbf(output, "_p_%s", mi->name());  				} +				fprintf(output, ";\n");  			} -			if (t.second) { -				fprintf(output, ")"); -			} -			else { -				fprintf(output, " }"); -			} -			fprintf(output, ");\n"); +			fprintbf(4, output, "request->response(this, _responseModel);\n");  		}  	}  } | 
