mirror of https://github.com/grafana/grafana
Chore: apimachinery types cleanup (#107988)
parent
13a89d4ae3
commit
06c00e4fa7
@ -0,0 +1,88 @@ |
|||||||
|
package utils |
||||||
|
|
||||||
|
import ( |
||||||
|
"bytes" |
||||||
|
"fmt" |
||||||
|
"mime" |
||||||
|
"strconv" |
||||||
|
"strings" |
||||||
|
) |
||||||
|
|
||||||
|
type BlobInfo struct { |
||||||
|
UID string `json:"uid"` |
||||||
|
Size int64 `json:"size,omitempty"` |
||||||
|
Hash string `json:"hash,omitempty"` |
||||||
|
MimeType string `json:"mime,omitempty"` |
||||||
|
Charset string `json:"charset,omitempty"` // content type = mime+charset
|
||||||
|
} |
||||||
|
|
||||||
|
// Content type is mime + charset
|
||||||
|
func (b *BlobInfo) SetContentType(v string) { |
||||||
|
var params map[string]string |
||||||
|
var err error |
||||||
|
|
||||||
|
b.Charset = "" |
||||||
|
b.MimeType, params, err = mime.ParseMediaType(v) |
||||||
|
if err != nil { |
||||||
|
return |
||||||
|
} |
||||||
|
b.Charset = params["charset"] |
||||||
|
} |
||||||
|
|
||||||
|
// Content type is mime + charset
|
||||||
|
func (b *BlobInfo) ContentType() string { |
||||||
|
sb := bytes.NewBufferString(b.MimeType) |
||||||
|
if b.Charset != "" { |
||||||
|
sb.WriteString("; charset=") |
||||||
|
sb.WriteString(b.Charset) |
||||||
|
} |
||||||
|
return sb.String() |
||||||
|
} |
||||||
|
|
||||||
|
func (b *BlobInfo) String() string { |
||||||
|
sb := bytes.NewBufferString(b.UID) |
||||||
|
if b.Size > 0 { |
||||||
|
fmt.Fprintf(sb, "; size=%d", b.Size) |
||||||
|
} |
||||||
|
if b.Hash != "" { |
||||||
|
sb.WriteString("; hash=") |
||||||
|
sb.WriteString(b.Hash) |
||||||
|
} |
||||||
|
if b.MimeType != "" { |
||||||
|
sb.WriteString("; mime=") |
||||||
|
sb.WriteString(b.MimeType) |
||||||
|
} |
||||||
|
if b.Charset != "" { |
||||||
|
sb.WriteString("; charset=") |
||||||
|
sb.WriteString(b.Charset) |
||||||
|
} |
||||||
|
return sb.String() |
||||||
|
} |
||||||
|
|
||||||
|
func ParseBlobInfo(v string) *BlobInfo { |
||||||
|
if v == "" { |
||||||
|
return nil |
||||||
|
} |
||||||
|
info := &BlobInfo{} |
||||||
|
for i, part := range strings.Split(v, ";") { |
||||||
|
if i == 0 { |
||||||
|
info.UID = part |
||||||
|
continue |
||||||
|
} |
||||||
|
kv := strings.Split(strings.TrimSpace(part), "=") |
||||||
|
if len(kv) == 2 { |
||||||
|
val := kv[1] |
||||||
|
switch kv[0] { |
||||||
|
case "size": |
||||||
|
info.Size, _ = strconv.ParseInt(val, 10, 64) |
||||||
|
case "hash": |
||||||
|
info.Hash = val |
||||||
|
case "mime": |
||||||
|
info.MimeType = val |
||||||
|
case "charset": |
||||||
|
info.Charset = val |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return info |
||||||
|
} |
Loading…
Reference in new issue