grim/youtrack-import

Use the built in mime stuff to figure out the content type for attachments
package youtrack
import (
"encoding/xml"
"fmt"
"net/http"
)
type OwnedField struct {
Owner string `xml:"owner,attr"`
Description string `xml:"description,attr"`
Value string `xml:",cdata"`
}
type OwnedFieldBundle struct {
XMLName xml.Name `xml:"ownedFieldBundle"`
Name string `xml:"name,attr"`
Fields []OwnedField `xml:"ownedField"`
}
func (c *Client) GetOwnedFieldBundle(name string) (*OwnedFieldBundle, error) {
resp, err := c.request(
http.MethodGet,
c.uri+"/admin/customfield/ownedFieldBundle/"+name,
nil,
)
if err != nil {
return nil, err
}
defer resp.Body.Close()
if err := c.checkStatus(resp, http.StatusOK); err != nil {
return nil, fmt.Errorf("failed to get owned field bundle: %v", err)
}
bundle := &OwnedFieldBundle{}
return bundle, xml.NewDecoder(resp.Body).Decode(bundle)
}
func (c *Client) AppendOwnedFieldBundle(name, value string) error {
resp, err := c.request(
http.MethodPut,
c.uri+"/admin/customfield/ownedFieldBundle/"+name+"/"+value,
nil,
)
if err != nil {
return err
}
defer resp.Body.Close()
if err := c.checkStatus(resp, http.StatusCreated); err != nil {
return fmt.Errorf("failed to append %q to %q: %s", value, name, err)
}
return nil
}