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