|
|
@@ -19,6 +19,8 @@ import SwiftProtobufPluginLibrary
|
|
|
import Stencil
|
|
|
import PathKit
|
|
|
|
|
|
+let namer = SwiftProtobufNamer()
|
|
|
+
|
|
|
// internal helpers
|
|
|
extension String {
|
|
|
var undotted : String {
|
|
|
@@ -38,10 +40,8 @@ extension String {
|
|
|
// functions for use in templates
|
|
|
|
|
|
// Transform .some.package_name.FooBarRequest -> Some_PackageName_FooBarRequest
|
|
|
-func protoMessageName(_ name :String?) -> String {
|
|
|
- guard let name = name else {
|
|
|
- return ""
|
|
|
- }
|
|
|
+func protoMessageName(_ descriptor :SwiftProtobufPluginLibrary.Descriptor) -> String {
|
|
|
+ let name = descriptor.fullName
|
|
|
|
|
|
var parts : [String] = []
|
|
|
for dotComponent in name.components(separatedBy:".") {
|
|
|
@@ -62,19 +62,19 @@ func pathName(_ arguments: [Any?]) throws -> String {
|
|
|
if arguments.count != 3 {
|
|
|
throw TemplateSyntaxError("path expects 3 arguments")
|
|
|
}
|
|
|
- guard let protoFile = arguments[0] as? FileDescriptor
|
|
|
+ guard let protoFile = arguments[0] as? SwiftProtobufPluginLibrary.FileDescriptor
|
|
|
else {
|
|
|
throw TemplateSyntaxError("tag must be called with a " +
|
|
|
"FileDescriptor" +
|
|
|
" argument, received \(String(describing:arguments[0]))")
|
|
|
}
|
|
|
- guard let service = arguments[1] as? ServiceDescriptor
|
|
|
+ guard let service = arguments[1] as? SwiftProtobufPluginLibrary.ServiceDescriptor
|
|
|
else {
|
|
|
throw TemplateSyntaxError("tag must be called with a " +
|
|
|
"ServiceDescriptor" +
|
|
|
" argument, received \(String(describing:arguments[1]))")
|
|
|
}
|
|
|
- guard let method = arguments[2] as? MethodDescriptor
|
|
|
+ guard let method = arguments[2] as? SwiftProtobufPluginLibrary.MethodDescriptor
|
|
|
else {
|
|
|
throw TemplateSyntaxError("tag must be called with a " +
|
|
|
"MethodDescriptor" +
|
|
|
@@ -87,19 +87,19 @@ func packageServiceMethodName(_ arguments: [Any?]) throws -> String {
|
|
|
if arguments.count != 3 {
|
|
|
throw TemplateSyntaxError("tag expects 3 arguments")
|
|
|
}
|
|
|
- guard let protoFile = arguments[0] as? FileDescriptor
|
|
|
+ guard let protoFile = arguments[0] as? SwiftProtobufPluginLibrary.FileDescriptor
|
|
|
else {
|
|
|
throw TemplateSyntaxError("tag must be called with a " +
|
|
|
"FileDescriptor" +
|
|
|
" argument, received \(String(describing:arguments[0]))")
|
|
|
}
|
|
|
- guard let service = arguments[1] as? ServiceDescriptor
|
|
|
+ guard let service = arguments[1] as? SwiftProtobufPluginLibrary.ServiceDescriptor
|
|
|
else {
|
|
|
throw TemplateSyntaxError("tag must be called with a " +
|
|
|
"ServiceDescriptor" +
|
|
|
" argument, received \(String(describing:arguments[1]))")
|
|
|
}
|
|
|
- guard let method = arguments[2] as? MethodDescriptor
|
|
|
+ guard let method = arguments[2] as? SwiftProtobufPluginLibrary.MethodDescriptor
|
|
|
else {
|
|
|
throw TemplateSyntaxError("tag must be called with a " +
|
|
|
"MethodDescriptor" +
|
|
|
@@ -112,13 +112,13 @@ func packageServiceName(_ arguments: [Any?]) throws -> String {
|
|
|
if arguments.count != 2 {
|
|
|
throw TemplateSyntaxError("tag expects 2 arguments")
|
|
|
}
|
|
|
- guard let protoFile = arguments[0] as? FileDescriptor
|
|
|
+ guard let protoFile = arguments[0] as? SwiftProtobufPluginLibrary.FileDescriptor
|
|
|
else {
|
|
|
throw TemplateSyntaxError("tag must be called with a " +
|
|
|
"FileDescriptor" +
|
|
|
" argument, received \(String(describing:arguments[0]))")
|
|
|
}
|
|
|
- guard let service = arguments[1] as? ServiceDescriptor
|
|
|
+ guard let service = arguments[1] as? SwiftProtobufPluginLibrary.ServiceDescriptor
|
|
|
else {
|
|
|
throw TemplateSyntaxError("tag must be called with a " +
|
|
|
"ServiceDescriptor" +
|
|
|
@@ -128,48 +128,84 @@ func packageServiceName(_ arguments: [Any?]) throws -> String {
|
|
|
}
|
|
|
|
|
|
class GRPCFilterExtension : Extension {
|
|
|
- override init() {
|
|
|
- super.init()
|
|
|
- // initialize template engine and add custom filters
|
|
|
- let ext = self
|
|
|
- ext.registerFilter("call") { (value: Any?, arguments: [Any?]) in
|
|
|
- return try packageServiceMethodName(arguments) + "Call"
|
|
|
- }
|
|
|
- ext.registerFilter("session") { (value: Any?, arguments: [Any?]) in
|
|
|
- return try packageServiceMethodName(arguments) + "Session"
|
|
|
- }
|
|
|
- ext.registerFilter("path") { (value: Any?, arguments: [Any?]) in
|
|
|
- return try pathName(arguments)
|
|
|
- }
|
|
|
- ext.registerFilter("provider") { (value: Any?, arguments: [Any?]) in
|
|
|
- return try packageServiceName(arguments) + "Provider"
|
|
|
- }
|
|
|
- ext.registerFilter("clienterror") { (value: Any?, arguments: [Any?]) in
|
|
|
- return try packageServiceName(arguments) + "ClientError"
|
|
|
- }
|
|
|
- ext.registerFilter("serviceclass") { (value: Any?, arguments: [Any?]) in
|
|
|
- return try packageServiceName(arguments) + "Service"
|
|
|
- }
|
|
|
- ext.registerFilter("servererror") { (value: Any?, arguments: [Any?]) in
|
|
|
- return try packageServiceName(arguments) + "ServerError"
|
|
|
- }
|
|
|
- ext.registerFilter("server") { (value: Any?, arguments: [Any?]) in
|
|
|
- return try packageServiceName(arguments) + "Server"
|
|
|
- }
|
|
|
- ext.registerFilter("service") { (value: Any?, arguments: [Any?]) in
|
|
|
- return try packageServiceName(arguments)
|
|
|
- }
|
|
|
- ext.registerFilter("input") { (value: Any?) in
|
|
|
- if let value = value as? MethodDescriptor {
|
|
|
- return protoMessageName(value.inputType)
|
|
|
- }
|
|
|
- throw TemplateSyntaxError("message: invalid argument \(String(describing:value))")
|
|
|
- }
|
|
|
- ext.registerFilter("output") { (value: Any?) in
|
|
|
- if let value = value as? MethodDescriptor {
|
|
|
- return protoMessageName(value.outputType)
|
|
|
- }
|
|
|
- throw TemplateSyntaxError("message: invalid argument \(String(describing:value))")
|
|
|
- }
|
|
|
- }
|
|
|
+ override init() {
|
|
|
+ super.init()
|
|
|
+ // initialize template engine and add custom filters
|
|
|
+ let ext = self
|
|
|
+ ext.registerFilter("call") { (value: Any?, arguments: [Any?]) in
|
|
|
+ return try packageServiceMethodName(arguments) + "Call"
|
|
|
+ }
|
|
|
+ ext.registerFilter("session") { (value: Any?, arguments: [Any?]) in
|
|
|
+ return try packageServiceMethodName(arguments) + "Session"
|
|
|
+ }
|
|
|
+ ext.registerFilter("path") { (value: Any?, arguments: [Any?]) in
|
|
|
+ return try pathName(arguments)
|
|
|
+ }
|
|
|
+ ext.registerFilter("provider") { (value: Any?, arguments: [Any?]) in
|
|
|
+ return try packageServiceName(arguments) + "Provider"
|
|
|
+ }
|
|
|
+ ext.registerFilter("clienterror") { (value: Any?, arguments: [Any?]) in
|
|
|
+ return try packageServiceName(arguments) + "ClientError"
|
|
|
+ }
|
|
|
+ ext.registerFilter("serviceclass") { (value: Any?, arguments: [Any?]) in
|
|
|
+ return try packageServiceName(arguments) + "Service"
|
|
|
+ }
|
|
|
+ ext.registerFilter("servererror") { (value: Any?, arguments: [Any?]) in
|
|
|
+ return try packageServiceName(arguments) + "ServerError"
|
|
|
+ }
|
|
|
+ ext.registerFilter("server") { (value: Any?, arguments: [Any?]) in
|
|
|
+ return try packageServiceName(arguments) + "Server"
|
|
|
+ }
|
|
|
+ ext.registerFilter("service") { (value: Any?, arguments: [Any?]) in
|
|
|
+ return try packageServiceName(arguments)
|
|
|
+ }
|
|
|
+ ext.registerFilter("input") { (value: Any?) in
|
|
|
+ if let value = value as? SwiftProtobufPluginLibrary.MethodDescriptor {
|
|
|
+ return protoMessageName(value.inputType)
|
|
|
+ }
|
|
|
+ throw TemplateSyntaxError("message: invalid argument \(String(describing:value))")
|
|
|
+ }
|
|
|
+ ext.registerFilter("output") { (value: Any?) in
|
|
|
+ if let value = value as? SwiftProtobufPluginLibrary.MethodDescriptor {
|
|
|
+ return protoMessageName(value.outputType)
|
|
|
+ }
|
|
|
+ throw TemplateSyntaxError("message: invalid argument \(String(describing:value))")
|
|
|
+ }
|
|
|
+ ext.registerFilter("fileDescriptorName") { (value: Any?) in
|
|
|
+ if let value = value as? SwiftProtobufPluginLibrary.FileDescriptor {
|
|
|
+ return value.name
|
|
|
+ }
|
|
|
+ throw TemplateSyntaxError("message: invalid argument \(String(describing:value))")
|
|
|
+ }
|
|
|
+ ext.registerFilter("methodDescriptorName") { (value: Any?) in
|
|
|
+ if let value = value as? SwiftProtobufPluginLibrary.MethodDescriptor {
|
|
|
+ return value.name
|
|
|
+ }
|
|
|
+ throw TemplateSyntaxError("message: invalid argument \(String(describing:value))")
|
|
|
+ }
|
|
|
+ ext.registerFilter("methodIsUnary") { (value: Any?) in
|
|
|
+ if let value = value as? SwiftProtobufPluginLibrary.MethodDescriptor {
|
|
|
+ return !value.proto.clientStreaming && !value.proto.serverStreaming
|
|
|
+ }
|
|
|
+ throw TemplateSyntaxError("message: invalid argument \(String(describing:value))")
|
|
|
+ }
|
|
|
+ ext.registerFilter("methodIsServerStreaming") { (value: Any?) in
|
|
|
+ if let value = value as? SwiftProtobufPluginLibrary.MethodDescriptor {
|
|
|
+ return !value.proto.clientStreaming && value.proto.serverStreaming
|
|
|
+ }
|
|
|
+ throw TemplateSyntaxError("message: invalid argument \(String(describing:value))")
|
|
|
+ }
|
|
|
+ ext.registerFilter("methodIsClientStreaming") { (value: Any?) in
|
|
|
+ if let value = value as? SwiftProtobufPluginLibrary.MethodDescriptor {
|
|
|
+ return value.proto.clientStreaming && !value.proto.serverStreaming
|
|
|
+ }
|
|
|
+ throw TemplateSyntaxError("message: invalid argument \(String(describing:value))")
|
|
|
+ }
|
|
|
+ ext.registerFilter("methodIsBidiStreaming") { (value: Any?) in
|
|
|
+ if let value = value as? SwiftProtobufPluginLibrary.MethodDescriptor {
|
|
|
+ return value.proto.clientStreaming && value.proto.serverStreaming
|
|
|
+ }
|
|
|
+ throw TemplateSyntaxError("message: invalid argument \(String(describing:value))")
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|