53 lines
958 B
Go
53 lines
958 B
Go
package stages
|
|
|
|
import (
|
|
"gitea.konchin.com/ytshih/inp2025/types"
|
|
"github.com/go-resty/resty/v2"
|
|
)
|
|
|
|
type BaseModel struct {
|
|
stack []types.Program
|
|
client *resty.Client
|
|
|
|
// after login
|
|
loginCount int
|
|
}
|
|
|
|
func NewBaseModel(
|
|
endpoint string,
|
|
) *BaseModel {
|
|
return &BaseModel{
|
|
stack: []types.Program{},
|
|
client: resty.New().
|
|
SetBaseURL(endpoint).
|
|
SetDisableWarn(true),
|
|
}
|
|
}
|
|
|
|
func (m *BaseModel) Size() int {
|
|
return len(m.stack)
|
|
}
|
|
|
|
func (m *BaseModel) Pop() types.Program {
|
|
stack := m.stack[:]
|
|
var ret types.Program
|
|
ret, stack = stack[len(stack)-1], stack[:len(stack)-1]
|
|
m.stack = stack
|
|
return ret
|
|
}
|
|
|
|
func (m *BaseModel) Push(program types.Program) error {
|
|
stack := m.stack[:]
|
|
for len(stack) > 0 && stack[len(stack)-1].Stage > program.Stage {
|
|
var p types.Program
|
|
p, stack = stack[len(stack)-1], stack[:len(stack)-1]
|
|
|
|
if err := p.Run(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
stack = append(stack, program)
|
|
m.stack = stack
|
|
return nil
|
|
}
|