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.
55 lines
1.3 KiB
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"` |
|
}
|
|
|