Skip to content

Commit 729ca87

Browse files
authored
Merge pull request #45 from cocoide/feature/35-use-grpc-serve
gRPCのサーバを接続 / 設定情報をenumで定義
2 parents a07397b + 3bb264d commit 729ca87

File tree

14 files changed

+337
-191
lines changed

14 files changed

+337
-191
lines changed

cmd/config.go

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,24 @@ import (
66

77
"github.com/charmbracelet/bubbles/textinput"
88
tea "github.com/charmbracelet/bubbletea"
9-
"github.com/cocoide/commitify/util"
9+
"github.com/cocoide/commitify/internal/entity"
1010
"github.com/fatih/color"
1111
"github.com/spf13/cobra"
1212
)
1313

1414
var (
15-
configKey = [...]string{"api-key", "language", "format"}
16-
configOption = [][]string{
15+
configKey = [...]string{"api-key", "language", "format", "ai-source"}
16+
configOption = [][]int{
1717
{},
18-
{"Japanese", "English"},
19-
{"Format 1", "Format 2"},
18+
{int(entity.EN), int(entity.JP)},
19+
{int(entity.NormalFormat), int(entity.EmojiFormat), int(entity.PrefixFormat)},
20+
{int(entity.WrapServer), int(entity.OpenAiAPI)},
21+
}
22+
configOptionLabel = [][]string{
23+
{},
24+
{"English", "Japanese"},
25+
{"Normal Format", "Emoji Format", "PrefixFormat"},
26+
{"Wrap Server", "OpenAI API"},
2027
}
2128
)
2229

@@ -152,7 +159,7 @@ func (cm configModel) View() string {
152159
b.WriteString(white("設定内容を選んでください:\n"))
153160
b.WriteString(white(" ↑↓の矢印キーで項目を移動、Enterで選択\n"))
154161

155-
for i, option := range configOption[cm.configKeyIndex] {
162+
for i, option := range configOptionLabel[cm.configKeyIndex] {
156163
cyan := color.New(color.FgCyan).SprintFunc()
157164
hiCyan := color.New(color.FgHiCyan).SprintFunc()
158165
if i == cm.configOptionIndex {
@@ -182,7 +189,7 @@ func init() {
182189
}
183190

184191
func saveConfig(cm configModel) {
185-
currentConfig, err := util.ReadConfig()
192+
currentConfig, err := entity.ReadConfig()
186193
if err != nil {
187194
fmt.Println(err)
188195
}
@@ -194,9 +201,11 @@ func saveConfig(cm configModel) {
194201
currentConfig.UseLanguage = configOption[cm.configKeyIndex][cm.configOptionIndex]
195202
case 2:
196203
currentConfig.CommitFormat = configOption[cm.configKeyIndex][cm.configOptionIndex]
204+
case 3:
205+
currentConfig.AISource = configOption[cm.configKeyIndex][cm.configOptionIndex]
197206
}
198207

199-
err = util.WriteConfig(currentConfig)
208+
err = entity.WriteConfig(currentConfig)
200209
if err != nil {
201210
fmt.Println(err)
202211
}

cmd/suggest.go

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package cmd
22

33
import (
4-
"context"
54
"fmt"
5+
"log"
6+
"os"
67
"strings"
78

89
tea "github.com/charmbracelet/bubbletea"
10+
"github.com/cocoide/commitify/internal/entity"
911
"github.com/cocoide/commitify/internal/gateway"
10-
"github.com/cocoide/commitify/internal/service"
1112
"github.com/cocoide/commitify/util"
1213
"github.com/fatih/color"
1314
"github.com/spf13/cobra"
@@ -18,39 +19,35 @@ type model struct {
1819
currentIdx int
1920
errorMsg string
2021
isLoading bool
21-
messages []string
2222
}
2323

24-
type generateMessages struct {
25-
messages []string
26-
errorMsg string
27-
}
24+
func (m *model) Init() tea.Cmd {
25+
conf, err := entity.ReadConfig()
26+
if err != nil {
27+
log.Fatal("設定情報の取得に失敗: ", err)
28+
}
2829

29-
func (m model) Init() tea.Cmd {
30-
return func() tea.Msg {
31-
ctx := context.Background()
32-
og := gateway.NewOpenAIGateway(ctx)
33-
ms := service.NewMessageService(og)
34-
stagingCode := util.ExecGetStagingCode()
35-
messages, err := ms.GenerateCommitMessage(stagingCode)
36-
if err != nil {
37-
return generateMessages{errorMsg: "メッセージの生成に失敗: " + err.Error()}
38-
}
39-
return generateMessages{messages: messages}
30+
var gi gateway.GatewayInterface
31+
switch conf.AISource {
32+
case int(entity.WrapServer):
33+
gi = gateway.NewGrpcServeGateway()
34+
default:
35+
gi = gateway.NewGrpcServeGateway()
4036
}
37+
38+
messages, err := gi.FetchCommitMessages()
39+
if err != nil {
40+
log.Fatal("コミットメッセージの生成に失敗: ", err)
41+
os.Exit(-1)
42+
}
43+
m.choices = messages
44+
m.isLoading = false
45+
46+
return nil
4147
}
4248

43-
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
49+
func (m *model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
4450
switch msg := msg.(type) {
45-
case generateMessages:
46-
if msg.errorMsg != "" {
47-
m.errorMsg = msg.errorMsg
48-
m.isLoading = false
49-
return m, nil
50-
}
51-
m.choices = msg.messages
52-
m.isLoading = false
53-
return m, nil
5451
case tea.KeyMsg:
5552
switch msg.Type {
5653
case tea.KeyUp:
@@ -74,7 +71,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
7471
return m, nil
7572
}
7673

77-
func (m model) View() string {
74+
func (m *model) View() string {
7875
if m.errorMsg != "" {
7976
red := color.New(color.FgRed).SprintFunc()
8077
return fmt.Sprintf(red(m.errorMsg))
@@ -109,7 +106,7 @@ var suggestCmd = &cobra.Command{
109106
Aliases: []string{"s", "suggest"},
110107
Run: func(cmd *cobra.Command, args []string) {
111108
m := model{isLoading: true}
112-
p := tea.NewProgram(m)
109+
p := tea.NewProgram(&m)
113110
p.Run()
114111
},
115112
}

go.mod

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ require (
1010
github.com/sashabaranov/go-openai v1.15.1
1111
github.com/spf13/cobra v1.7.0
1212
github.com/spf13/viper v1.16.0
13-
google.golang.org/grpc v1.55.0
14-
google.golang.org/protobuf v1.30.0
13+
google.golang.org/grpc v1.58.0
14+
google.golang.org/protobuf v1.31.0
1515
)
1616

1717
require (
@@ -46,10 +46,10 @@ require (
4646
github.com/muesli/reflow v0.3.0 // indirect
4747
github.com/muesli/termenv v0.15.1 // indirect
4848
github.com/rivo/uniseg v0.2.0 // indirect
49-
golang.org/x/net v0.10.0 // indirect
50-
golang.org/x/sync v0.1.0 // indirect
51-
golang.org/x/sys v0.8.0 // indirect
52-
golang.org/x/term v0.8.0 // indirect
53-
golang.org/x/text v0.9.0 // indirect
54-
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
49+
golang.org/x/net v0.15.0 // indirect
50+
golang.org/x/sync v0.3.0 // indirect
51+
golang.org/x/sys v0.12.0 // indirect
52+
golang.org/x/term v0.12.0 // indirect
53+
golang.org/x/text v0.13.0 // indirect
54+
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
5555
)

go.sum

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -299,8 +299,8 @@ golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v
299299
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
300300
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
301301
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
302-
golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
303-
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
302+
golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8=
303+
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
304304
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
305305
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
306306
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -320,8 +320,8 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ
320320
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
321321
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
322322
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
323-
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
324-
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
323+
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
324+
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
325325
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
326326
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
327327
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -361,11 +361,11 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc
361361
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
362362
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
363363
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
364-
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
365-
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
364+
golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
365+
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
366366
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
367-
golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols=
368-
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
367+
golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU=
368+
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
369369
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
370370
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
371371
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -374,8 +374,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
374374
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
375375
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
376376
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
377-
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
378-
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
377+
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
378+
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
379379
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
380380
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
381381
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -492,8 +492,8 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D
492492
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
493493
google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
494494
google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
495-
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A=
496-
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU=
495+
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
496+
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
497497
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
498498
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
499499
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
@@ -510,8 +510,8 @@ google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM
510510
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
511511
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
512512
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
513-
google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag=
514-
google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8=
513+
google.golang.org/grpc v1.58.0 h1:32JY8YpPMSR45K+c3o6b8VL73V+rR8k+DeMIr4vRH8o=
514+
google.golang.org/grpc v1.58.0/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
515515
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
516516
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
517517
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -524,8 +524,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
524524
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
525525
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
526526
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
527-
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
528-
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
527+
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
528+
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
529529
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
530530
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
531531
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

internal/entity/config.go

Lines changed: 92 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,97 @@
11
package entity
22

3+
import (
4+
"encoding/json"
5+
"fmt"
6+
7+
pb "github.com/cocoide/commitify/pkg/grpc"
8+
"github.com/spf13/viper"
9+
)
10+
11+
type Language int
12+
13+
const (
14+
EN Language = iota
15+
JP
16+
)
17+
18+
type CodeFormat int
19+
20+
const (
21+
NormalFormat CodeFormat = iota
22+
EmojiFormat
23+
PrefixFormat
24+
)
25+
26+
type AISource int
27+
28+
const (
29+
WrapServer AISource = iota
30+
OpenAiAPI
31+
)
32+
333
type Config struct {
434
ChatGptApiKey string `json:"chatGptApiKey"`
5-
UseLanguage string `json:"UseLanguage"`
6-
CommitFormat string `json:"CommitFormat"`
35+
UseLanguage int `json:"UseLanguage"`
36+
CommitFormat int `json:"CommitFormat"`
37+
AISource int `json:"AISource"`
38+
}
39+
40+
func (c *Config) Config2PbVars() (pb.CodeFormatType, pb.LanguageType) {
41+
var codeFormatType pb.CodeFormatType
42+
switch c.CommitFormat {
43+
case int(EmojiFormat):
44+
codeFormatType = pb.CodeFormatType_EMOJI
45+
case int(PrefixFormat):
46+
codeFormatType = pb.CodeFormatType_PREFIX
47+
default:
48+
codeFormatType = pb.CodeFormatType_NORMAL
49+
}
50+
51+
var languageType pb.LanguageType
52+
switch c.UseLanguage {
53+
case int(JP):
54+
languageType = pb.LanguageType_JAPANESE
55+
default:
56+
languageType = pb.LanguageType_JAPANESE
57+
}
58+
59+
return codeFormatType, languageType
60+
}
61+
62+
func ReadConfig() (Config, error) {
63+
var result Config
64+
65+
viper.AddConfigPath(".")
66+
viper.SetConfigName("config")
67+
viper.SetConfigType("yaml")
68+
if err := viper.ReadInConfig(); err != nil {
69+
return result, fmt.Errorf("error reading config file, %s", err.Error())
70+
}
71+
if err := viper.Unmarshal(&result); err != nil {
72+
return result, fmt.Errorf("unable to decode into struct, %v", err.Error())
73+
}
74+
return result, nil
75+
}
76+
77+
func WriteConfig(config Config) error {
78+
viper.AddConfigPath(".")
79+
viper.SetConfigName("config")
80+
viper.SetConfigType("yaml")
81+
configMap := make(map[string]interface{})
82+
configBytes, err := json.Marshal(config)
83+
if err != nil {
84+
return fmt.Errorf("error marshalling config: %s", err.Error())
85+
}
86+
err = json.Unmarshal(configBytes, &configMap)
87+
if err != nil {
88+
return fmt.Errorf("error unmarshalling config: %s", err.Error())
89+
}
90+
if err := viper.MergeConfigMap(configMap); err != nil {
91+
return err
92+
}
93+
if err := viper.WriteConfig(); err != nil {
94+
return fmt.Errorf("error saving config file, %s", err.Error())
95+
}
96+
return nil
797
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package gateway
2+
3+
type GatewayInterface interface {
4+
FetchCommitMessages() ([]string, error)
5+
}

0 commit comments

Comments
 (0)