You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Crowdin/responses/responses.go

55 lines
1.3 KiB

package responses
import (
"encoding/xml"
"fmt"
"golang.org/x/net/html/charset"
"io"
)
// Error is a crowdin error message
type Error struct {
XMLName xml.Name `xml:"error"`
Code int `xml:"code"`
Message string `xml:"message"`
}
// Error implements the error interface to handle like an error
func (e *Error) Error() string {
return fmt.Sprintf("Error from crowdin: %s (error code %d)", e.Message, e.Code)
}
// ParseAsError parses XML to Error
func ParseAsError(body io.Reader) (*Error, error) {
var errResponse = new(Error)
decoder := xml.NewDecoder(body)
decoder.CharsetReader = charset.NewReaderLabel
if err := decoder.Decode(&errResponse); err != nil {
return nil, err
}
return errResponse, nil
}
// Success is a crowdin success message
type Success struct {
XMLName xml.Name `xml:"success"`
Stats []File `xml:"stats>file"`
}
// ParseAsSuccess parses XML to Success
func ParseAsSuccess(body io.Reader) (*Success, error) {
var success = new(Success)
decoder := xml.NewDecoder(body)
decoder.CharsetReader = charset.NewReaderLabel
if err := decoder.Decode(&success); err != nil {
return nil, err
}
return success, nil
}
// File represents the status of an uploaded file
type File struct {
XMLName xml.Name `xml:"file"`
Name string `xml:"name,attr"`
Status string `xml:"status,attr"`
}