in codegen/method.go [184:295]
func NewMethod(
thriftFile string,
funcSpec *compile.FunctionSpec,
packageHelper *PackageHelper,
wantAnnot bool,
isEndpoint bool,
thriftService string,
) (*MethodSpec, error) {
var (
err error
ok bool
ant = packageHelper.annotationPrefix
method = &MethodSpec{}
)
method.CompiledThriftSpec = funcSpec
method.Name = funcSpec.MethodName()
method.IsEndpoint = isEndpoint
method.WantAnnot = wantAnnot
method.ThriftService = thriftService
method.annotations = annotations{
HTTPMethod: fmt.Sprintf(antHTTPMethod, ant),
HTTPPath: fmt.Sprintf(antHTTPPath, ant),
HTTPStatus: fmt.Sprintf(antHTTPStatus, ant),
HTTPReqHeaders: fmt.Sprintf(antHTTPReqHeaders, ant),
HTTPResHeaders: fmt.Sprintf(antHTTPResHeaders, ant),
HTTPRef: fmt.Sprintf(antHTTPRef, ant),
Meta: fmt.Sprintf(antMeta, ant),
Handler: fmt.Sprintf(antHandler, ant),
HTTPReqDefBoxed: fmt.Sprintf(AntHTTPReqDefBoxed, ant),
HTTPResNoBody: fmt.Sprintf(antHTTPResNoBody, ant),
}
method.GenCodePkgName, err = packageHelper.TypePackageName(thriftFile)
if err != nil {
return nil, err
}
err = method.setResponseType(thriftFile, funcSpec.ResultSpec, packageHelper)
if err != nil {
return nil, err
}
err = method.setRequestType(thriftFile, funcSpec, packageHelper)
if err != nil {
return nil, err
}
err = method.setExceptions(thriftFile, isEndpoint, funcSpec.ResultSpec, packageHelper)
if err != nil {
return nil, err
}
method.ReqHeaders = headers(funcSpec.Annotations[method.annotations.HTTPReqHeaders])
method.ResHeaders = headers(funcSpec.Annotations[method.annotations.HTTPResHeaders])
if !wantAnnot {
return method, nil
}
if method.HTTPMethod, ok = funcSpec.Annotations[method.annotations.HTTPMethod]; !ok {
return nil, errors.Errorf("missing annotation '%s' for HTTP method", method.annotations.HTTPMethod)
}
method.EndpointName = funcSpec.Annotations[method.annotations.Handler]
err = method.setOKStatusCode(funcSpec.Annotations[method.annotations.HTTPStatus])
if err != nil {
return nil, err
}
method.setValidStatusCodes()
if method.RequestType != "" {
hasNoBody := method.HTTPMethod == "GET"
if method.IsEndpoint {
err := method.setParseQueryParamStatements(funcSpec, packageHelper, hasNoBody)
if err != nil {
return nil, err
}
} else {
err := method.setWriteQueryParamStatements(funcSpec, packageHelper, hasNoBody)
if err != nil {
return nil, err
}
}
}
var httpPath string
if httpPath, ok = funcSpec.Annotations[method.annotations.HTTPPath]; !ok {
return nil, errors.Errorf(
"missing annotation '%s' for HTTP path", method.annotations.HTTPPath,
)
}
method.setHTTPPath(httpPath, funcSpec)
err = method.setRequestParamFields(funcSpec, packageHelper)
if err != nil {
return nil, err
}
err = method.setEndpointRequestHeaderFields(funcSpec, packageHelper)
if err != nil {
return nil, err
}
err = method.setClientRequestHeaderFields(funcSpec, packageHelper)
if err != nil {
return nil, err
}
method.setResponseHeaderFields(funcSpec)
return method, nil
}