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