github.com/geniusesgroup/libgo@v0.0.0-20220713101832-828057a9d3d4/mediatype/media-types.go (about) 1 /* For license and copyright information please see LEGAL file in repository */ 2 3 package mediatype 4 5 import ( 6 "../protocol" 7 ) 8 9 // MediaTypes store all data structure details 10 type MediaTypes struct{} 11 12 // RegisterMediaType register given MediaType to the application 13 func (dss *MediaTypes) RegisterMediaType(mt protocol.MediaType) { 14 if mt.MainType() == "" && mt.SubType() == "" { 15 panic("Mediatype doesn't has main and sub type. Can't register empty mediatype.") 16 } 17 register(mt) 18 } 19 20 func (dss *MediaTypes) GetMediaTypeByID(id uint64) protocol.MediaType { return ByID(id) } 21 func (dss *MediaTypes) GetMediaTypeByFileExtension(ex string) protocol.MediaType { 22 return ByFileExtension(ex) 23 } 24 func (dss *MediaTypes) GetMediaType(mediaType string) protocol.MediaType { 25 return ByMediaType(mediaType) 26 } 27 28 var ( 29 poolByMediaType = map[string]protocol.MediaType{} 30 poolByID = map[uint64]protocol.MediaType{} 31 poolByFileExtension = map[string]protocol.MediaType{} 32 ) 33 34 func ByMediaType(mediaType string) protocol.MediaType { return poolByMediaType[mediaType] } 35 func ByID(id uint64) protocol.MediaType { return poolByID[id] } 36 func ByFileExtension(ex string) protocol.MediaType { return poolByFileExtension[ex] } 37 38 func register(mt protocol.MediaType) { 39 // TODO::: lock?? 40 poolByMediaType[mt.ToString()] = mt 41 poolByID[mt.ID()] = mt 42 var fe = mt.FileExtension() 43 if fe != "" { 44 poolByFileExtension[fe] = mt 45 } 46 }