| // Copyright 2017 Google Inc. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package main |
| |
| import ( |
| "strings" |
| ) |
| |
| func (renderer *Renderer) RenderProvider() ([]byte, error) { |
| f := NewLineWriter() |
| f.WriteLine("// GENERATED FILE: DO NOT EDIT!\n") |
| f.WriteLine("package " + renderer.Package) |
| f.WriteLine(``) |
| f.WriteLine(`// To create a server, first write a class that implements this interface.`) |
| f.WriteLine(`// Then pass an instance of it to Initialize().`) |
| f.WriteLine(`type Provider interface {`) |
| for _, method := range renderer.Model.Methods { |
| parametersType := renderer.Model.TypeWithTypeName(method.ParametersTypeName) |
| responsesType := renderer.Model.TypeWithTypeName(method.ResponsesTypeName) |
| f.WriteLine(``) |
| f.WriteLine(commentForText(method.Description)) |
| if parametersType != nil { |
| if responsesType != nil { |
| f.WriteLine(method.ProcessorName + |
| `(parameters *` + parametersType.Name + |
| `, responses *` + responsesType.Name + `) (err error)`) |
| } else { |
| f.WriteLine(method.ProcessorName + `(parameters *` + parametersType.Name + `) (err error)`) |
| } |
| } else { |
| if responsesType != nil { |
| f.WriteLine(method.ProcessorName + `(responses *` + responsesType.Name + `) (err error)`) |
| } else { |
| f.WriteLine(method.ProcessorName + `() (err error)`) |
| } |
| } |
| } |
| f.WriteLine(`}`) |
| return f.Bytes(), nil |
| } |
| |
| func commentForText(text string) string { |
| result := "" |
| lines := strings.Split(text, "\n") |
| for i, line := range lines { |
| if i > 0 { |
| result += "\n" |
| } |
| result += "// " + line |
| } |
| return result |
| } |