Миграция v2 -> v3
CLI#
Инициализация опций swipe#
v2
swipe gen --initv3
swipe initЗапуск генерации#
v2
swipe gen ./pkg/...или
swipe ./pkg/...v3
swipe gen ./pkg/...Файлы опций#
Файлы опции по-прежнему находятся в pkg/swipe, но в v3
появляются еще поддиректории, сейчас это gokit и config.
gokit и config это плагины Swipe.
gokit- плагин генерации транспорта с использованием GoKit.config- плагин генерации загрузчика настроек из переменных среды.
Если в версии импорт файла с опциями был yourepo/repo/name/pkg/swipe
то теперь он такой yourepo/repo/name/pkg/swipe/gokit или
yourepo/repo/name/pkg/swipe/gokit
Генерация HTTP транспорта#
v2
//+build swipe
package transport
import ( "github.com/examples/example/pkg/interface/controller" "github.com/examples/example/pkg/swipe")
func swipe() { swipe.Build( swipe.Service( swipe.HTTPServer(), swipe.JSONRPCEnable(), swipe.ClientsEnable([]string{"js"}), swipe.Interface((*controller.UserControllerIface)(nil), "user", gokit.ClientName("user")), swipe.Interface((*controller.TaskControllerIface)(nil), "task", gokit.ClientName("task")), swipe.MethodDefaultOptions( swipe.Logging(true), swipe.Instrumenting(true), ), ), )}v3
//+build swipe
package transport
import ( "github.com/examples/example/pkg/interface/controller" "github.com/examples/example/pkg/swipe/gokit")
func swipe() { gokit.Gokit( gokit.HTTPServer(), gokit.JSONRPCEnable(), gokit.ClientsEnable([]string{"js"}),
gokit.Interface((*controller.UserControllerIface)(nil), "user", gokit.ClientName("user")), gokit.Interface((*controller.TaskControllerIface)(nil), "task", gokit.ClientName("task")),
gokit.MethodDefaultOptions( gokit.Logging(true), gokit.Instrumenting(true), ), )}Генерация загрузчика настроек#
v2
// +build swipe
package example
import ( . "github.com/swipe-io/swipe/v2")
func Swipe() { swipe.Build( ConfigEnv(&Config{}), )}v3
// +build swipe
package config
import "gitlab.com/example/example/pkg/swipe/config"
func swipe() { config.Config( config.Environment( &Config{}, ), )}Генерация имени клиента#
В v3 изменилось поведение генерации имен клиентов,
теперь параметр ns в опции Interface не влияет на имя клиента,
для этого надо использовать опцию ClientName.
Имена сгенерированных файлов#
Изменились имена сгенерированных файлов, поэтому
лучше удалить старые файлы с _gen.