diff --git a/encoding/encoding.go b/encoding/encoding.go index 7592e24..e999c83 100644 --- a/encoding/encoding.go +++ b/encoding/encoding.go @@ -1,7 +1,13 @@ package encoding import ( + "encoding/json" + "fmt" + "io" + "os" + "github.com/Yandex-Practicum/final-project-encoding-go/models" + "gopkg.in/yaml.v3" ) // JSONData тип для перекодирования из JSON в YAML @@ -26,7 +32,37 @@ type MyEncoder interface { // Encoding перекодирует файл из JSON в YAML func (j *JSONData) Encoding() error { // ниже реализуйте метод - // ... + var dockerCompose models.DockerCompose + + jsonFile, err := os.Open(j.FileInput) + + if err != nil { + return fmt.Errorf("open file: %w", err) + } + jsonData, err := io.ReadAll(jsonFile) + + jsonFile.Close() + + if err != nil { + return fmt.Errorf("read file: %w", err) + } + if err = json.Unmarshal(jsonData, &dockerCompose); err != nil { + return fmt.Errorf("unmarshal: %w", err) + } + yamlData, err := yaml.Marshal(&dockerCompose) + if err != nil { + return fmt.Errorf("marshal: %w", err) + } + yamlFile, err := os.Create(j.FileOutput) + if err != nil { + return fmt.Errorf("create file: %w", err) + } + _, err = yamlFile.Write(yamlData) + yamlFile.Close() + + if err != nil { + return fmt.Errorf("write file: %w", err) + } return nil } @@ -34,7 +70,37 @@ func (j *JSONData) Encoding() error { // Encoding перекодирует файл из YAML в JSON func (y *YAMLData) Encoding() error { // Ниже реализуйте метод - // ... + var dockerCompose models.DockerCompose + + yamlFile, err := os.Open(y.FileInput) + + if err != nil { + return fmt.Errorf("open file: %w", err) + } + + yamlData, err := io.ReadAll(yamlFile) + + yamlFile.Close() + + if err != nil { + return fmt.Errorf("read file: %w", err) + } + if err = yaml.Unmarshal(yamlData, &dockerCompose); err != nil { + return fmt.Errorf("unmarshal: %w", err) + } + jsonData, err := json.Marshal(&dockerCompose) + if err != nil { + return fmt.Errorf("marshal: %w", err) + } + jsonFile, err := os.Create(y.FileOutput) + if err != nil { + return fmt.Errorf("create file: %w", err) + } + _, err = jsonFile.Write(jsonData) + jsonFile.Close() + if err != nil { + return fmt.Errorf("write file: %w", err) + } return nil }