Merge pull request 'go-vise-0.2.0' (#71) from go-vise-0.2.0 into master

Reviewed-on: urdt/ussd#71
This commit is contained in:
lash 2024-09-21 00:06:07 +02:00
commit 4439cc249a
8 changed files with 20 additions and 36 deletions

View File

@ -96,13 +96,7 @@ func main() {
en = en.WithDebug(nil) en = en.WithDebug(nil)
} }
_, err = en.Init(ctx) err = engine.Loop(ctx, en, os.Stdin, os.Stdout, nil)
if err != nil {
fmt.Fprintf(os.Stderr, "engine init exited with error: %v\n", err)
os.Exit(1)
}
err = engine.Loop(ctx, en, os.Stdin, os.Stdout)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "loop exited with error: %v\n", err) fmt.Fprintf(os.Stderr, "loop exited with error: %v\n", err)
os.Exit(1) os.Exit(1)

2
go.mod
View File

@ -3,7 +3,7 @@ module git.grassecon.net/urdt/ussd
go 1.22.6 go 1.22.6
require ( require (
git.defalsify.org/vise.git v0.1.0-rc.3.0.20240911231817-0d23e0dbb57f git.defalsify.org/vise.git v0.1.0-rc.3.0.20240920144308-b2d2c5f18f38
github.com/alecthomas/assert/v2 v2.2.2 github.com/alecthomas/assert/v2 v2.2.2
github.com/peteole/testdata-loader v0.3.0 github.com/peteole/testdata-loader v0.3.0
gopkg.in/leonelquinteros/gotext.v1 v1.3.1 gopkg.in/leonelquinteros/gotext.v1 v1.3.1

4
go.sum
View File

@ -1,5 +1,9 @@
git.defalsify.org/vise.git v0.1.0-rc.3.0.20240911231817-0d23e0dbb57f h1:CuJvG3NyMoRtHUim4aZdrfjjJBg2AId7z0yp7Q97bRM= git.defalsify.org/vise.git v0.1.0-rc.3.0.20240911231817-0d23e0dbb57f h1:CuJvG3NyMoRtHUim4aZdrfjjJBg2AId7z0yp7Q97bRM=
git.defalsify.org/vise.git v0.1.0-rc.3.0.20240911231817-0d23e0dbb57f/go.mod h1:JDguWmcoWBdsnpw7PUjVZAEpdC/ubBmjdUBy3tjP63M= git.defalsify.org/vise.git v0.1.0-rc.3.0.20240911231817-0d23e0dbb57f/go.mod h1:JDguWmcoWBdsnpw7PUjVZAEpdC/ubBmjdUBy3tjP63M=
git.defalsify.org/vise.git v0.1.0-rc.3.0.20240914163514-577f56f43bea h1:6ZYT+dIjd/f5vn9y5AJDZ7SQQckA6w5ZfUoKygyI11o=
git.defalsify.org/vise.git v0.1.0-rc.3.0.20240914163514-577f56f43bea/go.mod h1:JDguWmcoWBdsnpw7PUjVZAEpdC/ubBmjdUBy3tjP63M=
git.defalsify.org/vise.git v0.1.0-rc.3.0.20240920144308-b2d2c5f18f38 h1:4aAZijIcq33ixnZ+U48ckDIkwSfZL3St/CqoXZcC5K8=
git.defalsify.org/vise.git v0.1.0-rc.3.0.20240920144308-b2d2c5f18f38/go.mod h1:JDguWmcoWBdsnpw7PUjVZAEpdC/ubBmjdUBy3tjP63M=
github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk= github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk=
github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
github.com/alecthomas/participle/v2 v2.0.0 h1:Fgrq+MbuSsJwIkw3fEj9h75vDP0Er5JzepJ0/HNHv0g= github.com/alecthomas/participle/v2 v2.0.0 h1:Fgrq+MbuSsJwIkw3fEj9h75vDP0Er5JzepJ0/HNHv0g=

View File

@ -71,19 +71,7 @@ func(f *BaseSessionHandler) Process(rqs RequestSession) (RequestSession, error)
} }
rqs.Engine = en rqs.Engine = en
r, err = rqs.Engine.Init(rqs.Ctx) r, err = rqs.Engine.Exec(rqs.Ctx, rqs.Input)
if err != nil {
perr := f.provider.Put(rqs.Config.SessionId, rqs.Storage)
rqs.Storage = nil
if perr != nil {
logg.ErrorCtxf(rqs.Ctx, "", "storage put error", perr)
}
return rqs, err
}
if r && len(rqs.Input) > 0 {
r, err = rqs.Engine.Exec(rqs.Ctx, rqs.Input)
}
if err != nil { if err != nil {
perr := f.provider.Put(rqs.Config.SessionId, rqs.Storage) perr := f.provider.Put(rqs.Config.SessionId, rqs.Storage)
rqs.Storage = nil rqs.Storage = nil
@ -99,7 +87,7 @@ func(f *BaseSessionHandler) Process(rqs RequestSession) (RequestSession, error)
func(f *BaseSessionHandler) Output(rqs RequestSession) (RequestSession, error) { func(f *BaseSessionHandler) Output(rqs RequestSession) (RequestSession, error) {
var err error var err error
_, err = rqs.Engine.WriteResult(rqs.Ctx, rqs.Writer) _, err = rqs.Engine.Flush(rqs.Ctx, rqs.Writer)
return rqs, err return rqs, err
} }

View File

@ -37,8 +37,6 @@ type RequestSession struct {
Continue bool Continue bool
} }
type engineMaker func(cfg engine.Config, rs resource.Resource, pr *persist.Persister) engine.Engine
// TODO: seems like can remove this. // TODO: seems like can remove this.
type RequestParser interface { type RequestParser interface {
GetSessionId(rq any) (string, error) GetSessionId(rq any) (string, error)

View File

@ -87,6 +87,6 @@ func (ash *ATSessionHandler) Output(rqs handlers.RequestSession) (handlers.Reque
return rqs, err return rqs, err
} }
_, err = rqs.Engine.WriteResult(rqs.Ctx, rqs.Writer) _, err = rqs.Engine.Flush(rqs.Ctx, rqs.Writer)
return rqs, err return rqs, err
} }

View File

@ -69,7 +69,7 @@ func TestATSessionHandler_ServeHTTP(t *testing.T) {
mh.GetRequestParserFunc = func() handlers.RequestParser { return mrp } mh.GetRequestParserFunc = func() handlers.RequestParser { return mrp }
mh.OutputFunc = func(rs handlers.RequestSession) (handlers.RequestSession, error) { return rs, nil } mh.OutputFunc = func(rs handlers.RequestSession) (handlers.RequestSession, error) { return rs, nil }
mh.ResetFunc = func(rs handlers.RequestSession) (handlers.RequestSession, error) { return rs, nil } mh.ResetFunc = func(rs handlers.RequestSession) (handlers.RequestSession, error) { return rs, nil }
me.WriteResultFunc = func(context.Context, io.Writer) (int, error) { return 0, nil } me.FlushFunc = func(context.Context, io.Writer) (int, error) { return 0, nil }
}, },
formData: url.Values{ formData: url.Values{
"phoneNumber": []string{"+1234567890"}, "phoneNumber": []string{"+1234567890"},
@ -178,7 +178,7 @@ func TestATSessionHandler_Output(t *testing.T) {
input: handlers.RequestSession{ input: handlers.RequestSession{
Continue: true, Continue: true,
Engine: &httpmocks.MockEngine{ Engine: &httpmocks.MockEngine{
WriteResultFunc: func(context.Context, io.Writer) (int, error) { FlushFunc: func(context.Context, io.Writer) (int, error) {
return 0, nil return 0, nil
}, },
}, },
@ -192,7 +192,7 @@ func TestATSessionHandler_Output(t *testing.T) {
input: handlers.RequestSession{ input: handlers.RequestSession{
Continue: false, Continue: false,
Engine: &httpmocks.MockEngine{ Engine: &httpmocks.MockEngine{
WriteResultFunc: func(context.Context, io.Writer) (int, error) { FlushFunc: func(context.Context, io.Writer) (int, error) {
return 0, nil return 0, nil
}, },
}, },
@ -202,11 +202,11 @@ func TestATSessionHandler_Output(t *testing.T) {
expectedError: false, expectedError: false,
}, },
{ {
name: "WriteResult error", name: "Flush error",
input: handlers.RequestSession{ input: handlers.RequestSession{
Continue: true, Continue: true,
Engine: &httpmocks.MockEngine{ Engine: &httpmocks.MockEngine{
WriteResultFunc: func(context.Context, io.Writer) (int, error) { FlushFunc: func(context.Context, io.Writer) (int, error) {
return 0, errors.New("write error") return 0, errors.New("write error")
}, },
}, },

View File

@ -7,10 +7,10 @@ import (
// MockEngine implements the engine.Engine interface for testing // MockEngine implements the engine.Engine interface for testing
type MockEngine struct { type MockEngine struct {
InitFunc func(context.Context) (bool, error) InitFunc func(context.Context) (bool, error)
ExecFunc func(context.Context, []byte) (bool, error) ExecFunc func(context.Context, []byte) (bool, error)
WriteResultFunc func(context.Context, io.Writer) (int, error) FlushFunc func(context.Context, io.Writer) (int, error)
FinishFunc func() error FinishFunc func() error
} }
func (m *MockEngine) Init(ctx context.Context) (bool, error) { func (m *MockEngine) Init(ctx context.Context) (bool, error) {
@ -21,8 +21,8 @@ func (m *MockEngine) Exec(ctx context.Context, input []byte) (bool, error) {
return m.ExecFunc(ctx, input) return m.ExecFunc(ctx, input)
} }
func (m *MockEngine) WriteResult(ctx context.Context, w io.Writer) (int, error) { func (m *MockEngine) Flush(ctx context.Context, w io.Writer) (int, error) {
return m.WriteResultFunc(ctx, w) return m.FlushFunc(ctx, w)
} }
func (m *MockEngine) Finish() error { func (m *MockEngine) Finish() error {