1package shikaku23import (4 "encoding/json"5 "fmt"67 "github.com/FelineStateMachine/puzzletea/game"8)910// Save represents the serialized state of a Shikaku game.11type Save struct {12 Width int `json:"width"`13 Height int `json:"height"`14 Clues []Clue `json:"clues"`15 Rectangles []Rectangle `json:"rectangles"`16 ModeTitle string `json:"mode_title"`17}1819func (m Model) GetSave() ([]byte, error) {20 save := Save{21 Width: m.puzzle.Width,22 Height: m.puzzle.Height,23 Clues: m.puzzle.Clues,24 Rectangles: m.puzzle.Rectangles,25 ModeTitle: m.modeTitle,26 }27 data, err := json.Marshal(save)28 if err != nil {29 return nil, fmt.Errorf("failed to marshal shikaku save: %w", err)30 }31 return data, nil32}3334// ImportModel reconstructs a Model from saved JSON data.35func ImportModel(data []byte) (*Model, error) {36 var s Save37 if err := json.Unmarshal(data, &s); err != nil {38 return nil, fmt.Errorf("failed to unmarshal shikaku save: %w", err)39 }4041 p := Puzzle{42 Width: s.Width,43 Height: s.Height,44 Clues: s.Clues,45 Rectangles: s.Rectangles,46 }4748 return &Model{49 puzzle: p,50 cursor: game.Cursor{X: 0, Y: 0},51 keys: DefaultKeyMap,52 modeTitle: s.ModeTitle,53 }, nil54}