podman
77 строк · 1.9 Кб
1// Copyright 2015 go-swagger maintainers
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package runtime16
17import (18"bytes"19"encoding/csv"20"errors"21"io"22)
23
24// CSVConsumer creates a new CSV consumer
25func CSVConsumer() Consumer {26return ConsumerFunc(func(reader io.Reader, data interface{}) error {27if reader == nil {28return errors.New("CSVConsumer requires a reader")29}30
31csvReader := csv.NewReader(reader)32writer, ok := data.(io.Writer)33if !ok {34return errors.New("data type must be io.Writer")35}36csvWriter := csv.NewWriter(writer)37records, err := csvReader.ReadAll()38if err != nil {39return err40}41for _, r := range records {42if err := csvWriter.Write(r); err != nil {43return err44}45}46csvWriter.Flush()47return nil48})49}
50
51// CSVProducer creates a new CSV producer
52func CSVProducer() Producer {53return ProducerFunc(func(writer io.Writer, data interface{}) error {54if writer == nil {55return errors.New("CSVProducer requires a writer")56}57
58dataBytes, ok := data.([]byte)59if !ok {60return errors.New("data type must be byte array")61}62
63csvReader := csv.NewReader(bytes.NewBuffer(dataBytes))64records, err := csvReader.ReadAll()65if err != nil {66return err67}68csvWriter := csv.NewWriter(writer)69for _, r := range records {70if err := csvWriter.Write(r); err != nil {71return err72}73}74csvWriter.Flush()75return nil76})77}
78