Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package queue
import (
"encoding/json"
"fmt"
"os"
)
type Queue struct {
Elements []string
FilePath string
}
func NewQueue(filePath string) (*Queue, error) {
q := &Queue{
Elements: make([]string, 0),
FilePath: filePath,
}
// Load state from file
if _, err := os.Stat(filePath); err == nil {
data, err := os.ReadFile(filePath)
if err != nil {
return nil, fmt.Errorf("error reading state file: %w", err)
}
if err := json.Unmarshal(data, &q.Elements); err != nil {
return nil, fmt.Errorf("error parsing state file: %w", err)
}
}
return q, nil
}
func (q *Queue) Enqueue(element string) {
q.Elements = append(q.Elements, element)
}
func (q *Queue) Dequeue() (string, error) {
if len(q.Elements) == 0 {
return "", fmt.Errorf("queue is empty")
}
element := q.Elements[0]
q.Elements = q.Elements[1:]
return element, nil
}
func (q *Queue) Save() error {
data, err := json.Marshal(q.Elements)
if err != nil {
return fmt.Errorf("error serializing state: %w", err)
}
if err := os.WriteFile(q.FilePath, data, 0644); err != nil {
return fmt.Errorf("error writing state to file: %w", err)
}
return nil
}