1package nonogram23import (4 "encoding/json"5 "fmt"6)78type Save struct {9 State string `json:"state"`10 Width int `json:"width"`11 Height int `json:"height"`12 RowHints TomographyDefinition `json:"row-hints"`13 ColHints TomographyDefinition `json:"col-hints"`14 ModeTitle string `json:"mode_title,omitempty"`15}1617func (m Model) GetSave() ([]byte, error) {18 save := Save{19 RowHints: m.rowHints,20 ColHints: m.colHints,21 State: m.grid.String(),22 Width: m.width,23 Height: m.height,24 ModeTitle: m.modeTitle,25 }26 jsonData, err := json.Marshal(save)27 if err != nil {28 return nil, fmt.Errorf("unable to marshal save data: %w", err)29 }30 return jsonData, nil31}3233func ImportModel(data []byte) (*Model, error) {34 var save Save35 if err := json.Unmarshal(data, &save); err != nil {36 return nil, err37 }38 g := newGrid(state(save.State))39 curr := generateTomography(g)40 return &Model{41 width: save.Width,42 height: save.Height,43 rowHints: save.RowHints,44 colHints: save.ColHints,45 grid: g,46 keys: DefaultKeyMap,47 modeTitle: save.ModeTitle,48 currentHints: curr,49 solved: curr.rows.equal(save.RowHints) && curr.cols.equal(save.ColHints),50 }, nil51}