From e47d05b5dda621a7d06d2bda2426f25017735b41 Mon Sep 17 00:00:00 2001 From: veith Date: Tue, 14 Sep 2021 13:56:49 +0200 Subject: [PATCH] feat: configurable request type name suffix. --- .../content/docs/commands/furo_muSpec2Spec.md | 29 +++++++++++++++++-- docs/furo/content/docs/configuration.md | 1 + furo/cmd/root.go | 2 +- furo/flow_test.go | 4 +-- furo/init_test.go | 2 +- furo/installer_test.go | 2 +- .../genBundledServiceProto.go | 2 +- .../cmd/genServiceProtos/genServiceProtos.go | 2 +- furo/internal/cmd/spec2muSpec/associator.go | 3 +- .../cmd/spec2muSpec/serviceupdater.go | 2 +- furo/pkg/microservices/microservices.go | 2 +- furo/pkg/protoTemplates/sprig.go | 3 +- furo/pkged.go | 2 +- furo/spec2muSpec_test.go | 2 +- furo/template/.furo | 1 + furo/test/testdata/.furo | 1 + go.mod | 1 - vendor/modules.txt | 1 - 18 files changed, 45 insertions(+), 17 deletions(-) diff --git a/docs/furo/content/docs/commands/furo_muSpec2Spec.md b/docs/furo/content/docs/commands/furo_muSpec2Spec.md index 11f4cc4..59ce3f9 100644 --- a/docs/furo/content/docs/commands/furo_muSpec2Spec.md +++ b/docs/furo/content/docs/commands/furo_muSpec2Spec.md @@ -10,12 +10,37 @@ Updates or creates the specs with the definitions from the µSpecs. Renaming and restructuring your spec folder is ok, furo will always update the correct file. Also a reordering of the fields in your spec, to get nicer protos of for other reasons, is also ok. Furo works with a internal AST and is not interested in order or file names. -> if you have set the config option `muSpec.forceSync: true` in your furo config, -> the command will always enable the `-d` option. + +{{< hint warning >}} +**Attention:** +if you have set the config option `muSpec.forceSync: true` in your furo config, +the command will always enable the `-d` option. +{{< /hint >}} + Because the specs have a higher information density then the µSpecs, furo will fill in calculated default values on the first time it creates a spec file. Later calls of this command will not touch the prefilled fields of the spec. +### Config + +```yaml +muSpec: + types: # define a set of globs which matches your type definitions + - "./muspecs/**/*types.yaml" + - "./muspecs/*types.yaml" + services: # define a set of globs which matches your service definitions + - "./muspecs/**/*services.yaml" + - "./muspecs/*services.yaml" + goPackageBase: "github.com/yourname/sample-specs/dist/pb/" # this is used to prefix the go package option + javaPackagePrefix: "com.example.tutorial." + dir: "muspecs" # the folder where you save the µSpecs + forceSync: true # This will delete specs which are deleted in muSpec, this is very useful during prototyping + requestTypeSuffix: "Request" # Suffix for the generated request type specs + +``` + + + ### Options ``` diff --git a/docs/furo/content/docs/configuration.md b/docs/furo/content/docs/configuration.md index 36ed1aa..23bf31d 100644 --- a/docs/furo/content/docs/configuration.md +++ b/docs/furo/content/docs/configuration.md @@ -34,6 +34,7 @@ muSpec: javaPackagePrefix: "com.example.tutorial." dir: "muspecs" # the folder where you save the µSpecs forceSync: true # This will delete specs which are deleted in muSpec, this is very useful during prototyping + requestTypeSuffix: "Request" # Suffix for the generated request type specs commands: #camelCase is not allowed, command scripts can only be executed from a flow gen_transcoder: "./scripts/gprcgateway/generate.sh" # shell script to generate a half grpc gateway buf_generate: "./scripts/buf_generate.sh" diff --git a/furo/cmd/root.go b/furo/cmd/root.go index a80c019..48e7c56 100644 --- a/furo/cmd/root.go +++ b/furo/cmd/root.go @@ -50,7 +50,7 @@ Modify your default flow in the .furo config file to your needs. You can set any Run: func(cmd *cobra.Command, args []string) { runner.Run(cmd, args) }, - Version: "1.28.6", + Version: "1.29.0", } // Execute adds all child commands to the root command and sets flags appropriately. diff --git a/furo/flow_test.go b/furo/flow_test.go index c4ab93e..58e00f4 100644 --- a/furo/flow_test.go +++ b/furo/flow_test.go @@ -18,11 +18,11 @@ func TestRunCommand(t *testing.T) { rco.Execute() require.Equal(t, true, test.FileExist(path.Join(dir, ".furo"))) - require.Equal(t, "f4ba32ae7424570c4b7520432ce89e94", test.MustMd5Sum(path.Join(dir, ".furo"))) + require.Equal(t, "d8a9dbdca98179d9a7d3ebbdcb2c3fa8", test.MustMd5Sum(path.Join(dir, ".furo"))) err := test.CopyTestFile("test/testdata/.furo", path.Join(dir, ".furo")) require.NoError(t, err, "Must Copy .furo file") - require.Equal(t, "e7b51c770c547d672201af43e001a61f", test.MustMd5Sum(path.Join(dir, ".furo"))) + require.Equal(t, "8493075c067f312d3ffd760363e3e0f6", test.MustMd5Sum(path.Join(dir, ".furo"))) os.Args = []string{"cmd", "install"} rco.Execute() diff --git a/furo/init_test.go b/furo/init_test.go index bba6aac..ada6a85 100644 --- a/furo/init_test.go +++ b/furo/init_test.go @@ -18,6 +18,6 @@ func TestInitCommand(t *testing.T) { rco.Execute() require.Equal(t, true, test.FileExist(path.Join(dir, ".furo"))) - require.Equal(t, "f4ba32ae7424570c4b7520432ce89e94", test.MustMd5Sum(path.Join(dir, ".furo"))) + require.Equal(t, "d8a9dbdca98179d9a7d3ebbdcb2c3fa8", test.MustMd5Sum(path.Join(dir, ".furo"))) } diff --git a/furo/installer_test.go b/furo/installer_test.go index 780edda..74209df 100644 --- a/furo/installer_test.go +++ b/furo/installer_test.go @@ -18,7 +18,7 @@ func TestInstallCommand(t *testing.T) { rco.Execute() require.Equal(t, true, test.FileExist(path.Join(dir, ".furo"))) - require.Equal(t, "f4ba32ae7424570c4b7520432ce89e94", test.MustMd5Sum(path.Join(dir, ".furo"))) + require.Equal(t, "d8a9dbdca98179d9a7d3ebbdcb2c3fa8", test.MustMd5Sum(path.Join(dir, ".furo"))) os.Args = []string{"cmd", "install"} rco.Execute() diff --git a/furo/internal/cmd/genBundledServiceProto/genBundledServiceProto.go b/furo/internal/cmd/genBundledServiceProto/genBundledServiceProto.go index b3f591d..b889fc2 100644 --- a/furo/internal/cmd/genBundledServiceProto/genBundledServiceProto.go +++ b/furo/internal/cmd/genBundledServiceProto/genBundledServiceProto.go @@ -107,7 +107,7 @@ func Run(cmd *cobra.Command, args []string) { r, found := s.Services.Get("Update") if found { rpc := r.(*specSpec.Rpc) - reqType := protoTplDataServicelist[filepath].Package + "." + rpc.RpcName + "FuroGrpcRqst" + reqType := protoTplDataServicelist[filepath].Package + "." + rpc.RpcName + viper.GetString("muSpec.requestTypeSuffix") // Services.sampleservice.UpdateSampleRequest _, ok := Typelist.AllAvailabeTypes[reqType].TypeSpec.Fields.Get("update_mask") if ok { diff --git a/furo/internal/cmd/genServiceProtos/genServiceProtos.go b/furo/internal/cmd/genServiceProtos/genServiceProtos.go index 5b87ff2..1ab4821 100644 --- a/furo/internal/cmd/genServiceProtos/genServiceProtos.go +++ b/furo/internal/cmd/genServiceProtos/genServiceProtos.go @@ -94,7 +94,7 @@ func Run(cmd *cobra.Command, args []string) { r, found := s.Services.Get("Update") if found { rpc := r.(*specSpec.Rpc) - reqType := protoTplData[filepath].Package + "." + rpc.RpcName + "FuroGrpcRqst" + reqType := protoTplData[filepath].Package + "." + rpc.RpcName + viper.GetString("muSpec.requestTypeSuffix") // Services.sampleservice.UpdateSampleRequest _, ok := Typelist.AllAvailabeTypes[reqType].TypeSpec.Fields.Get("update_mask") if ok { diff --git a/furo/internal/cmd/spec2muSpec/associator.go b/furo/internal/cmd/spec2muSpec/associator.go index d5ebc63..2f53381 100644 --- a/furo/internal/cmd/spec2muSpec/associator.go +++ b/furo/internal/cmd/spec2muSpec/associator.go @@ -6,6 +6,7 @@ import ( "github.com/eclipse/eclipsefuro/furo/pkg/microservices" "github.com/eclipse/eclipsefuro/furo/pkg/microtypes" "github.com/eclipse/eclipsefuro/furo/pkg/specSpec" + "github.com/spf13/viper" "strings" ) @@ -37,7 +38,7 @@ func NewUTShadowList() UTShadowList { func (s *UTShadowList) AddTypeNode(fullTypeName string, ast *typeAst.TypeAst) *UTshadowNode { - if strings.HasSuffix(fullTypeName, "FuroGrpcRqst") { + if strings.HasSuffix(fullTypeName, viper.GetString("muSpec.requestTypeSuffix")) { return s.AddRequestTypeNode(ast) } diff --git a/furo/internal/cmd/spec2muSpec/serviceupdater.go b/furo/internal/cmd/spec2muSpec/serviceupdater.go index 808fffa..460c374 100644 --- a/furo/internal/cmd/spec2muSpec/serviceupdater.go +++ b/furo/internal/cmd/spec2muSpec/serviceupdater.go @@ -124,7 +124,7 @@ func updateAndStoreMicroServices(serviceItems map[string]*UTshadowNode) { func findRequestType(rpcName string, node *UTshadowNode) *typeAst.TypeAst { // node is in node.edgeRequestTypeNode array for _, n := range node.edgeRequestTypeNode { - if n.TypeSpec.Name == rpcName+"FuroGrpcRqst" { + if n.TypeSpec.Name == rpcName+viper.GetString("muSpec.requestTypeSuffix") { return n } } diff --git a/furo/pkg/microservices/microservices.go b/furo/pkg/microservices/microservices.go index 30be335..ff31947 100644 --- a/furo/pkg/microservices/microservices.go +++ b/furo/pkg/microservices/microservices.go @@ -179,7 +179,7 @@ func (l *MicroServiceList) UpateServicelist(servicelist *serviceAst.Servicelist, // maybe this is incorrect, if someone needs streams with query params if !strings.HasPrefix(targetRPC.Data.Request, "stream ") { requestType := µtypes.MicroType{ - Type: microServiceAst.Package + "." + targetRPC.RpcName + "FuroGrpcRqst #request message for " + targetRPC.RpcName, + Type: microServiceAst.Package + "." + targetRPC.RpcName + viper.GetString("muSpec.requestTypeSuffix") + " #request message for " + targetRPC.RpcName, Fields: fields, Target: "reqmsgs.proto", } diff --git a/furo/pkg/protoTemplates/sprig.go b/furo/pkg/protoTemplates/sprig.go index a3105fd..5171125 100644 --- a/furo/pkg/protoTemplates/sprig.go +++ b/furo/pkg/protoTemplates/sprig.go @@ -4,6 +4,7 @@ import ( "github.com/Masterminds/sprig" "github.com/eclipse/eclipsefuro/furo/pkg/orderedmap" "github.com/eclipse/eclipsefuro/furo/pkg/specSpec" + "github.com/spf13/viper" "html/template" "regexp" "strings" @@ -114,7 +115,7 @@ func rpcRequest(method *specSpec.Rpc) string { if strings.HasPrefix(method.Data.Request, "stream ") { return method.Data.Request } - return method.RpcName + "FuroGrpcRqst" + return method.RpcName + viper.GetString("muSpec.requestTypeSuffix") } func isNotStream(method *specSpec.Rpc) bool { diff --git a/furo/pkged.go b/furo/pkged.go index bb7a149..79d3e3f 100644 --- a/furo/pkged.go +++ b/furo/pkged.go @@ -10,4 +10,4 @@ import ( "github.com/markbates/pkger/pkging/mem" ) -var _ = pkger.Apply(mem.UnmarshalEmbed([]byte(`1f8b08000000000000ffec7dfd73aa48b3ffbfb2e5afdfdc7360107552757f10220841b3a2f232b79eda82c1203a201b40834fedfffead195e342f27c7ec49f6563d37b57bcaa83d6fdd3d9feee969da7f77a2e47e9775aeffdd09a37c5df8dff02efebec2244ab355f37a5f3cec28c54df4d0b9ee7c5f66ab87ecfb7e15e5ebefbf3fec362b9c67dff3f56aba7bc8f287dd2a7ed2eeaaa3c5e9ee21ffddcbd79deb9f8d72d5997af1aa73dd79fae1cd0e77ae3b9dabcec27b085779f5b7b9dbe57f673e132fc7ebcef5ff74be75fe75d599e71e5975aef3876255bf31575eb64b3ad79d6497ff162559ee11b20a7ef38bfc376fef45c4f3c9eab728f9cd2f2212fc863dbc5e75ae3aea4e89c82aa3fd06451c97dfc21dedbe5a7cd6b94e0a42ae3a37abb4fd7bb1caf2b6d5e9a3672d26bba0a013fc77e7520e4ebc286916f43745a6ee26bbe0dd0dbf87bb6ff12e60edadd54316312ef2dff86ee7afbffebaeadc574bfd99aa5d7f679de5ab38255ece964e9594be06abdc8b08eb23a9f4a4a5baea64d171d5b90683c15527de05f44fbedbef0eba7c97679ffc9147ac09e000ff5f1cfc2f9e5bf0c235275c03fe5b1f0eba7d4180ddffc7816b8eeb5c75a2ec8f8032afe26356b2416f56fbce35dfebf7fb00704c362bfa7ed0ef5f75a6244ab69d6b78d5d1925de79a870381e30430b8ea2ca3a0732d72fc5547a57fd19666407be2ae3abf7bc11f38dcfdc175aeff87bb62fffdebaa33a453cdd215a683cee90bdf1378d0e7071cb8ea4c33f609d7eb03a10bc5bfae3a931fd3f30d7dbbc4bfae3af23be9a5e8215fbfda863203c2764e9013785e0083bfae3af3933824b2c3db8cad5722db4a4e5d0ef6ae3a0af1c2ea0b7595b057234bbd8715fb7356ff4919f32fa641ebd5c317107d01d12f01d1552765f3ff77e7f76df80e4578864a7f5d75022ff71aee504d4df253afa7766cc87721def76f8dc5fd31ee7dab2757839e00b906f5ba807b0beec0b5d8ffd687b0dfeff541ef05dcdd7b24fb09de09024f37758d77fc09efba22ec89c287e25dbf3f68b00570a00b210fba6fe15d9f21718d5ff51adfc2bb1fd0ff18ef5eb401b007badc09ef98241ac01bfc2f02de7769243f07bd9356565fbe05672780aa34bcc6a75a419e02d439ec54d45f70f3a1705343420b3a1d9458a57fdc855a92f78d2de2710c6de4e847cf86c5bdc3459a3c0903754d34954ffd98e4ae7d0883d82a31207b3f92f62892e2c0d1f772ccefd1d8cad0a2ee8be804abf0e839e61e27e4ceb57942fb93134470324d7dd0ed69b20e2672f7606c466c1c4b5da7b894e83fce5397e7e3c4bea0852b1bf238928e58b536da582a7d90125798dd6241222e67a678b30bb5a8bb67ef8549d327d1c6d303b227218a49869c49e83a3ad1d480f8b155ba8e49902c713e1b931c3515ed7dd524384cd938660c4bdf56b8bb6818ad6c25f7652dd44ae9889c5918a883b0fa4cdae348fa130358c8b149b06a1548b50a1710828fbb5b4d1ee69aac279e630e11209c37b622239eeefd45ca79aa75e70bfa3118eb7b64737b260f4e5f63602de8f8b814138f8eb51915930d2e267336fe92f2c7b3f9832fe81c72b4d057e1de13e81a61a9a94ae6cbc33f6fa3c19f46628a585d168c27a5147bf623c1a554227bca533904f1b2e2914a72acc23250ad52531ff73ec8192f7024ad7df510de46bbfd6d241e91a303cf9e122379ca531c5b9b80ea8d83c80b1ed4b241aa7540b6b845b6b8f16ceb48e56357324dfd64cab9f66386ecd94b3a15953ee0425f307774adf55a0e38867f227bca69aa52a2b974741d446599fa51234b3365f35261b99aa57960b139f7e4681806637240cea447e780542bf66c9168ea28c4c0e23415c69a1a643ed08fda38d879f674a7a9fc3a50a73bbad65a0fb99523114d35098a49e13966ea03f148fbaee4ad1506e0f95a17f78c7f4c16d6d148c8dab70fd10f695fa1c3c02a83986c7e71ceadfcde37ef29c1094a5d70c9dc5fa74500ce5c7bfae0da0199c5caf12738b1472a3906323cb8d1a0c1a0061b780cacad3636f71403908dd2955ce105028310abcac6034a82e6d21e8fe9dabab79a2cfde93a68bd6cbeb3ea7637bb50a3fb702e9295aae4587d244662f2545f3c5bc98c48a36db79ea351acca0387eacff4a845c38d363677682ec53e78dc529d0cc09ae078c9f8ac8da76bbaaf186e4e6ef965c51bda57ec0bfa065953d18f273d6d6c9681bdacf733a1724be95e43aa9521c7ac716b7a264fa6e75b643f9240b5b69a4a0a4de5abfecbc3398f007274511b5b476423de97a56de0e8a91fe3108ff57da042aabbf4fdad0b60eedb4a81c654afa61bca7f7f345d63b00c3d6712fa31e4189ea85040f62cd3d4e9deb7f9b51fcf420ca6a5e7481c2ea58d6b77431f88d96a2e45682e91954af180616b8c6398533d45f1e33e38ec4286bd047238560a0ca67ba45a25c55723824757d0533c368f06080e389e26149f03a0880638e1b5914c77950ca63b643f66da78bac1313904158e27c816098e150ecda5b5a6aed7beea8648d00f6e29b5fd519d74132b76cefa7d39079d47049ef5271e3d99e94414d8e8de4df4b50748818eb5dd69f9019bef896be794cf050621db072e7824ae2dde57fa3decb1fd23d4f31f4ff6f5f7161e99291666ac1dd57fb3d689c63656ed5bfdbb65bc152a6ca3d8e03a561650fd1602a2a9d39d0fe011cd6fe4bcc2c0d0a5980d208f638a056b2e184bc7bb68b04731d9fab2c86cba9148a55fc2ad0fa6474398ee0347df201bc6c158e70335dc6ba57533892c79caf6c524779d49def4d9e203b5a5639db840e1903da3b630d4642ef49dcabe4d086bdb7efe843fc31ded2334e6d2c653ad8dc7d5366a7ca247c02a16b675c4f5bef605738f0f6d3b2abb458379cb4af74f58a73e93efec49bbfb60acaffd64baf101f5079e7ca760aef677666914d8244337d4ce339bc4f995cd0fb5b1b9c671408251ed9bc44ca6fb7a0f1e8d92d972cdb345ee2e92d6489d357b98eab1e80b56c9fc1cc1dcd3bdee82471ea94b8a719c4779a35ac7850db781fd48eeeaf905142380c599d42e2f4e63225b04469c56d8a530ec227e82521cc3c2b7ad82ea12f50d2a5cd50902e458f9021463ac8daf92030656a5174e40dc30dd7ace9463e3aa28f555eb7847fb56ada26a370afd4a47998f58fb1d0c37904aa8ffc1f9829e52db148075ea8230c460bd0fecc7ada652ff8c145830d7befa4831245acda53dc5531c9dec3e2e25c153ad8261b1b30d3d5b3c06ccf7697857e93ae5b7175b9b339d7c2287f6f31a6fdbf78aaecc96e6d49c8b396a757158301fed9092d5d8243ef365c56aed23658b6469e30331f6ec80a73a45fd685c3ef15f0f382680e20dd53fcfa6fb573f6aaa5220f9845dd427d45466538aca7e5a852398a56b8b471740bae77bd53ca9de9869a092bd1f2b9903da3dc2fc04cf766b9b641d291efac936746d51d4c6cc2fccb431d90773a940766d531b3f90d9542baf7dc0dabe2a1c7282f5aade2715cf2eb1e1f0e03afadab72deaabfe77e783c31c7e71ff2d5c25df4a2f266f473b9e50b6410f20fc2ce6c1c105dfbfa6ff0fbe09dd81c80ffa5df8a1310f41e8c21ef8c09807c7f5ba5c135f10fa5d51047dc8ff38e6c1713da18d91b46bfc71cce387f46fc43c9eb7e1211c74f953cc830ae22be4f115f2f8d890c7934d7f8a7cb4d185cd2e0c364a841c733d99a5077f6c25d4925416950bfd58c9a925456050597515f2d4b36ad1adb6bcbe20512b7e701d73878ffc915a201758f738b632d731e949bb8a04a8e2dab7973d4d0df6861d94589d7c74bfb4cffc395afb8245fb6156db10a4fa04474f49b39e3696d681ba3efeeed45e9e054b643fae03950034fbef4f41eccbd0fa09520b5df17d480df96e57e45f5ec6fd32527f6474fa0552f7f99e30b818a9eb355e8cd427fa7720759f17ba62b7456a26882fa4fe42ea8f47eacb50fafccc55fa0072b83973d133618da0ec2c269c9d159fc5150d10a481bae6dd48dcf88063e78b450c4b2c98a50facdc002c1e2ebbce94d4319cfd93be0f69c6ce6e14a9a97fbd38cd61b65516f3e5696c734b26a605270b3e5096042e165bc5302d7833b3a60af3ef9df506391277773a672a0b624d1d4efcdde194c962041dfa3a5f2a8bf67c3222d3e508ce2d05de2d7838b396fae47ccce548b99973cad8b4e0686ee9ca8c377f5f1272bf582acb1917be46b7982d79c5e14c7db9b56eac119cdba733f16cb69c1ab365a0389ca29a5b7237b74c24c77a896ce5c1b3c5e4353e581c999b16bc5d72f0eea3ad48ad916fda90566b6b0b02fb17de6f36e91cbd5e1ff0fd8fbedfec83fe07e773b4f9161074079c20b0bbc40bf339aa355e9ecfd1d2bf79bff92c0744e445ee74bfc904f16541be2cc8c75a907a8893fdf0ebf8d81b718a5b390ef6dacda8982c96b772a213ec58298e97e1ed70a73fb9af9bc30427d2c6b0ad8d2f4c452c98e4f459b00e544b709ded3ed86861b0d18a69d43dc821493cc7dc05b656b800e68660eed052dce364cae118d2f66ae0e87b76276235f17ef7d1d86882b119ddca76b0f74190a1b998f8e071edc7b8f0053d61f1f0a48e0d8edd83b1191613992b2737dae3e466564e372371720c8f539927ae3d11d00603d79e70778bd95b7dd2934375d778c4c584ad1fee117824461cec7d55295029ee718cf7553c1d6e7cbb8da3511e103fe213bfe4194faa750cdfeca76e1b05b65bdf71ba0dfdc103b8f0eceede056be282ac0836a38a46ee1e8c8576982cb687bbc5b09cdc8487e962581a8bd923da0c3974338ddc78f4389d0ff74629a57e5cdf030e77a91c7efc69262e28fc656f1ba286a8b14414e52e4a2f7c76a2e943d81dbcb447ef4d2f149e1d68ba1f7ba011da543e91e361b7d703c2e5079a6a89971f685afacb0f345014c1a07f3247541a5fd9855fd985ff69f6b0419dcfcc32acc7f89e79714a7e92665dd33420c8834b93ac9fa0a0c8038e87fdc12fa360f7190a8a9f85823db1db1500602875110a364bbc1405cfe8df8182fd81d0e58416059938be60f00b06ff4361b081a87f0e0dbfcfd9cbb76cf5b08ff02abb20eafd6a8b163079e1a7018ca750c9f5859e20081f1f02ef7d66081c02d87fe3819467d857aff162ac3cd15f8c9522c77507dd338fb192c45704e30baa3e13aa5ec78f5378c3984b856bf3e42e9216aecd1f7cd53ad629604d1a5b956a3d3e542159e5949e59a776ec5c5bdcfa2a2950d9f451a59cb4a9948b5d8841951ec95267eb14a3bb483a36639ed282ab9004a5f36d8bf354b83d0fcdfbf6aca7c9c184a50e45d2d8b466a1214cd7be2365682e253e80091dff2c2c5098367f08c6dbd0909bf196c5b29ecf0cc0cc57ad0d4b7f89869b656c7181a317b894d69afa98626116fac00d1b7a5c76933a7c1e6a63e5d084dbabf7233ab76330ae5225357e4a5c47df78b2f418d856b99a4b551acbfcac0f79c852a0832a8531c182597ab69868f254f5ec47969a8d1d8be0644bf959ba36f7a42d562bfeeac294c33195c170b35495c4b3c575b5a61f8e9d6b2abfa5639a952c9ef112f631e00ff77f83a7a62d729e638a9a3c9d23c7e4712c1eab34635220f04834a519e32d5e4e737cf3745d552abec257a9a9d21ac74acee864e918a82c05b54a5faf526b5354a58ead5f19af5dfb4cd04995ba29cd16fc74a9c9b0594fabb30669da0f334d453c8e07050624f16385ea0ac1a5a8f88ec4ad965611a8845bcd879ba65fa6476f8c6f39d2b619df7a9dff2ff8abc98797733b1bbbe95353954253ad2edd2b954e9df6a7a64892359a6a1a4b7357320c062116ac439dc2bfd50f8d2ca4477cd3ec3ff6fee83bc3677acef8fd4ccf185dc852f062f3789e06e6d9d59e72e7c3765f19113e1f83c7aab90e54ebdeb795a377dc853a68438ed5d519d0791489aa675b191af16b0cb250e34482ecf6718c83eb9874efad35963e0a4b24e3e73832aa52a1973d6d642a8b91b534e7c37dcb5b213ffa8e0435f5d5b12b99339d78f3fb4d937a4bf740b3deff0dfe7e52d8b2b134d5cbb7bc4c2f72535f92373e6a9f7ba78bca777bbcc87fec3384cc45fdc83bb6e72e6a8f077c1f5e7e9cafd678f971bea5bfdc45e5f9011460bf75519920be3cd42f0ff5533dd49740f0c43d654f49dd45d2c0a833095e98be269bb894246ddcba82ac1d736563427cd53c36ee85c7a01fffa98d6bd7e2b87bd4e4a9b5189191a62a476a2eaa1b3c6bdbd2b46e1fcb7f3bf8aa223aa0ce9793717ed657c9dc1e5bd9d64fb3b4f4757e5dd34fea1348904a38ea06b831dcfb37bba3264f9738b188360e76c8ee86ee5cdae258890359222b951c83f1a469cfb97670a46d6d9e0b1bb7f16e330b355e2758b5d6ec099f76fed4f4499cebe8097266bd139f6a9345cdd17097d759ddccfcbce1d62dbcca6d57fcc44c83f136798dcf485538b7724d9bb11af7a337990f37d553a1d4cc8f4217c0225095d44f2674cd2fc66ecc253d6678c284cecf77e6d593a3c6f631f5e3ac3789ea3e476bbaf6bdeb4c1afa86673972cc35e519cbc02fc5297bbf99841ac793803d61d4ba8f25a27203e211cd6bb7e127fc797e9478f23e9eeefdc45c7bb6487024099e4aa86bb2f3c1e396b988e3173c7a9da7950cd2ea293ec6831fcae96e330a3581ad85ba836bf6e4553587da1d7feeded6eb54293ff356b76a5e4d3c5b7cb8db684d9f1a75317da01c1b7afdb0fbf09bd10c3f4469fe939bd186a88d7141f0b72e05405f8060007ef952a0f7cc8bf8c8ca2b4f2e05ba10f2833eecbf91a9f3ccc2d74bbcd88b38d1bfc38b107b70d03dbb14a0e2f8ba14f8ba14f84ff3631adcf9ccdb807a8cef7e71ff87ffb0f2b651127ecbd63fcd7b7f42dc02a3783a5841e19283d500028efb9be9efa0c7fff060053ff36025f003fe1d07ab6a8d971fac5afa774062af2f0addde0912c5af83d5d7c1eab300e905589cce535a39da07ceb434809efa11247ee2866eac1cbde16e53850a67ac12811fd54f7a364ff7cb52ecda24c38794552e31ece5ad1c4dc23ab3aeae1a72cae4d6d4e9ceb5c5043993d0b3bb75d58041e8da01f33f0359ca5d9b14b48d6b8b1b6f98b20cbeb327de4363ceaf115058650f4dc6050284d3404d7fc3b3f6fae1e3b3f1ceb918ae92d58397af2e82dc73e2bf0db900f484bef0d209fd55c8ed739f09b9a2d08797436ebdc6cbbdd096fe72c8059c00f9eee00b72bf20f79f82dcf3fdff49901beb3c8ace0b940c73c391d6811a86babc8e3d5bdc3e2f4e6094c39c152b9a4b5b6d7c0891a0132cb78f7156052f4ae83b9119d0ef83b116eafc63a197c38cbe67c572e4e06894ddad510e92db4f789cb3e122262b2f59a6375196ff14719fd19e125cc47702aed81ff47bfcc7032eff9980dbeff2dd77006eb5c6cb01b7a57f07e00ab0df15cf8efdfcd7239e5f80fb6980fb6cfb5f84b7b738e642c3d1634deeee9f3de4b9bf0dd3d29f0f731cbba111c10a1f8192f9e3b38264e5eb7db8d1e04f39d1734de64b140d0b035418ec0b12f163e5e0cd077f7ec683230d33c2f401875ebe3a78e54f9e663c23fcd51c6aa12f723cf7ebe1d26739d4fd0f2e62f224879ae77addc1e57981f5122fc6cd13fd3b70b30f78c82e82bf72a8bfc2a5ff0790fb1c83fe89d0e9d978dfbd22df3dacc228cb570fdfc2ddb73cfd4996ca6b0d5ae0ec8b3f2d76fd0c32c51eec711f9fa8d2ffcc72223d2888dd8b0b3f356bbc1c335bfa776026e438c8aea5e66792f87236bf20ebd321eb550839799f67e5634fa54293bcafabd3bd1fa31495c3deeff361e10258a09824f70edf5f9566ea3bd21e276646bd4eed6607e929de1566e1bdc3dd36659a35b929b9a16f7c2072c859735ab8d3911094812d729ecd93ba4cf4e97171501773b2a77b2cb0928ca7cf9a024f730826113cf511eef49590e5da585ffb714034d96cf3b35931abf921d45baf78c9d6732a2f3c85f7b3babd6c1e3c10ecf1d83cb2358da7075f259c266b7d2d1a6edb3673f1dea92311460c0f2c6122991408c0fb337eb27e8d12527e3d9d8fc3433924fd55c9b172859eaa1ce7c01235f9195fcfe66390c1a3363eb0f2b4ec117e27efeb63e901017808c693c2392af07e3e8c5642b6c56a9ef882c4e152bc9f8c79a8d5c9182b21277e6cd279d5efd99aefebb592401e6e1bd955a52c874ffb9a0fa3b604b73d8b2a5de042648b5b3aa7f7caa02d5fa95adbe55379ec0dee4939cc5319e7315d777bc229da92064ede37e6e7f3a57a2b1db1fa9806f230ba2bb5f3f10b87af4f52a558974d168f461cec1d415abb205f23b00c4ffd4a298aa49deb4c0de46c43bd2d1d5ee5db3f95c328bc97a5c217cc46af9ef2d0e1a126eb5427ce657b60a5e2aba49ffe0a58051af3b07d5f72a1ae0cc2bb0d5795befe999ec87af33d41b20eef67e91339c973bdcd91470066ae2d26460c4b5456a51de87ed262910432dc0563f370d29f27f24d35f970e205d52159ac4b81e282ee75648bc7aa1ca8f8b2bc6c24fea08ce7b4d54fa7acf4b9d1b9d779b4bd95c3ddde28a50239c1b8c1306dac93606c95758256811c7c2ae739aff4a92e63cd4ab1d673cbea1c78cd52cc99a69222500721e2f5d9acecdea2c42adc52ba3b1fe7569d72abaa042ac33763cb9296c86a5c978e8ebbe16dccf0ab9881c714d9223703b0f0a34358e984e43b7620e084e5c3e7685e95ef454b9e5f8d6a6c89b6e12d2b593c2ce6aa5220f591e0e81022472f7d414bb571762b87240f9c90e9c839be1a5b91043cd37bb270aceead5ae9a91175539962710c4b4d19649aea56fa152b05d57d9be7e3c01637b76abb9e62c692deac6e201fe89a5e9f73f5dd2bebddd6f3d5fb7258e96333d6f3fd6cc86758bb607ad5ee7f2cf090daa74fd9ebf3c1fe2d7c7989b7e21cd9418a0593e0e4bcddb26870fe4c5eb767f87b6b94f0c94f009c95bbff401cadf87c36ef4ac6829479ce2cd4365974debf41e07d7df15950be367bd7e7e1a12965afd13d176ee97e7bc3ae3dc5a37b872b96b19550ac428efea49d118b6bdfb6e0fd72bdf66333438e9651f9b658e570e1eab0d3659bc49a6a953862b28eab7d77087dc7ea1ad5fe2b6e1719d3314d1e414d15535f96fa72b8d565a7c682482a3cfb90b17ec29d2e57fddf9e7d4ff750c6da0e53f80f45c0be5f7c69fbda852d18f4de777f20403800e06f16f37debfee0832baa3c39d3f57930102faf2550aff1f2335d4b7ff9994ee80b7d289cfd80d1a0f775a4fb3ad2fd1347ba1f5fdcba31290ca0af31086f65624acb6da05823535f6ef883079a2a56fce9a817f30f4825a526f3074d3697334b1f9b96399a5b1acb9761f9e94d75fcb1de3ca2b947f5a35b6766ab30c294e5b76baad565aedc4839dad5af050db4f134ad72b6f9b38aef5a6838e7bfaa01133cd63767c7bc75e0987bdc9a0ead406050046329d36ebaa1ae9cad2f7a95b6caf9892dfa5d8a92ed2d028310c53cf76cad7bd7b1385f38fd0a00750fe430252e58efe911f5e456d6f5829d09ab508f1cbd7a6ee1334cc5cf6b6c3dadb0d5eb5e7e2fc20daebbc27557f82676790006fd81f8cbf722e0fc073c415ffcc03472be070740682b6c3553fea13df831fdebf6e0c7f46ffd80e78fdacc5b697c5d8b7c5d8bfcc719a477d7d7aaf477f5a5c05f0afc6bbf84fdff010000ffff010000ffff859886f3757d0000`))) +var _ = pkger.Apply(mem.UnmarshalEmbed([]byte(`1f8b08000000000000ffec7dfb73b248b3ffbfb2e5afdf9c3c30803aa93a3f081184205951b9cca9b7b6b8184407648368f0adfddfbf35c345cd938bd927d953f59ed4ee5311e9b975f77cba67a6a7fd77274e1f3679e7e6df9d28de2e0bff3ad8243f16018eb37cd1fc7d281e3784e2367eecdc747eccf3c563fe63b788b7cb1fbf3f6e568b609bffd82e17c6e631df3e6e16c959b9ab8e9a649bc7edefde76d9b979af95ab8ee1258bce4de7fccbdb4dd0b9e974ae3a33ef315a6cabcfe666b3fd3bfd197bdb60d9b9f99fce75e75f579de9d6c38bcecdf6b158d40fe6c2cb3769e7a6936eb6bfc569bef5305e84bff9c5f6376fe7c5d8f3f1e2b738fdcd2f621cfe1678c172d1b9ea281b39c68b9cd41b1649525e471b527d35f8bc739316185f756e1759fb79b6c8b76da9e357cf4a8c3761413af8efcea51c1c7b71da0ce86f8a4cd98c37e1870bfe8836d7c926a4e5adc5631e532eb2d72cdff9ebafbfae3a0fd550df53b59b1fb4b2ed22c9b0b7a543274a4afe868bad17635a475ae9494b75d5c9e3c3a27303fafdab4eb209c94796eff17d9ee559facd1fdb9816010c60ff8b81ffc5f23396bbe1f91ba67fcd4156e809a0cfff3f06dc304ce7aa13e77f848479151ff392367abbd8756ed86eafd70380a1b25990e77eaf77d531709cae3b37f0aaa3a69bce0d0bfb1cc370a07fd599c761e74660d8ab8e423e919266486a62ae3abf7be11f41b4f983e9dcfc0f7345fffbd7556740ba9a678b80343a257fd82ec776590819e1aa63e4e41bd0eff66097ebf27f5d75c6afd1f7f97e43df0ef1afab8ef4417a317edc2e5f2c439801615386850cc7b21ce8ff75d5991ec521e24db0cee97845bcaee4c433b07bd591b117552f94454affea79e63d2ee8c749fd9130e65f5483968bc76f20fa06a25f02a2ab4e46fbffefceefebe8038af00c95febaea84ded66bb8433435dd1e6b3d96a34d7e08f17e5c3716f775dcbbae3b57831edfe51bd4e309bebc0f775c97e521f713dc3d78387f07ef388e2593bac63bf688777c17b00cffb978c7312dde015ee8f684fe07f0ae1ae3e578d7d2bf8e77a0c7b15cb729d3e37a0cd36779e6887754120de0f5ff1701ef8738949e83de512bab976fc1d911a02a0daff1a9569073803a859d8afa1b6e3e156e6a486841a78352abf40f9b484db73d7d8dd820813672b48367c3e2c16162551a47a1b2c4aac2667e82b7aebd8fc2c42a0380777e2cee502c26a1a3eda484dda19195a3595d17d670a0c083e798bb20c5f7aecd62529f94221ca446e603beab4a1a184bfc5e5f0d693b96b2cc825224ff184f999fb693f89c1a2d6cc806b17808146ba58ec4d2071976b9c95dc089d865cc2c586d2235e677f4991b3775627564ec913d8e508273e48c23d7d1b0aa84d84facd2754c8c2491f1699bf8a02a68e72b260ea28cb66326b0f46d99b98f07f1c296b7bea4466a291e90338942a51f55df89bb2016ff0c002ca4c4c481621548b10a17601c1c3677aa34d8aa92967a8e39400033dec88af5c4d8f9b38cf114ebdee7b44338d276c86676541e8cb60c803523ed07a5907aa4add5b018af82623ca5edcf097f3c9bddfb9cc620478d7c05ee3c8e8c1196aa22e7be34f8f32eeeffa9a7a61028f382f2a41413cf7ec2412996c8365822873099573c52f0365060192a56a92a4f3b1f6c292f82585cfaca3eba8b37bbbb58382047039e6d603d3de7699058ab90e88d83f04f3ca86583146b8f6c618d6c61e5d9d681c8c7ae649af9a9c1b8f6538eecc9cf740a2a7dc0443e676ec858ebb1ec8304fe896c835115b94453f1e03a88c832f3e346966646fba5c07231c9b6a145fbdc95e241148ef01e39e32ee90352acc4b305ac2ac3280016a32a30519530f781765047e1c6b38d8daab0cb50313664acb51e320b47c4aa626294e0c273cccc07c281d45dc95b2d74c0b2b52eee28ffa82cac839ee2a56fefe357695fa00b805586095efd629f5bf97dacdf060e5294b9e092bebf4c8b009cb8b6f1e8da219e24f2e11d9cd821051f4209eeddb8df6050830d6c00acb53a32770403908db28554e10502fd2850e49507e4144dc55d302263e3ef5449fcd375d072debcb3ea72b79b4825f3702ae085226f03e509eba9c9127df16c39d76395945d7b8e4ab06a1b3a447f8c831a0f56eac8dca0a998f8e0694d7432044b1c2473ca6775642cc9bca2b839be63e7156f485d89cf692b6419829f8cbbeac82c437b5ecf674ce49691b986142b478e59e39671224faae76b643fe150b1d6aa820b5561abfacbfd298f007234411d59076423d697c475e868999f045130d276a10289ee9267d2a71239328b1c83b1c89cb00c1625356f886c1c0b07dc84ca60ce59094a305fe342cd73ab408eb6a4fd19b5f4d5fc9a56581decb3950fd8ad6b0beb80d81a602c7ddbca27403ea029ed6fe1739388cc7f9f0b3192f6910be0d6b7e50249e2c1e5b42c189907553196c4e6f8c993a02a04c32d9ee058c58b0a235c2213057295ce5985c399a56b0b07174022a72ed557ce580509de87a3f10e7162e98290f49f739df5ee389e791180888e3b004b4ce41200a3f41c91a1ba77623fc81cf4143947b19806a9b85295b63ec2df38b4d1c349bd3ff5c14dadc401c7faf4d4d8a8d12652158d4518c641223f7ab690121ba4c7b0e5870e9af7d6d203b840a570f024aab32b5fb1963e866bcf3118f5b6b68b75ff8312d6efadbd49e7192d47f47058ebd6a1d6efaafcd12652de56368de8215a86f613b18dab10cc23172c773e671c75be149741291e7cce2a5d308fbc91c904a371572f61e2d966ae27c4dfe81744277560ee087e0400b24162601f2026482dc693fa2b6d3e2eb5b95a614cc92e83926dea24b635522586da0c82f5d49e0f36049b227d2a36985fd2feecdbefcff8d36219c14adb789cd6763538d2a7c8160ce41807825ff36a0e1d3193e8026e716f122490f1e97caffaf65cbee7e5201324721100638714ab3c7bb7b60e331bae43fb094b89c67af6d3fa9ee805f17d3873473f4b832824b8002cc654704974a4c1ceba1f3b8a57c365e6a793aeaac86b24d5f6916228de85c4a6d231f523cf1656fec85aa3a9b8771d7343e79163183e30595f9977abfe898ceb6829724c85f813276d623f750b2f3df1bd14ab08135cfa40d8225b20ba94f9c4b753fac4674809ff097e7a361f21dbc83d47a4981524fd6d08ac584acc2ce026b4dddad7a8ec9f2dd072ee54cc2b1d25f68fd44dfc058a1b6bcfd1b0cb99bb20c1c4e7e13c05af3c493c780a647d6512b909f1a1844348fc258a219aa02a90f864e5d1bf3429fe229ba778be981e7d95967767fec8f84427cfe4d07e1fb4f6a07a9eaf2dd11cb2b29eb0eba35d156abfdae243c52aa81f9c56639fd8e65a558c9d9fa00c7154a7a80daf7159207383f4df7310c11ba27f199dbfe93822187c825d3bf21d192f9a523b49f4fc211c694b3f35563e3071b0da54fd247aa36086ac0b5cfbe9a1f13d299e97628668bbf32874886f21178ba9b8f4d3756d07f6955d54044cfcbb4acfaaf214676ca6f25b2bcc49c91c09812cd4bca03c5a7079314facbdcf1919f5e7e602b121f0615acd619d13639d3396be23e668f2dfffddf9e4ad14bf78b88e16e975e925f8ed1d9533ca76630570efedab3070c6f66ec8fffd6b8eef0b6cbfc7c34fdd57e1381e76c1e7edab0086e9f2edbe0ad7e30501f420fbeabe0aa1e78efb24cd185fdd57799dfe8d7d95e7655808fb3c7bdc572182f8de56f9de56f9dc6d95b3497fdc5d697730569b285cc93172cce57892edfd919512cb53597026f213794b564408f46bb4856c78bb692d885b5b7a9f1399fbb8b2ccc1a1f182ac8720b1726205c2645eed3628041de75d550977ba1d968132feec7a499d5b04640639e1723169eab1483d2d22d7dec22e184dbaea485c86caf2f0bb63ec4287ac826089eca765a860f055887d195a9f2135c70b1f436ac8f2bcc0fe7ce0f7cb48cd7d2552f7d82ed7bf18a9eb315e8cd447fa0f20758fe578816f919a0ae21ba9bf91faf391fa32948e431be7e896ae754b1f40a6decb7dd3b77fbe77a983300b9525ebc6c2ca07cc8eac2166092c03ce2c7d606d7540f7dc25d73170bd4fb43bab7b9fe59e2d30d5bacf3aa0d9b10f93b53c9bce8f6d9b6b3c362d389eb1a13cc770365bcbba69c1db8965c8d53a6eb9428ec834eb467d2aca336c190e23fcee30f27836840ef93b9dcbb3761d32c4c67c08a7960cef672c9c58736d7cdae67c28df4e1979645a7038b53479c29abfcf317e98cde5f984895ea29b4de6acec30a6365f5bb7d6104eed49db9fc9646ee89379283b8cac986b7c3fb54c24255a89ec7a0fe4053e580c9e9a16bc9b33f0feb3ad48ad916fda90566b6b0b027bef9ea1323396bb61b81bc05ef760bfdbed01b6f7b967a802ec81de275a901edb27b554680d01df67388e9e57be6241cee8db31be6e415ea57feb0cf559195e6005e678864a05f16d41be2dc8e75a90ba89a3fdf0eb3d3a75f4ea79c69d94843bf576588c67f33b29a5fbe45990cca3bbc1463b3b139c42ba87acdbd6cae70c21e04c7cfceeb84f1daed4285ca98511f37b29c2a9e7989bd0560b17c0adce991b341776416a30410249792574b41d3d77b19a3305f7495fa99cbe1ade4976b8f34198a3a990fae069e92741e1735aaa8310fb69b5d7a88edcbdbe1a14638929c7b7ead3f876521aaba1303e44074362b16b8f39b40a806b8f99fbd9e4ad3ac9caa13acf3c04c5988e1fee1078c27a12ee7c452e5029ec8224d8214edbbb255cf9f664579f5b101e603f6653bf64abbd763a8ec19bf5d465e3d076eb7354b7a1df7b20283c9bdfb960895d9017e16a58d148fc5e9fa9fbf16cbdbf9f0dcaf16db4376683529f4d9ed06ac0a05b237693e193311decf452ccfca43e6b1c6c3229fafcd54c5210f8cbdf36440d51638908ca5d14c2f86c45d38390efff6c8f3e1ac2c83d5bd07c62480f5d3cb4e18202c342bedb05dce50b9a6a88972f685afacb1734501040bf773447441adf118cdf118cff69f6b0419daf8c64acdbf8917b4986df09e5ae691a1064c1a581dc672828b0806161afffcb28c83f4341e1ab50b02bf03c070045a98b50b019e2a5287842ff0114ecf5399ee15a14a4e2f886c16f18fc0f85c106a2fe3934fc31a57faef3c5e32e0e16f905bbde2f96680193e5deddc038874aa6c77539ee7383c0295676bf720b1c02d8132ec6ca7a8c1763e591fe62ac141886eff3271e632589ef1d8c6fa8fa4aa87a193f8edb1bfa542c5c9bc5f7b138736d76ef2b160d7d428ad584a255e1dca37db5252b1f4340eb90948d6b0b6b5fc1052a9b3ae6050d6b6d4232679b28005508260dcfad439aee63f1d0b4790c3daeb624089d6f5b8ca7c0f5e9d6bc6f4fbaaa148e3dc720e547a63589dad090a998fa00a6a4fd936d81c2b4d97d385a47bad4b4372fe6757f2600e6be62ad4205effc78b09a2716133a5a1194e252559eb2809b443e70a3863e28f9b40d5d19c9fb66bbbd7a1e92be1dc251158ea9b206761d6de549e253685be582865d694b7f7a528754853e858a55dec78334e0ccd2b38554950cc5b39f6818140dbb4cd7849fa56b33676503a5e2afc6194c9010190c5673454e3d5b5856637ab5edadaab06bd2a659c9e2192f612f00ecfee16ff0d4b405c6734c41958c29724c3648844315ca8c0b049eb02a376dbcc54b631bdc9e8fab0af797d92afc555c0689bca57492780815b940a3f169a85186247a8561f9427bedd8279c865dc724fa3f99b1c65c9560339e566775dc941fe4aa528735029cfa894c740507a520fb8ec82ce656112a98594c07aba65eaa476fb46f39e2ba69df7a99ff3ff15795f63ff7eda4eda64e55910b55b17832572a9d3ace4f5516456b68a82a0da597f300f4a380b3f6f53581b5b66f64213e05b7cdfca3cf07df193cd373caef677a46e9a28033977e621e4ec38a3dbb9a53ee74d0ce2b3d0e4edb6003c55c868af5e0dbf2c13b6c220db45b8ed5d119d058140b8a675b391ab2cb00e491ca0818d9ed958fbdeb9864ee2dd591865d004b2405cf71a40e899d77d5a129cf86d6dc9c0e762d6fb9edc17744a82a2fb65dc99ceac49bef576613f2ad0cdbf1fe6ff0f78bb62d1b4b53fdb9de96d9456eeacfe48d8fda633ee8a2b27c9715d8eee7bba89f79c6f6dc45edb280edc1cb97f3d5182f5fceb7f497bba82cdb871cecb52e2a15c4b787faeda17ea987fa33109cb9a7f426d67d2cf6f53a92e027d3577faf96a2a88e5a579096ab23cbb1af9887c6bdf028f4077faaa3dab5386c9e54c9b066433c5415f950df74c982c45ab734addb47e3dff6be220b0ea8e3e5a4607b525749dd1e5b5efb40c817d3237d1d5fd7d493f91862a46086b8016e0277feede6a04ac63c482ddc44a5bb53711d2472124a225e28f8108ec6691ba56f870752d66699a8711bef57934865351c28567d6ba7e93fbd0d5447f64fba473ed5268b98a3c166ab8ee88d426a7ede70eb665ee5b6cb7e6a66e1689dbec467a4c88c5bb9a64d5b8dfbd11d4f07abeae62931f3c3c805b0081539f3d33119f34f6d37e6922c333c6e4cfae73bd3ea76aabe7ecafc24ef8ee3bacee1928c7de73ae386bee1d91639e692f08cdec42c05833eafc691cab098f4e3c47d2c11911b100e685abb0deff0e7f952e2ec3931767e6a2e3d5bc041dcde56d8f8e0694d5dc4d14f3c7a99a7950cb2eaa604e5c1ab72ba5f0d2395ab6efab88eb9a4b70aaa3ed4eef873f7b61ea742f8b96d75abe6d5d8b385c7fb95dad4a91217d307f2a1a1d7f69b4f3f19cd83c738dbbe7332da10b57b5c10fcad4301d0e320e8835f3e14e83ef3223e31bbcbf9a1000f21dbefc1de1b913acf2c7c3dc48bbd8823fd07bc08a10bfbfcc9a10011c7f7a1c0f7a1c07f9a1fd3e0ce579e06d46dfcf08b873ffcc785b78ed3e83a5fbe1bf77e46dc02a3705c5841ee9285551f0286f99be1efa0cbbebab0825fb9b0e2d83efb81855535c6cb17562dfd0720b1db1338be7b8444e17b61f5bdb0fa2a40fa092c8eeb29b51cee42c72875a0657e4c6ff4466e221fbcc166556d154e68b6033fae6e789edcd44f5c1be7c13ea3d951747b7e27c5e3a88eacab33931c23b955c5d8b8b69022674c6fff3637905d3ba4fe6728895bd7c60529e3dac2ca1b643482cf4d35ecda5bbaeda54fd9250232bd91ab4a418100665450d3dfb2b4bcb6fffc68bc532e468b74f1e86d171741ee29f1df865c00ba5c8ffbd909fd55c8ed315f09b902d78397436e3dc6cbbdd096fe72c8050c0759beff0db9df90fb4f41eee9fcff22c84d3416c5f4223f0e129941d3c15677c465a84491262d138f2600a049159ac0e8835e0eb675c296b53ada4788d37020b5d738e9696b5042df89cd90bc0f476aa4b14f85560e72f24c13f248e1412ff9b55ef6d3bb2fb8ced97031c00b2f9d67b771be7d17719fd11e035c840f02aed0ebf7baece7032efb9580dbe359fe03805b8df172c06de93f00b81cecf1c2c9b29ffdbee2f90db85f06b8cfa6ff45787b17244ca43b5aa24afcee79229dbb282bfde9601b246ea4c775e21120e7fee824e959f9721d6edcff534ab5ad2ab1258a07850e2a0cf63911fb89bcf7a6fd3fbfe2e248c38c287b0c226fbbd87be53bb7194f087f35869aeb090ccbfcfa76e9b318eade272731398ba166992edfbf3c2eb01ee2c5b879a4ff006ef6000be941f0770cf5f776e9ff01e43ec5a07f62ebf4a4bd1f5eb1dd3c2ea238df2e1eafa3cdf5367b274ae5a5022d70f604e663812a9cd0855de6f303557a5f994ea40b3981bf38f15333c6cb31b3a5ff0066428681f4586a7a22896f67f31bb2be1cb25e8490a3f77992a2f698ea2eddf6b426a55f39e8fe3e1d142e80054a70fae0b0bd456966be23ee82d4cceb949e90ace25d6e123d38cc5d9b4e4f6a526e682b1f080c72968c1a6d34c48565680b8c67b3b84e457dbc2e0eea644eb6b10b387c0815ebf85d93e0690ac13886c73aa28db6e0f2ad3ad2967e12625532dbf86c9acc6aba8fb4d62b9ed3f11c53181bf061529797ccbd07c21d4def4ac63432f6be821955527b6a3c58b765a6c28353ef44e809dcd38089745c20001f4ef849ebd54b48f875de1f878552847b8b92893cdb8d3c453e4c8125a8d233be9ef447c7fd2775b48ffc0432f40abfb3ed6923f11101b80f47e3c239c8f0613a88175cbe0e946dea73221394c2c378c442b50ec658705bec2726e957fd4cc7fc508f1587d260ddc8cea72b85c1795dd341dca6f9b62771a50b4c846c614dfaf451199ca6bb9c9fcb63a733b8a0b1a2ca1346d249aae8111977bbc229da9406ceb6a74f4ffb4bf4563c04ca53164a83f8be544fdb2f1cb65e4995429d9a5938e849b8733871e982ed12817974ac97a694dcb88ea123671d696d7af22adefe5c0ec3e841120b9f331bbd3ae7a1c34255d2884e9cca764fd3d157413fbd05b00a346261fb5c329126f7a3fb1553a5d77e4f4f24ad798f91a4c1874976262769aab531f208c0dcb585544f6089ca2ab503994f6a22e050829b7064ee8ffa7326df4c95f6475e101d920432cf13cf0e0a32d7912dd0d4fd4129fc9cca3316964831b32ad848ce1d50d733325afd74ca4a9f1b9d7b9947eb3b29daecf4522c90138e1a0c53471a0e475659076815c809a2237e54fa54a7cace5c104575dff23a065eb56473a22ab808957e84586d3229f93b945a855b8af7a7eddc2906b390c416dff4350d5ac28bd124afd2a2f2d15d42f1ab9880a70cd9023301b0f0e37d54e984e83b76c805298d87dfa2a930a37d9bb3ec6258634bbc8eee9425138e06c554910ba43ce120de47c8d14a9f53337594df4911de864e4475e4145ff5b5804396ea3d9e39167fa7547aaac77c26112c4e60a9cafd5c55dc4abf12b920ba6fb36c12dac2ea4e69c7534c68d09bc587d29e8ce9e53e57ef5e18efbaeeafd693a24a1f9bb69ecf675d3ac1da19d5ab76fe071c0b897dfa92b93eedefdec2979ff15698223bcc02cec4417a5a6e5e34387f22afbb13fcbdd34b78f633032729f53f11472b3e9ff4bb923127e69e3389d4551e9fd6af63f8501f7c1684afcddcf559b86fd2e5ab64ce456b32dfdeb06be778f4e030c5bc4dafac9d95d3933a75ee7cb9f41333478e9a13f9b658e530d162bfd1241b27aa6295414c659d54f36e1ff98ec5ebd5fc2bee6639d531551a425511325f127b52b4d624a7c682582c3c7b9fd37aa28d2655f5df9dbc277328a7650719fc8776c07e5c7c68fbd2812de8773f767ec041d807e06f26f37debfce09333aa9cade97a2ce80b97e712a8c778f99aaea5bf7c4dc7f5b81ee44e7e24a9dffd5ed27d2fe9fe8925ddeb07b76e820b1d68cb0044771236c5f93a94ada1a9cd57ecde034d162bf6b8d44bd847a4e05295d8bd2a99f389a58d4ccb1c4e2d95c6cbd0f8f4918611c007e222d5573477a8beba7562b60a3dca687cbbaa583c75e586f2c1ae7e91a8af8e8cac8ad966dbc3609f5323dd994427bf049106236d75b2cc5b868eb93bc9cc5f20d02fc29198abb77ca4c927e38b5fa4ad627e128bbccb50babe43a01fa184659e8d75e73a16e373f53815ab24ee811465d805cb1d59a21eddca3a5fb0333effb591af3015efe7d83acfb075fcb9bcf7cf4598fe0dcfddf0dcb5c0b300f47b7de197cf45c0e98f84829ef08961e46c17f601d766d86abafcaa3d789dfe657bf03afd5b3f12fa5a99692b8def6391ef6391ff3883f4e1fc5a95fe2ebe15f85b817fedd7b6ff3f000000ffff010000ffff368adb0ad97d0000`))) diff --git a/furo/spec2muSpec_test.go b/furo/spec2muSpec_test.go index 7deec9d..d8003d6 100644 --- a/furo/spec2muSpec_test.go +++ b/furo/spec2muSpec_test.go @@ -50,6 +50,6 @@ func TestSpec2muSpecCommand(t *testing.T) { require.Equal(t, "83f97c7fd66d5b9fd34069e075810a80", test.MustMd5Sum(path.Join(dir, "muspecs", "sample", "Sample.types.yaml"))) require.Equal(t, "102b3562851cc4bac750b6d409344f6e", test.MustMd5Sum(path.Join(dir, "muspecs", "sample", "SampleCollection.types.yaml"))) require.Equal(t, "cecdceb48471dc1b2ebc958ce30e97bb", test.MustMd5Sum(path.Join(dir, "muspecs", "sample", "SampleEntity.types.yaml"))) - require.Equal(t, "c7e54a185c29003ba0aad3ccd9bdb684", test.MustMd5Sum(path.Join(dir, "muspecs", "sample", "Samples.services.yaml"))) + require.Equal(t, "32ab721229ebbea7fe4fc42bc4a34a1a", test.MustMd5Sum(path.Join(dir, "muspecs", "sample", "Samples.services.yaml"))) } diff --git a/furo/template/.furo b/furo/template/.furo index 341846b..6c1c78c 100644 --- a/furo/template/.furo +++ b/furo/template/.furo @@ -17,6 +17,7 @@ muSpec: javaPackagePrefix: "com.example.tutorial." dir: "muspecs" # the folder where you save the µSpecs forceSync: true # This will delete specs which are deleted in muSpec, this is very useful during prototyping + requestTypeSuffix: "Request" # Suffix for the generated request type specs commands: #camelCase is not allowed, command scripts can only be executed from a flow gen_transcoder: "./scripts/gprcgateway/generate.sh" # shell script to generate a half grpc gateway buf_generate: "./scripts/buf_generate.sh" diff --git a/furo/test/testdata/.furo b/furo/test/testdata/.furo index 6972705..33f90e8 100644 --- a/furo/test/testdata/.furo +++ b/furo/test/testdata/.furo @@ -17,6 +17,7 @@ muSpec: javaPackagePrefix: "com.example.tutorial." dir: "muspecs" # the folder where you save the µSpecs forceSync: true # This will delete specs which are deleted in muSpec, this is very useful during prototyping + requestTypeSuffix: "Request" # Suffix for the generated request type specs commands: #camelCase is not allowed, command scripts can only be executed from a flow clean_dist : "./scripts/cleanUpDist.sh" # Deletes the dist folder flows: diff --git a/go.mod b/go.mod index fe88659..c1828cc 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,6 @@ require ( github.com/Masterminds/goutils v1.1.0 // indirect github.com/Masterminds/semver v1.5.0 // indirect github.com/Masterminds/sprig v2.22.0+incompatible - github.com/fsnotify/fsnotify v1.4.7 github.com/google/uuid v1.1.2 // indirect github.com/huandu/xstrings v1.3.2 // indirect github.com/imdario/mergo v0.3.11 // indirect diff --git a/vendor/modules.txt b/vendor/modules.txt index 27f4998..bb4dc96 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -12,7 +12,6 @@ github.com/cpuguy83/go-md2man/v2/md2man # github.com/davecgh/go-spew v1.1.1 github.com/davecgh/go-spew/spew # github.com/fsnotify/fsnotify v1.4.7 -## explicit github.com/fsnotify/fsnotify # github.com/gobuffalo/here v0.6.0 github.com/gobuffalo/here