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 }